@sapui5/sap.fe.templates 1.136.18 → 1.136.20

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.
@@ -47,6 +47,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
47
47
  _initializerDefineProperty(_this, "pageReady", _descriptor10, _this);
48
48
  _this.clearTitleHierarchyCacheSetUp = false;
49
49
  _this.mergePatchDraft = false;
50
+ _this.fclCloseHandlerSet = false;
50
51
  _this.handlers = {
51
52
  onPrimaryAction(oController, oView, oContext, sActionName, mParameters, mConditions) {
52
53
  /**
@@ -759,12 +760,16 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
759
760
  * @param cards Array of cards to be updated
760
761
  */;
761
762
  _proto._updateAvailableCards = async function _updateAvailableCards(cards) {
762
- await this.collaborationManager.collectAvailableCards(cards);
763
- if (cards.length > 0) {
764
- const cardObject = this.collaborationManager.updateCards(cards);
765
- const parentAppId = this.getAppComponent().getId();
766
- this.getAppComponent().getCollaborationManagerService().addCardsToCollaborationManager(cardObject, parentAppId);
767
- this.getAppComponent().getCollaborationManagerService().shareAvailableCards();
763
+ const collaborationManagerService = this.getAppComponent().getCollaborationManagerService();
764
+ // Only collect cards when consumers are connected to the cards channel
765
+ if (collaborationManagerService.hasCollaborationManagerConnected()) {
766
+ await this.collaborationManager.collectAvailableCards(cards);
767
+ if (cards.length > 0) {
768
+ const cardObject = this.collaborationManager.updateCards(cards);
769
+ const parentAppId = this.getAppComponent().getId();
770
+ collaborationManagerService.addCardsToCollaborationManager(cardObject, parentAppId);
771
+ collaborationManagerService.shareAvailableCards();
772
+ }
768
773
  }
769
774
  }
770
775
 
@@ -882,6 +887,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
882
887
  });
883
888
  this.mergePatchDraft = true;
884
889
  }
890
+
891
+ // The FCL Close button loses its DOM node between mousedown and mouseup when the Name
892
+ // (EditableHeaderTitle) field has focus: blur triggers side effects → OData refresh →
893
+ // OPDT re-renders navActionsToolbar, detaching the node before click fires.
894
+ // Calling closeColumn() on mousedown captures the intent before the re-render.
895
+ if (!this.fclCloseHandlerSet && !Device.support.touch) {
896
+ const fclCloseButton = oView.byId("fe::FCLStandardAction::Close");
897
+ if (fclCloseButton?.isA("sap.m.Button")) {
898
+ fclCloseButton.attachBrowserEvent("mousedown", () => {
899
+ this._routing.closeColumn();
900
+ });
901
+ }
902
+ this.fclCloseHandlerSet = true;
903
+ }
885
904
  }
886
905
 
887
906
  /**
@@ -1617,4 +1636,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1617
1636
  }), _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);
1618
1637
  return ObjectPageController;
1619
1638
  }, false);
1620
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwib25UYWJsZUJpbmRpbmdVcGRhdGVkIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsInZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImlzQSIsImdldFR5cGUiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50IiwiYmxvY2siLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJfZmluZFRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiRWRpdEZsb3dBY3Rpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic29tZSIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJpdGVtIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwiX2luaXRpYWxpemVQYWdpbmF0aW9uIiwibGlzdEJpbmRpbmciLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZG9tRWRpdGFibGVFbGVtZW50IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsIlVJNUVsZW1lbnQiLCJjbG9zZXN0VG8iLCJnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvYmplY3RQYWdlIiwiZmlyc3RDbGlja2FibGVFbGVtZW50IiwiYWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsImdldENvbnRlbnQiLCJnZXRFbmFibGVkIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImdldEVuYWJsZVN1Z2dlc3Rpb25zIiwiaXNCb3VuZCIsInNldEVuYWJsZVN1Z2dlc3Rpb25zIiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwib0JpbmRpbmciLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsImdldENvbnRleHQiLCJmbkhhbmRsZUNoYW5nZSIsImNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIm9FcnJvciIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwicmVjb21tZW5kYXRpb25zIiwiY2xlYXJSZWNvbW1lbmRhdGlvbnMiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsIl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCIsImFwcGx5QXBwU3RhdGUiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiY2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNhcmRPYmplY3QiLCJ1cGRhdGVDYXJkcyIsInBhcmVudEFwcElkIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwic2hhcmVBdmFpbGFibGVDYXJkcyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsIm1lc3NhZ2VTdHJpcCIsImVudGl0eU5hbWUiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbGxhYm9yYXRpb25NZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJNZXNzYWdlVHlwZSIsIkluZm9ybWF0aW9uIiwidGFyZ2V0IiwiYWRkTWVzc2FnZXMiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9TZWxlY3RlZFNlY3Rpb24iLCJnZXRFbGVtZW50QnlJZCIsImdldFNlbGVjdGVkU2VjdGlvbiIsImN0eHQiLCJvQmluZGluZ0NvbnRleHQiLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImlzRWRpdGFibGUiLCJmZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zIiwiY29udGV4dCIsImZvcmNlRm9jdXMiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIkRldmljZSIsInN1cHBvcnQiLCJ0b3VjaCIsInNhdmVCdXR0b24iLCJhdXRvUXVldWVVbmxvY2siLCJhdXRvUXVldWVMb2NrIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJkZXRhY2hCcm93c2VyRXZlbnQiLCJhdHRhY2hCcm93c2VyRXZlbnQiLCJsb2NrIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib09iamVjdFBhZ2VTdWJ0aXRsZSIsIm9DdXN0b21EYXRhIiwib09iamVjdFBhZ2VEZXNjcmlwdGlvbiIsImV4dHJhY3RQYXRocyIsImJpbmRpbmdJbmZvIiwiZnJvbSIsIlNldCIsInBhcnRzIiwicGFydCIsIm1vZGVsIiwicGF0aCIsIkJvb2xlYW4iLCJzdWJ0aXRsZVBhdGhzIiwiZ2V0QmluZGluZ0luZm8iLCJkZXNjcmlwdGlvblBhdGhzIiwicGF0aHNUb1Jlc29sdmUiLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9PYmplY3RQYWdlQ29udGV4dCIsImJ1aWxkIiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsImFsbCIsInAiLCJyZXF1ZXN0T2JqZWN0IiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIm9NZXNzYWdlIiwiaXNFcnJvck1lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwibWVzc2FnZVZhbGlkYXRpb24iLCJpbmNsdWRlcyIsImVyciIsIm9SZXQiLCJpc0VkaXRNb2RlIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwib0l0ZW1CaW5kaW5nIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwicHJvcGVydHlQYXRoIiwiTG9jYWxQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJnZXRBY3RpdmVFbGVtZW50IiwiYnlQYXNzU2lkZUVmZmVjdHMiLCJpc1RyYW5zaWVudCIsImNyZWF0ZWQiLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwicmV0IiwiZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24iLCJzaG93TWVzc2FnZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJpc0Nvbm5lY3RlZCIsInNraXBCaW5kaW5nVG9WaWV3IiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImRpYWxvZ0FjdGlvbiIsIkNvbGxhYm9yYXRpb25EaXNjYXJkIiwiZ2V0VXNlckFjdGlvbiIsImNyZWF0aW9uUm93IiwidGFibGVCaW5kaW5nIiwiY29udGV4dEtleXMiLCJzdGFydHNXaXRoIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGVBdEVuZCIsInNraXBTaWRlRWZmZWN0cyIsImlzU2tpcEJpbmRpbmdUb1ZpZXciLCJpc1N0YW5kYXJkU2F2ZSIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwic291cmNlIiwicHJvbWlzZXMiLCJuZXdQYXRoIiwicGF0aFBhcnRzIiwic3BsaXQiLCJtZXRhTW9kZWwiLCJzaGlmdCIsInNwbGljZSIsInBhdGhQYXJ0IiwiZ2V0Um91dGVyIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsInJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJoaWVyYXJjaHlQb3NpdGlvbiIsImxpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJpbmRleE9mIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGluayIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0LCBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWxsQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL0Vhc3lGaWxsQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTdW1tYXJpemF0aW9uQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL1N1bW1hcml6YXRpb25CdXR0b25cIjtcbmltcG9ydCB0eXBlIEZvcm1BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQVBJXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VCdXR0b25cIjtcbmltcG9ydCB0eXBlIFNoYXJlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NoYXJlL1NoYXJlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uRGlzY2FyZCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRpc2NhcmREaWFsb2dcIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb25CbG9jayBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N1YlNlY3Rpb25CbG9ja1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBTZWFyY2hGaWVsZCBmcm9tIFwic2FwL20vU2VhcmNoRmllbGRcIjtcbmltcG9ydCB0eXBlIFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnkgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgRm9ybSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1cIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVUeXBlQmFzZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UYWJsZVR5cGVCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIExpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbGxhYm9yYXRpb25EcmFmdCBmcm9tIFwiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EcmFmdFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIHRvIGV2ZXJ5IHZpc2libGUgc3Vic2VjdGlvbiB0aGF0IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgR3JpZFRhYmxlIG9yIFRyZWVUYWJsZS5cblx0ICogVGhpcyBtYWtlcyB0aGUgdGFibGUgZmlsbCB0aGUgZnVsbCBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgdGFibGUgaXRzZWxmIHJhdGhlciB0aGFuIG9uIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCB2aXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4udmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHR2aXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRcdHZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHN1YlNlY3Rpb25zKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0c3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBzdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGl0ZW0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgeyBpc0ZpcnN0UmVuZGVyaW5nPzogKCkgPT4gYm9vbGVhbiB9KS5pc0ZpcnN0UmVuZGVyaW5nPy4oKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpcnN0RWRpdGFibGVJbnB1dCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkb21FZGl0YWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTtcblx0XHRyZXR1cm4gZG9tRWRpdGFibGVFbGVtZW50ID8gVUk1RWxlbWVudC5jbG9zZXN0VG8oZG9tRWRpdGFibGVFbGVtZW50KSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgZm91bmQgaW4gdGhlIGhlYWRlclxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiAob2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhY3Rpb25zLmZpbmQoZnVuY3Rpb24gKGFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldENvbnRlbnQoKT8uZ2V0VmlzaWJsZSgpID8/IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U2hhcmVBUEk+KFwic2FwLmZlLm1hY3Jvcy5TaGFyZVwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8RWFzeUZpbGxCdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5FYXN5RmlsbEJ1dHRvblwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8Q29sbGFib3JhdGlvbkRyYWZ0PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZSBhbmQgQ29sbGFib3JhdGlvbkRyYWZ0IGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNhYmxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYWN0aW9uLmlzQTxJbnZpc2libGVUZXh0PihcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIWFjdGlvbi5pc0E8VG9vbGJhclNwYWNlcj4oXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgKGFjdGlvbiBhcyBCdXR0b24pLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIE9iamVjdCBQYWdlIExheW91dCBiYXNlZCBvbiB0aGUgaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAzOyAvLyAzIHNlY3Rpb25zL3N1YnNlY3Rpb25zIGFyZSBsb2FkZWQgaW5pdGlhbGx5LCB0aGUgb3RoZXJzIGFyZSBsb2FkZWQgbGF6aWx5XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBhU3ViU2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBibG9ja0NvbnRyb2wgb2YgYUJsb2Nrcykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGluaXRpYWwgZm9jdXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gYVN1YlNlY3Rpb25zIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uc1xuXHQgKi9cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRzZXRUaW1lb3V0KFxuXHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRcdFx0bGV0IG9GaWVsZFRvRm9jdXM6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIHsgY29udGVudDogeyBnZXRDb250ZW50RWRpdDogRnVuY3Rpb24gfSB9KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgPz8gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uaXNBPFNlYXJjaEZpZWxkPihcInNhcC5tLlNlYXJjaEZpZWxkXCIpICYmXG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmdldEVuYWJsZVN1Z2dlc3Rpb25zKCkgJiZcblx0XHRcdFx0XHRcdCFvRmllbGRUb0ZvY3VzLmlzQm91bmQoXCJlbmFibGVTdWdnZXN0aW9uc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgc2V0IG9uIGEgc2VhcmNoIGZpZWxkIHdpdGggc3VnZ2VzdGlvbnMsIHdlIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHN1Z2dlc3Rpb25zIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlbSBvbiBmb2N1c1xuXHRcdFx0XHRcdFx0Ly8gdW5sZXNzIHRoaXMgcHJvcGVydHkgaXMgYm91bmQgKHRvIGF2b2lkIG1vZGlmeWluZyBzb21ldGhpbmcgaW4gYSBtb2RlbClcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuc2V0RW5hYmxlU3VnZ2VzdGlvbnMoZmFsc2UpO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5zZXRFbmFibGVTdWdnZXN0aW9ucyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdDBcblx0XHQpO1xuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdC8vIEZ1bmN0aW9uIHRvIG5hdmlnYXRlIGJhY2ssIG9yIGRpc3BsYXkgdGhlIGxhdW5jaHBhZCBpZiB3ZSdyZSBvbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgaGlzdG9yeVxuXHRcdGNvbnN0IG5hdkJhY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuVVJMO1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdXNlIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0LCB0aGF0IHdpbGwgZGlzcGxheSB0aGUgaG9tZSBwYWdlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCA1MDApO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGlzIG9iamVjdCBwYWdlIGRvZXNuJ3QgaGF2ZSBhIGJpbmRpbmcgY29udGV4dCwgYnV0IHN0aWxsIGhhbmRsZXMgdGhlIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiAtLT4gcGZvcm0gdGhlIG5hdiBiYWNrIGFuZCByZW1vdmUgdGhlIG5hdmJhY2sgaGFuZGxlciBhcyBpdCBtYWtlcyBubyBzZW5zZSBhbnkgbG9uZ2VyXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0LnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4obmF2QmFjaylcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGJhY2sgbmF2aWdhdGlvblwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGhpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHRcdD8uZW5hYmxlZDtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRuYXZCYWNrLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoaWRkZW5EcmFmdEVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKGlucHV0QmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXc/LmdldFZpZXdEYXRhKCk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0XHQob1RhYmxlUm93QmluZGluZyBhcyB1bmtub3duIGFzIHsgcmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXM6IEZ1bmN0aW9uIH0pLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgYW5kIHVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhY2NvcmRpbmdseVxuXHRcdFx0XHQvLyBXaWxsIHRvIGJlIGZpeGVkIHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlQVBJID8gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSA6IHt9O1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIFtdLCBcInRhYmxlXCIpO1xuXG5cdFx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdFx0b0ZpbmFsVUlTdGF0ZTogUHJvbWlzZTx1bmtub3duPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLmVkaXRGbG93LmNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZShiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBiaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwge30sIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0KG9PYmplY3RQYWdlIGFzIHVua25vd24gYXMgeyBfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50czogRnVuY3Rpb24gfSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblxuXHRcdFx0Ly9UbyBDb21wdXRlIHRoZSBFZGl0IEJpbmRpbmcgb2YgdGhlIHN1Yk9iamVjdCBwYWdlIHVzaW5nIHJvb3Qgb2JqZWN0IHBhZ2UsIGNyZWF0ZSBhIGNvbnRleHQgZm9yIGRyYWZ0IHJvb3QgYW5kIHVwZGF0ZSB0aGUgZWRpdCBidXR0b24gaW4gc3ViIE9QIHVzaW5nIHRoZSBjb250ZXh0XG5cdFx0XHRBY3Rpb25SdW50aW1lLnVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIElmIHRoZSB2aWV3J3MgYmluZGluZyBjb250ZXh0IGFscmVhZHkgaGFkIG1lc3NhZ2VzIHRoYXQgd2VyZSBub3QgY2xlYXJlZCwgd2Ugd291bGQgbmVlZCB0byByZS1ldmFsdWF0ZSB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0dGhpcy5fZm5TaG93T1BNZXNzYWdlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgYSBtZXNzYWdlIHN0cmlwIGlmIGEgcmVkaXJlY3Rpb24gdG8gYSBub24tZHJhZnQgZWxlbWVudCBoYXMgYmVlbiBkb25lLlxuXHQgKiBSZW1vdmUgdGhlIG1lc3NhZ2Ugc3RyaXAgaW4gY2FzZSB3ZSBuYXZpZ2F0ZSB0byBhbm90aGVyIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlXG5cdCAqL1xuXHRkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UoZW50aXR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24sXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0YXN5bmMgX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IFByb21pc2U8eyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlRGVzY3JpcHRpb25cIjtcblx0XHR9KTtcblx0XHRjb25zdCBleHRyYWN0UGF0aHMgPSAoYmluZGluZ0luZm8/OiB7IHBhcnRzPzogeyBwYXRoPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9W10gfSk6IHN0cmluZ1tdID0+XG5cdFx0XHRBcnJheS5mcm9tKFxuXHRcdFx0XHRuZXcgU2V0KFxuXHRcdFx0XHRcdChiaW5kaW5nSW5mbz8ucGFydHMgfHwgW10pXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC5tb2RlbClcblx0XHRcdFx0XHRcdC5tYXAoKHBhcnQpID0+IHBhcnQucGF0aCB8fCBcIlwiKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGNvbnN0IHN1YnRpdGxlUGF0aHMgPSBleHRyYWN0UGF0aHMob09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBwYXRoc1RvUmVzb2x2ZSA9IFsuLi5zdWJ0aXRsZVBhdGhzLCAuLi5kZXNjcmlwdGlvblBhdGhzXTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBmbkNsZWFyQ2FjaGVUaXRsZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5jbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUob09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0fTtcblx0XHRpZiAob09iamVjdFBhZ2VTdWJ0aXRsZSAmJiAhdGhpcy5jbGVhclRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCkge1xuXHRcdFx0b09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHR0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBidWlsZCA9ICgpOiB7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSA9PiAoe1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRWYWx1ZSgpIHx8IFwiXCIsXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldFZhbHVlKCkgfHwgXCJcIlxuXHRcdH0pO1xuXHRcdC8vaWYgbm8gY29udGV4dCBvciBub3RoaW5nIHRvIHJlc29sdmUsIGRpcmVjdCByZXR1cm5cblx0XHRpZiAoIW9PYmplY3RQYWdlQ29udGV4dCB8fCBwYXRoc1RvUmVzb2x2ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYnVpbGQoKSk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHBhdGhzVG9SZXNvbHZlLm1hcChhc3luYyAocCkgPT4gKG9PYmplY3RQYWdlQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkucmVxdWVzdE9iamVjdChwKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpKSk7XG5cdFx0cmV0dXJuIGJ1aWxkKCk7XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKChvRWxlbWVudCkgPT4gb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkKTtcblx0XHRpZiAob0J1dHRvbikge1xuXHRcdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHRcdH1cblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRGb290ZXIoKSBhcyBPdmVyZmxvd1Rvb2xiYXIpLmdldENvbnRlbnQoKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IChvRXhlY3V0aW9uLmdldFNvdXJjZSgpIGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbikuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpISkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgaXNFcnJvck1lc3NhZ2UgPSBvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlVmFsaWRhdGlvbiA9IGlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdFx0PyBpc0Vycm9yTWVzc2FnZVxuXHRcdFx0XHRcdDogaXNFcnJvck1lc3NhZ2UgJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmluY2x1ZGVzKHNWaWV3SWQpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VWYWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogc3RyaW5nLCBvUmV0PzogdW5rbm93bik6IHVua25vd24ge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGlzU2tpcEJpbmRpbmdUb1ZpZXcgPSBza2lwQmluZGluZ1RvVmlldyBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50O1xuXHRcdFx0Y29uc3QgaXNTdGFuZGFyZFNhdmUgPVxuXHRcdFx0XHRpc1NraXBCaW5kaW5nVG9WaWV3ICYmIHR5cGVvZiBpc1NraXBCaW5kaW5nVG9WaWV3ID09IFwib2JqZWN0XCIgJiYgaXNTa2lwQmluZGluZ1RvVmlldy5nZXRTb3VyY2UoKS5nZXRDb21tYW5kKCkgPT09IFwiU2F2ZVwiO1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdCxcblx0XHRcdFx0XHRza2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRpc1N0YW5kYXJkU2F2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fCAhY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRjb25zdCBhZnRlckNhbmNlbDogRnVuY3Rpb24gPSAocHJvbWlzZVJlc3VsdDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdC8vIGZvY3VzIGlzIHJldGFpbmVkIG9uIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxuXHRcdFx0aWYgKGxhc3RGb2N1c2VkQ29udHJvbElkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0VUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChsYXN0Rm9jdXNlZENvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJvbWlzZVJlc3VsdDtcblx0XHR9O1xuXHRcdGlmIChcblx0XHRcdCh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkICYmXG5cdFx0XHRpc0RvY3VtZW50TW9kaWZpZWRcblx0XHQpIHtcblx0XHRcdHJldHVybiBkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0YWZ0ZXJDYW5jZWwsXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvd1xuXHRcdFx0LmNhbmNlbERvY3VtZW50KGNvbnRleHQsIHsgY29udHJvbDogY2FuY2VsQnV0dG9uLCBza2lwRGlzY2FyZFBvcG92ZXI6IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciB9KVxuXHRcdFx0LnRoZW4oKHByb21pc2VSZXN1bHQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFmdGVyQ2FuY2VsKHByb21pc2VSZXN1bHQpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBfYXBwbHlEb2N1bWVudChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBDb250cm9sW10sIGFTdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgYUNvbnRyb2xzOiBDb250cm9sW10sIGJJc0NoYXJ0PzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbTEgb2YgYVBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IChpdGVtMSBhcyBNYWNyb0FQSSkuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoYklzQ2hhcnQpIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50Py5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpIGFzIENvbnRyb2xbXTtcblx0XHRcdFx0XHRpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5pc0E8Q2hhcnRCbG9jaz4oXCJzYXAuZmUubWFjcm9zLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0Q29udHJvbCA9IGl0ZW0uZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKGNoYXJ0Q29udHJvbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBPER5bmFtaWNTaWRlQ29udGVudD4oXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9FbGVtZW50LmdldE1haW5Db250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9FbGVtZW50ID0gb1N1YkVsZW1lbnRbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgb0VsZW1lbnQuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvU3ViRWxlbWVudCAmJiBvU3ViRWxlbWVudC5pc0EgJiYgb1N1YkVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9TdWJFbGVtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10ge1xuXHRcdGxldCBhQmxvY2tzOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpOiBUYWJsZVtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IFRhYmxlW10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpOiBDaGFydFtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IENoYXJ0W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBDb250ZXh0LCBzQ2hhcnRQYXRoOiBzdHJpbmcpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coaXRlbSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMoXG5cdFx0b1BhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFMaW5lQ29udGV4dDogT0RhdGFWNENvbnRleHRbXSxcblx0XHRzQ2hhcnRQYXRoOiBzdHJpbmdcblx0KTogeyBzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50OyBhdHRyaWJ1dGVzOiB1bmtub3duW10gfSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGluaXRpYWxpemUgcGFnaW5hdGlvbi5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBvYmplY3QgcGFnZVxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgUGFyZW50IGxpc3QgYmluZGluZyB0byB1c2Vcblx0ICovXG5cdF9pbml0aWFsaXplUGFnaW5hdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRpZiAodmlld0xldmVsID4gMSkge1xuXHRcdFx0Y29uc3QgcGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdUb1VzZSA9IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShiaW5kaW5nVG9Vc2UsIHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAobGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShsaXN0QmluZGluZywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIEJyZWFkY3J1bWJzJyBsaW5rcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaHJlZiB3aGVuIHRoZSBjb250ZXh0IGNoYW5nZXMuXG5cdCAqIEBwYXJhbSBzb3VyY2UgQnJlYWRjcnVtYnMgY29udHJvbFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBCcmVhZGNydW1icyBjb250ZW50IGlzIGZpbGxlZCBwcm9wZXJseVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgc2V0QnJlYWRjcnVtYkxpbmtzKHNvdXJjZTogQnJlYWRDcnVtYnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gc291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0cHJvbWlzZXM6IFByb21pc2U8VGl0bGVJbmZvcm1hdGlvbj5bXSA9IFtdLFxuXHRcdFx0bmV3UGF0aCA9IGNvbnRleHQ/LmdldFBhdGgoKSxcblx0XHRcdHBhdGhQYXJ0cyA9IG5ld1BhdGg/LnNwbGl0KFwiL1wiKSA/PyBbXSxcblx0XHRcdG1ldGFNb2RlbCA9IGFwcENvbXBvbmVudCAmJiBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHBhdGggPSBcIlwiO1xuXHRcdHRyeSB7XG5cdFx0XHRwYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdHBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0cGF0aFBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhdGhQYXJ0OiBzdHJpbmcpIHtcblx0XHRcdFx0cGF0aCArPSBgLyR7cGF0aFBhcnR9YDtcblx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVzdWx0Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChyZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gV2UgZG9udCBuZWVkIHRvIGNyZWF0ZSBhIGJyZWFkY3J1bWIgZm9yIFBhcmFtZXRlciBwYXRoXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb21pc2VzLnB1c2gocm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHBhdGgpKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvczogVGl0bGVJbmZvcm1hdGlvbltdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0bGV0IGhpZXJhcmNoeVBvc2l0aW9uLCBsaW5rO1xuXHRcdFx0Zm9yIChjb25zdCB0aXRsZUhpZXJhcmNoeUluZm8gb2YgdGl0bGVIaWVyYXJjaHlJbmZvcykge1xuXHRcdFx0XHRoaWVyYXJjaHlQb3NpdGlvbiA9IHRpdGxlSGllcmFyY2h5SW5mb3MuaW5kZXhPZih0aXRsZUhpZXJhcmNoeUluZm8pO1xuXHRcdFx0XHRsaW5rID0gc291cmNlLmdldExpbmtzKClbaGllcmFyY2h5UG9zaXRpb25dID8gc291cmNlLmdldExpbmtzKClbaGllcmFyY2h5UG9zaXRpb25dIDogbmV3IExpbmsoKTtcblx0XHRcdFx0Ly9zQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdFx0bGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0bGluay5zZXRIcmVmKGVuY29kZVVSSSh0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50ISkpO1xuXHRcdFx0XHRpZiAoIXNvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSkge1xuXHRcdFx0XHRcdHNvdXJjZS5hZGRMaW5rKGxpbmspO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBvYmplY3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IHsgc3VwcG9ydGVkPzogYm9vbGVhbiB9W10pOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKFxuXHRcdFx0b1N1YkRhdGFQb2ludHM6IFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fVxuXHRcdFx0Pixcblx0XHRcdG9QYWdlRGF0YTogb2JqZWN0XG5cdFx0KTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBvYmplY3QgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl0hW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSE7XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIl9cIikgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9LFxuXHRcdFx0bUNvbmRpdGlvbnM6IHtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW52b2tlcyB0aGUgcGFnZSBwcmltYXJ5IGFjdGlvbiBvbiBwcmVzcyBvZiBDdHJsK0VudGVyLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBpVmlld0xldmVsID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuaGFuZGxlcnMub25DYWxsQWN0aW9uKG9WaWV3LCBzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQoKTtcblx0XHRcdH0gZWxzZSBpZiAoQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYW5hZ2VzIHRoZSBjb250ZXh0IGNoYW5nZSBldmVudCBvbiB0aGUgdGFibGVzLlxuXHRcdCAqIFRoZSBmb2N1cyBpcyBzZXQgaWYgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBhbiBlZGl0RmxvdyBhY3Rpb24gYW5kXG5cdFx0ICogYW4gZXZlbnQgaXMgZmlyZWQgb24gdGhlIG9iamVjdFBhZ2UgbWVzc2FnZUJ1dHRvbi5cblx0XHQgKiBAcGFyYW0gdGhpcyBUaGUgb2JqZWN0UGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIGV2ZW50IFRoZSBVSTUgZXZlbnRcblx0XHQgKi9cblx0XHRhc3luYyBvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgZXZlbnQ6IFVJNUV2ZW50PHt9LCBUYWJsZUFQST4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlQ29udGV4dHMgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpPy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblxuXHRcdFx0aWYgKGN1cnJlbnRBY3Rpb25Qcm9taXNlICYmIHRhYmxlQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvblJlc3BvbnNlID0gYXdhaXQgY3VycmVudEFjdGlvblByb21pc2U7XG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3BvbnNlPy5jb250cm9sSWQgPT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbkRhdGEgPSBhY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBhY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbSA9IHRhYmxlQ29udGV4dHMuZmluZEluZGV4KCh0YWJsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGFibGVEYXRhID0gdGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5cy5ldmVyeSgoa2V5OiBzdHJpbmcpID0+IHRhYmxlRGF0YVtrZXldID09PSBhY3Rpb25EYXRhW2tleV0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGlhbG9nID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlZCBiZWZvcmUgc2V0IHRoZSBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdG9uVGFibGVCaW5kaW5nVXBkYXRlZCh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBw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
1639
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiZmNsQ2xvc2VIYW5kbGVyU2V0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwib25UYWJsZUJpbmRpbmdVcGRhdGVkIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsInZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImlzQSIsImdldFR5cGUiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50IiwiYmxvY2siLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJfZmluZFRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiRWRpdEZsb3dBY3Rpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic29tZSIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJpdGVtIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwiX2luaXRpYWxpemVQYWdpbmF0aW9uIiwibGlzdEJpbmRpbmciLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZG9tRWRpdGFibGVFbGVtZW50IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsIlVJNUVsZW1lbnQiLCJjbG9zZXN0VG8iLCJnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvYmplY3RQYWdlIiwiZmlyc3RDbGlja2FibGVFbGVtZW50IiwiYWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsImdldENvbnRlbnQiLCJnZXRFbmFibGVkIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImdldEVuYWJsZVN1Z2dlc3Rpb25zIiwiaXNCb3VuZCIsInNldEVuYWJsZVN1Z2dlc3Rpb25zIiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwib0JpbmRpbmciLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsImdldENvbnRleHQiLCJmbkhhbmRsZUNoYW5nZSIsImNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIm9FcnJvciIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwicmVjb21tZW5kYXRpb25zIiwiY2xlYXJSZWNvbW1lbmRhdGlvbnMiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsIl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCIsImFwcGx5QXBwU3RhdGUiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiY2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJoYXNDb2xsYWJvcmF0aW9uTWFuYWdlckNvbm5lY3RlZCIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJmY2xDbG9zZUJ1dHRvbiIsImNsb3NlQ29sdW1uIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib09iamVjdFBhZ2VTdWJ0aXRsZSIsIm9DdXN0b21EYXRhIiwib09iamVjdFBhZ2VEZXNjcmlwdGlvbiIsImV4dHJhY3RQYXRocyIsImJpbmRpbmdJbmZvIiwiZnJvbSIsIlNldCIsInBhcnRzIiwicGFydCIsIm1vZGVsIiwicGF0aCIsIkJvb2xlYW4iLCJzdWJ0aXRsZVBhdGhzIiwiZ2V0QmluZGluZ0luZm8iLCJkZXNjcmlwdGlvblBhdGhzIiwicGF0aHNUb1Jlc29sdmUiLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9PYmplY3RQYWdlQ29udGV4dCIsImJ1aWxkIiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsImFsbCIsInAiLCJyZXF1ZXN0T2JqZWN0IiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIm9NZXNzYWdlIiwiaXNFcnJvck1lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwibWVzc2FnZVZhbGlkYXRpb24iLCJpbmNsdWRlcyIsImVyciIsIm9SZXQiLCJpc0VkaXRNb2RlIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwib0l0ZW1CaW5kaW5nIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwicHJvcGVydHlQYXRoIiwiTG9jYWxQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJnZXRBY3RpdmVFbGVtZW50IiwiYnlQYXNzU2lkZUVmZmVjdHMiLCJpc1RyYW5zaWVudCIsImNyZWF0ZWQiLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwicmV0IiwiZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24iLCJzaG93TWVzc2FnZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJpc0Nvbm5lY3RlZCIsInNraXBCaW5kaW5nVG9WaWV3IiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImRpYWxvZ0FjdGlvbiIsIkNvbGxhYm9yYXRpb25EaXNjYXJkIiwiZ2V0VXNlckFjdGlvbiIsImNyZWF0aW9uUm93IiwidGFibGVCaW5kaW5nIiwiY29udGV4dEtleXMiLCJzdGFydHNXaXRoIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGVBdEVuZCIsInNraXBTaWRlRWZmZWN0cyIsImlzU2tpcEJpbmRpbmdUb1ZpZXciLCJpc1N0YW5kYXJkU2F2ZSIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwic291cmNlIiwicHJvbWlzZXMiLCJuZXdQYXRoIiwicGF0aFBhcnRzIiwic3BsaXQiLCJtZXRhTW9kZWwiLCJzaGlmdCIsInNwbGljZSIsInBhdGhQYXJ0IiwiZ2V0Um91dGVyIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsInJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJoaWVyYXJjaHlQb3NpdGlvbiIsImxpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJpbmRleE9mIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGluayIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsZXh0ZW5zaWJsZSxmaW5hbEV4dGVuc2lvbixwdWJsaWNFeHRlbnNpb24sdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL1JlY29tbWVuZGF0aW9ucy9Db25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQsTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUluZm9ybWF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHR5cGUgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsbEJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9FYXN5RmlsbEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU3VtbWFyaXphdGlvbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9TdW1tYXJpemF0aW9uQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUFQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTaGFyZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkRpc2NhcmQgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EaXNjYXJkRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU2VhcmNoRmllbGQgZnJvbSBcInNhcC9tL1NlYXJjaEZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlVHlwZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVGFibGVUeXBlQmFzZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0xpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBCcmVhZENydW1icyBmcm9tIFwic2FwL3V4YXAvQnJlYWRDcnVtYnNcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aW9uRHJhZnQgZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRHJhZnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuZXhwb3J0IHR5cGUgQmluZGluZ1BhcmFtcyA9IHtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogRkVWaWV3O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihDb2xsYWJvcmF0aW9uTWFuYWdlci5vdmVycmlkZShDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlKSlcblx0Y29sbGFib3JhdGlvbk1hbmFnZXIhOiBDb2xsYWJvcmF0aW9uTWFuYWdlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBjbGVhclRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b24hOiBNZXNzYWdlQnV0dG9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbk1lc3NhZ2U/OiBNZXNzYWdlO1xuXG5cdHByaXZhdGUgbWVyZ2VQYXRjaERyYWZ0ID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBmY2xDbG9zZUhhbmRsZXJTZXQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIHRvIGV2ZXJ5IHZpc2libGUgc3Vic2VjdGlvbiB0aGF0IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgR3JpZFRhYmxlIG9yIFRyZWVUYWJsZS5cblx0ICogVGhpcyBtYWtlcyB0aGUgdGFibGUgZmlsbCB0aGUgZnVsbCBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgdGFibGUgaXRzZWxmIHJhdGhlciB0aGFuIG9uIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCB2aXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4udmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHR2aXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRcdHZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHN1YlNlY3Rpb25zKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0c3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBzdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGl0ZW0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgeyBpc0ZpcnN0UmVuZGVyaW5nPzogKCkgPT4gYm9vbGVhbiB9KS5pc0ZpcnN0UmVuZGVyaW5nPy4oKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpcnN0RWRpdGFibGVJbnB1dCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkb21FZGl0YWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTtcblx0XHRyZXR1cm4gZG9tRWRpdGFibGVFbGVtZW50ID8gVUk1RWxlbWVudC5jbG9zZXN0VG8oZG9tRWRpdGFibGVFbGVtZW50KSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgZm91bmQgaW4gdGhlIGhlYWRlclxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiAob2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhY3Rpb25zLmZpbmQoZnVuY3Rpb24gKGFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldENvbnRlbnQoKT8uZ2V0VmlzaWJsZSgpID8/IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U2hhcmVBUEk+KFwic2FwLmZlLm1hY3Jvcy5TaGFyZVwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8RWFzeUZpbGxCdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5FYXN5RmlsbEJ1dHRvblwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8Q29sbGFib3JhdGlvbkRyYWZ0PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZSBhbmQgQ29sbGFib3JhdGlvbkRyYWZ0IGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNhYmxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYWN0aW9uLmlzQTxJbnZpc2libGVUZXh0PihcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIWFjdGlvbi5pc0E8VG9vbGJhclNwYWNlcj4oXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgKGFjdGlvbiBhcyBCdXR0b24pLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIE9iamVjdCBQYWdlIExheW91dCBiYXNlZCBvbiB0aGUgaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAzOyAvLyAzIHNlY3Rpb25zL3N1YnNlY3Rpb25zIGFyZSBsb2FkZWQgaW5pdGlhbGx5LCB0aGUgb3RoZXJzIGFyZSBsb2FkZWQgbGF6aWx5XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBhU3ViU2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBibG9ja0NvbnRyb2wgb2YgYUJsb2Nrcykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGluaXRpYWwgZm9jdXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gYVN1YlNlY3Rpb25zIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uc1xuXHQgKi9cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRzZXRUaW1lb3V0KFxuXHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRcdFx0bGV0IG9GaWVsZFRvRm9jdXM6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIHsgY29udGVudDogeyBnZXRDb250ZW50RWRpdDogRnVuY3Rpb24gfSB9KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgPz8gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uaXNBPFNlYXJjaEZpZWxkPihcInNhcC5tLlNlYXJjaEZpZWxkXCIpICYmXG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmdldEVuYWJsZVN1Z2dlc3Rpb25zKCkgJiZcblx0XHRcdFx0XHRcdCFvRmllbGRUb0ZvY3VzLmlzQm91bmQoXCJlbmFibGVTdWdnZXN0aW9uc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgc2V0IG9uIGEgc2VhcmNoIGZpZWxkIHdpdGggc3VnZ2VzdGlvbnMsIHdlIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHN1Z2dlc3Rpb25zIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlbSBvbiBmb2N1c1xuXHRcdFx0XHRcdFx0Ly8gdW5sZXNzIHRoaXMgcHJvcGVydHkgaXMgYm91bmQgKHRvIGF2b2lkIG1vZGlmeWluZyBzb21ldGhpbmcgaW4gYSBtb2RlbClcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuc2V0RW5hYmxlU3VnZ2VzdGlvbnMoZmFsc2UpO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5zZXRFbmFibGVTdWdnZXN0aW9ucyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cz8uZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdDBcblx0XHQpO1xuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdC8vIEZ1bmN0aW9uIHRvIG5hdmlnYXRlIGJhY2ssIG9yIGRpc3BsYXkgdGhlIGxhdW5jaHBhZCBpZiB3ZSdyZSBvbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgaGlzdG9yeVxuXHRcdGNvbnN0IG5hdkJhY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuVVJMO1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdXNlIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0LCB0aGF0IHdpbGwgZGlzcGxheSB0aGUgaG9tZSBwYWdlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCA1MDApO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGlzIG9iamVjdCBwYWdlIGRvZXNuJ3QgaGF2ZSBhIGJpbmRpbmcgY29udGV4dCwgYnV0IHN0aWxsIGhhbmRsZXMgdGhlIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiAtLT4gcGZvcm0gdGhlIG5hdiBiYWNrIGFuZCByZW1vdmUgdGhlIG5hdmJhY2sgaGFuZGxlciBhcyBpdCBtYWtlcyBubyBzZW5zZSBhbnkgbG9uZ2VyXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0LnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4obmF2QmFjaylcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGJhY2sgbmF2aWdhdGlvblwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGhpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHRcdD8uZW5hYmxlZDtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRuYXZCYWNrLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoaWRkZW5EcmFmdEVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKGlucHV0QmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXc/LmdldFZpZXdEYXRhKCk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0XHQob1RhYmxlUm93QmluZGluZyBhcyB1bmtub3duIGFzIHsgcmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXM6IEZ1bmN0aW9uIH0pLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgYW5kIHVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhY2NvcmRpbmdseVxuXHRcdFx0XHQvLyBXaWxsIHRvIGJlIGZpeGVkIHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlQVBJID8gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSA6IHt9O1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIFtdLCBcInRhYmxlXCIpO1xuXG5cdFx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdFx0b0ZpbmFsVUlTdGF0ZTogUHJvbWlzZTx1bmtub3duPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLmVkaXRGbG93LmNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZShiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBiaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwge30sIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0KG9PYmplY3RQYWdlIGFzIHVua25vd24gYXMgeyBfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50czogRnVuY3Rpb24gfSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblxuXHRcdFx0Ly9UbyBDb21wdXRlIHRoZSBFZGl0IEJpbmRpbmcgb2YgdGhlIHN1Yk9iamVjdCBwYWdlIHVzaW5nIHJvb3Qgb2JqZWN0IHBhZ2UsIGNyZWF0ZSBhIGNvbnRleHQgZm9yIGRyYWZ0IHJvb3QgYW5kIHVwZGF0ZSB0aGUgZWRpdCBidXR0b24gaW4gc3ViIE9QIHVzaW5nIHRoZSBjb250ZXh0XG5cdFx0XHRBY3Rpb25SdW50aW1lLnVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKTtcblx0XHQvLyBPbmx5IGNvbGxlY3QgY2FyZHMgd2hlbiBjb25zdW1lcnMgYXJlIGNvbm5lY3RlZCB0byB0aGUgY2FyZHMgY2hhbm5lbFxuXHRcdGlmIChjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UuaGFzQ29sbGFib3JhdGlvbk1hbmFnZXJDb25uZWN0ZWQoKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0aWYgKGNhcmRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlLmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBGQ0wgQ2xvc2UgYnV0dG9uIGxvc2VzIGl0cyBET00gbm9kZSBiZXR3ZWVuIG1vdXNlZG93biBhbmQgbW91c2V1cCB3aGVuIHRoZSBOYW1lXG5cdFx0Ly8gKEVkaXRhYmxlSGVhZGVyVGl0bGUpIGZpZWxkIGhhcyBmb2N1czogYmx1ciB0cmlnZ2VycyBzaWRlIGVmZmVjdHMg4oaSIE9EYXRhIHJlZnJlc2gg4oaSXG5cdFx0Ly8gT1BEVCByZS1yZW5kZXJzIG5hdkFjdGlvbnNUb29sYmFyLCBkZXRhY2hpbmcgdGhlIG5vZGUgYmVmb3JlIGNsaWNrIGZpcmVzLlxuXHRcdC8vIENhbGxpbmcgY2xvc2VDb2x1bW4oKSBvbiBtb3VzZWRvd24gY2FwdHVyZXMgdGhlIGludGVudCBiZWZvcmUgdGhlIHJlLXJlbmRlci5cblx0XHRpZiAoIXRoaXMuZmNsQ2xvc2VIYW5kbGVyU2V0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3QgZmNsQ2xvc2VCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZDTFN0YW5kYXJkQWN0aW9uOjpDbG9zZVwiKTtcblx0XHRcdGlmIChmY2xDbG9zZUJ1dHRvbj8uaXNBPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdFx0ZmNsQ2xvc2VCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0aW5nLmNsb3NlQ29sdW1uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5mY2xDbG9zZUhhbmRsZXJTZXQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGV4dHJhY3RQYXRocyA9IChiaW5kaW5nSW5mbz86IHsgcGFydHM/OiB7IHBhdGg/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH1bXSB9KTogc3RyaW5nW10gPT5cblx0XHRcdEFycmF5LmZyb20oXG5cdFx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdFx0KGJpbmRpbmdJbmZvPy5wYXJ0cyB8fCBbXSlcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0Lm1vZGVsKVxuXHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gcGFydC5wYXRoIHx8IFwiXCIpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y29uc3Qgc3VidGl0bGVQYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXNvbHZlID0gWy4uLnN1YnRpdGxlUGF0aHMsIC4uLmRlc2NyaXB0aW9uUGF0aHNdO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmIChvT2JqZWN0UGFnZVN1YnRpdGxlICYmICF0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJ1aWxkID0gKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9ID0+ICh7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGU/LmdldFZhbHVlKCkgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0VmFsdWUoKSB8fCBcIlwiXG5cdFx0fSk7XG5cdFx0Ly9pZiBubyBjb250ZXh0IG9yIG5vdGhpbmcgdG8gcmVzb2x2ZSwgZGlyZWN0IHJldHVyblxuXHRcdGlmICghb09iamVjdFBhZ2VDb250ZXh0IHx8IHBhdGhzVG9SZXNvbHZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZCgpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHNUb1Jlc29sdmUubWFwKGFzeW5jIChwKSA9PiAob09iamVjdFBhZ2VDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5yZXF1ZXN0T2JqZWN0KHApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkpKTtcblx0XHRyZXR1cm4gYnVpbGQoKTtcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpXG5cdFx0XHRcdC5nZXRBY3Rpb25zKClcblx0XHRcdFx0LmZpbmQoKG9FbGVtZW50KSA9PiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQpO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIE92ZXJmbG93VG9vbGJhcikuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0XHRvRWxlbWVudDogVUk1RWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBzdHJpbmcsIG9SZXQ/OiB1bmtub3duKTogdW5rbm93biB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKGlzRWRpdE1vZGUgJiYgIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBMaXN0QmluZGluZztcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0YXN5bmMgX2VkaXREb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdC5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgcG9pbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHNlbWFudGljIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0XG5cdCAqL1xuXHRfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmdcblx0KTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNlbWFudGljT2JqZWN0XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIG9uIGEgdHJhbnNpZW50IGNvbnRleHQ6XG5cdCAqIC0gaWYgdGhlIGNvbnRleHQgZ2V0cyBkYXRhLCB3YWl0IGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIGV4ZWN1dGUgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqIC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqIC0gb24gYSByZWd1bGFyIGNvbnRleHQsIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZXhlY3V0ZWRcblx0ICovXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCkgYXMgQ29udHJvbDtcblx0XHRjb25zdCBjb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghY29udHJvbCB8fCAhY29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2U7XG5cdFx0aWYgKGNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ5UGFzc1NpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2wpO1xuXHRcdGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMpO1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29udHJvbCB9KTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIHRoZSBnbG9iYWwgc2lkZSBlZmZlY3RzIGFyZSBleGVjdXRlZCBpZiB0aGVzZSBzaWRlIGVmZmVjdHMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnRleHRcblx0ICogLSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBvbiB0aGUgRHJhZnRSb290IGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0XG5cdCAqIEBwYXJhbSBieVBhc3NTaWRlRWZmZWN0cyBPbmx5IHRoZSBkcmFmdCBWYWxpZGF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Ly8gdGhlIGRyYWZ0IHZhbGlkYXRpb24gaXMgdHJlYXRlZCBhcyBhIHVzZXIgaW50ZXJhY3Rpb24sIGFuZCB0aGUgc2VydmljZSBtdXN0IHJldHVybiB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFnYWluIGlmIHN0aWxsIHZhbGlkXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAoIWJ5UGFzc1NpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IGdsb2JhbFNpZGVFZmZlY3RzID0gZW50aXR5VHlwZSA/IHNpZGVFZmZlY3RzU2VydmljZS5nZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGUpIDogW107XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2xvYmFsIFNpZGVFZmZlY3RzIGZvciB0aGUgcmVsYXRlZCBlbnRpdHksIGV4ZWN1dGUgaXQvdGhlbVxuXHRcdFx0aWYgKGdsb2JhbFNpZGVFZmZlY3RzLmxlbmd0aCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKHNpZGVFZmZlY3RzKSA9PiB0aGlzLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSAoYXdhaXQgQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRQcm9ncmFtbWluZ01vZGVsLkRyYWZ0LFxuXHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHQpKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL0V4ZWN1dGUgdGhlIGRyYWZ0VmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBubyBnbG9iYWxTaWRlRWZmZWN0cyAoaWdub3JlIEVUYWdzIGluIGNvbGxhYm9yYXRpb24gZHJhZnQpXG5cdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgdGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBJZiBkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIG9uIHRoZSBjcmVhdGlvbiByb3dzLCB0aGUgcmVsYXRlZCBkb2N1bWVudHMgYXJlIGNyZWF0ZWRcblx0ICogYmVmb3JlIHNhdmluZyB0aGUgZHJhZnQgdmVyc2lvbi5cblx0ICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IEluZGljYXRlcyBpZiB0aGUgYmluZGluZyB0byB0aGUgdmlldyBzaG91bGQgYmUgc2tpcHBlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfc2F2ZURvY3VtZW50KHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzOiBQcm9taXNlPHZvaWQgfCBPRGF0YUxpc3RCaW5kaW5nPltdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sobW9kZWwpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCB0cnVlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbGxhYm9yYXRpb24gZGlzY2FyZDogJHtlcnJ9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKHRhYmxlOiBUYWJsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHRhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaXNTa2lwQmluZGluZ1RvVmlldyA9IHNraXBCaW5kaW5nVG9WaWV3IGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQ7XG5cdFx0XHRjb25zdCBpc1N0YW5kYXJkU2F2ZSA9XG5cdFx0XHRcdGlzU2tpcEJpbmRpbmdUb1ZpZXcgJiYgdHlwZW9mIGlzU2tpcEJpbmRpbmdUb1ZpZXcgPT0gXCJvYmplY3RcIiAmJiBpc1NraXBCaW5kaW5nVG9WaWV3LmdldFNvdXJjZSgpLmdldENvbW1hbmQoKSA9PT0gXCJTYXZlXCI7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRcdGJpbmRpbmdzOiBiaW5kaW5ncyBhcyB1bmtub3duIGFzIE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRcdFx0XHRtZXJnZVBhdGNoRHJhZnQ6IHRoaXMubWVyZ2VQYXRjaERyYWZ0LFxuXHRcdFx0XHRcdHNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGlzU3RhbmRhcmRTYXZlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdGNvbnN0IGxhc3RGb2N1c2VkQ29udHJvbElkID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk/LmdldElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgaGF2ZSBkaXNwbGF5ZWQgdGhlIGRpYWxvZyBhbmQgdGhlIHVzZXIgY29uZmlybWVkIHRoZSBkaXNjYXJkIC0+IFdlIHNraXAgdGhlIGRpc2NhcmQgY29uZmlybWF0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBnZXQgY29sbGFib3JhdGl2ZSB1c2Vyc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaXNEb2N1bWVudE1vZGlmaWVkID1cblx0XHRcdCEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgQnJlYWRjcnVtYnMnIGxpbmtzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBocmVmIHdoZW4gdGhlIGNvbnRleHQgY2hhbmdlcy5cblx0ICogQHBhcmFtIHNvdXJjZSBCcmVhZGNydW1icyBjb250cm9sXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIEJyZWFkY3J1bWJzIGNvbnRlbnQgaXMgZmlsbGVkIHByb3Blcmx5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBzZXRCcmVhZGNydW1iTGlua3Moc291cmNlOiBCcmVhZENydW1icyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSBzb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRwcm9taXNlczogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPltdID0gW10sXG5cdFx0XHRuZXdQYXRoID0gY29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0cGF0aFBhcnRzID0gbmV3UGF0aD8uc3BsaXQoXCIvXCIpID8/IFtdLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50ICYmIGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgcGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdHBhdGhQYXJ0cy5zaGlmdCgpO1xuXHRcdFx0cGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0XHRwYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGF0aFBhcnQ6IHN0cmluZykge1xuXHRcdFx0XHRwYXRoICs9IGAvJHtwYXRoUGFydH1gO1xuXHRcdFx0XHRpZiAoIWFwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZUluZm9CeUhhc2gocGF0aCkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpO1xuXHRcdFx0XHRjb25zdCByZXN1bHRDb250ZXh0ID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0aWYgKHJlc3VsdENvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJvbWlzZXMucHVzaChyb290Vmlld0NvbnRyb2xsZXIuZ2V0VGl0bGVJbmZvRnJvbVBhdGgocGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCB0aXRsZUhpZXJhcmNoeUluZm9zOiBUaXRsZUluZm9ybWF0aW9uW10gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRsZXQgaGllcmFyY2h5UG9zaXRpb24sIGxpbms7XG5cdFx0XHRmb3IgKGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mbyBvZiB0aXRsZUhpZXJhcmNoeUluZm9zKSB7XG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uID0gdGl0bGVIaWVyYXJjaHlJbmZvcy5pbmRleE9mKHRpdGxlSGllcmFyY2h5SW5mbyk7XG5cdFx0XHRcdGxpbmsgPSBzb3VyY2UuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0gPyBzb3VyY2UuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRsaW5rLnNldFRleHQodGl0bGVIaWVyYXJjaHlJbmZvLnN1YnRpdGxlIHx8IHRpdGxlSGllcmFyY2h5SW5mby50aXRsZSk7XG5cdFx0XHRcdC8vV2UgYXBwbHkgYW4gYWRkaXRpb25hbCBlbmNvZGVVUkkgaW4gY2FzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGllIFwiL1wiKSB1c2VkIGluIHRoZSB1cmwgdGhyb3VnaCB0aGUgc2VtYW50aWMga2V5c1xuXHRcdFx0XHRsaW5rLnNldEhyZWYoZW5jb2RlVVJJKHRpdGxlSGllcmFyY2h5SW5mby5pbnRlbnQhKSk7XG5cdFx0XHRcdGlmICghc291cmNlLmdldExpbmtzKClbaGllcmFyY2h5UG9zaXRpb25dKSB7XG5cdFx0XHRcdFx0c291cmNlLmFkZExpbmsobGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgYnJlYWRjcnVtYiBsaW5rczpcIiArIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0b25UYWJsZUJpbmRpbmdVcGRhdGVkKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHRhc3luYyBvbkNhbGxBY3Rpb24oXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH1cblx0XHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXG5cdFx0XHQvLyBXYWl0IGZvciBWSCB2YWx1ZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGFjdGlvblxuXHRcdFx0YXdhaXQgb0NvbnRyb2xsZXIuZWRpdEZsb3cuc3luY1Rhc2soKTtcblxuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1NvdXJjZTogQ29udHJvbCxcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+LFxuXHRcdFx0c0NvbnRyb2xDb25maWc6IHN0cmluZyxcblx0XHRcdHNDb2xsZWN0aW9uUGF0aDogc3RyaW5nXG5cdFx0KTogdm9pZCB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSEsXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCksXG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBDaGVjayBpZiBpbXBsaWNpdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBuZWVkZWRcblx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21EYXRhID0gb1NvdXJjZS5nZXRDdXN0b21EYXRhKCkuZmluZCgoZGF0YSkgPT4gZGF0YS5nZXRLZXkoKSA9PT0gXCJWYWx1ZVByb3BlcnR5UGF0aFwiKTtcblx0XHRcdFx0aWYgKGN1c3RvbURhdGEpIHtcblx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0NvbnRyb2xsZXIuX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEuZ2V0VmFsdWUoKSxcblx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSkgJiZcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gZ2V0UmVzb3VyY2VNb2RlbChvQ29udHJvbGxlcikuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmVudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNsb3NlQ29sbGFib3JhdGlvblN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoXCIvc2hvd0NvbGxhYm9yYXRpb25TdHJpcFwiLCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldyk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSBpbnRlcm5hbE1vZGVsXG5cdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpITtcblx0XHRcdC8vIFJlbW92ZSBjb250ZXh0IGJvdW5kIG1lc3NhZ2VzIGFuZCBzZXQgdGhlIHByb3BlcnR5IHRvIGZhbHNlIGZvciB0aGUgYmFja2VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGluIGVkaXQgbW9kZS5cblx0XHRcdGlmICghYklzSW5FZGl0TW9kZSAmJiBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIk9QQmFja2VuZE1lc3NhZ2VWaXNpYmxlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRCb3VuZE1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdFx0XHQobWVzc2FnZTogTWVzc2FnZSkgPT5cblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjb250ZXh0Qm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoY29udGV4dEJvdW5kTWVzc2FnZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQmFja2VuZE1lc3NhZ2VWaXNpYmxlXCIsIGZhbHNlKTtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuaGlkZU1lc3NhZ2UoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJHQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBZ0I7RUFBQyxJQUc5Q0Usb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDTixjQUFjLENBQUNPLGVBQWUsQ0FBQ0gsUUFBUSxDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakVULGNBQWMsQ0FBQ1UsU0FBUyxDQUFDTixRQUFRLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdyRFosY0FBYyxDQUFDYSxjQUFjLENBQUNULFFBQVEsQ0FBQ1Usc0JBQXNCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRy9EZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ1osUUFBUSxDQUFDYSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixvQkFBb0IsQ0FBQ2YsUUFBUSxDQUFDZ0IsNEJBQTRCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNFckIsY0FBYyxDQUNkc0IsNkJBQTZCLENBQUNsQixRQUFRLENBQUM7SUFDdENtQixpQkFBaUIsRUFBRSxTQUFBQSxDQUFBLEVBQStDO01BQ2pFLE1BQU1DLGlCQUFpQixHQUNy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