@sapui5/sap.fe.macros 1.142.1 → 1.142.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  4. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  5. package/src/sap/fe/macros/controls/Section.js +3 -2
  6. package/src/sap/fe/macros/controls/Section.ts +1 -1
  7. package/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  8. package/src/sap/fe/macros/field/FieldTemplating.ts +1 -1
  9. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  10. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  11. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  12. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  13. package/src/sap/fe/macros/library.js +1 -1
  14. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +5 -1
  15. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +4 -0
  16. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -4
  17. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +4 -3
  18. package/src/sap/fe/macros/table/TableAPI.js +17 -4
  19. package/src/sap/fe/macros/table/TableAPI.ts +15 -0
  20. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +10 -1
  21. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +10 -0
  22. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  23. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  24. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  25. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  26. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  27. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  28. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +25 -9
  29. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -17
@@ -125,7 +125,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
125
125
  }
126
126
  this.updateCutCopyPasteEnablement(oModelObject, table);
127
127
  this.updateMoveUpDownEnablement(oModelObject, table);
128
- return ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, activeSelectedContexts, "table");
128
+ return ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, activeSelectedContexts, "table", false, true);
129
129
  },
130
130
  /**
131
131
  * Checks, if the selected context is updatable for Mass Edit.
@@ -417,7 +417,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
417
417
  selectedContexts,
418
418
  creationMode: tableAPI.tableDefinition.annotation.create.mode,
419
419
  data: creationData,
420
- tableId: mdcTable?.getId()
420
+ tableId: mdcTable?.getId(),
421
+ requestAtLeast: Object.keys(tableAPI.tableDefinition.requestAtLeast ?? {})
421
422
  };
422
423
  if (creationParameters.creationMode === CreationMode.CreationDialog) {
423
424
  creationParameters.creationDialogFields = nodeType.values[valueIndex].creationDialogFields;
@@ -449,7 +450,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
449
450
  return;
450
451
  }
451
452
  const creationParameters = {
452
- creationMode: tableAPI.tableDefinition.annotation.create.mode
453
+ creationMode: tableAPI.tableDefinition.annotation.create.mode,
454
+ requestAtLeast: Object.keys(tableAPI.tableDefinition.requestAtLeast ?? {})
453
455
  };
454
456
  switch (creationParameters.creationMode) {
455
457
  case CreationMode.External:
@@ -566,4 +568,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
566
568
  };
567
569
  return TableRuntime;
568
570
  }, false);
569
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dG1lbnUiLCJ0eXBlIiwidmlldyIsImdldFRhcmdldFZpZXciLCJpc1ZpZXdFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJnZXRDb250cm9sbGVyTmFtZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwicGFzdGFibGVDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImNvbnRleHQiLCJtYXAiLCJwYXN0YWJsZUNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiY29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8iLCJkYXRhTW9kZWxzcmMiLCJjdXRhYmxlQ29udGV4dHMiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RlRW5hYmxlbWVudCIsImNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50IiwiZXh0ZW5zaW9uUG9pbnQiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImlzQ29weVRvUG9zaXRpb25BbGxvd2VkIiwidGFyZ2V0Q29udGV4dCIsIm1vZGVsT2JqZWN0UGF0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJtb3ZlZENvbnRleHQiLCJtb3ZhYmxlRHJhZnQiLCJvdXRPZlBsYWNlQ29udGV4dCIsImlzVHJhbnNpZW50IiwiY3VzdG9tTW92YWJsZSIsImlzRGVsZXRlZCIsImdldFNpYmxpbmciLCJpbnRlcm5hbENvbnRleHQiLCJjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2siLCJub2RlVHlwZVBhcmFtZXRlcnMiLCJwb3NzaWJsZVZhbHVlcyIsInZhbHVlcyIsIm9wdGlvbiIsInZhbHVlIiwiZW5hYmxlbWVudEZ1bmN0aW9uIiwiZW5hYmxlZEZsYWdzIiwiX2Vycm9yIiwiZW5hYmxlbWVudE1hcCIsInNvbWUiLCJmbGFnIiwiZm9yRWFjaCIsImluZGV4IiwiY29udGV4dFBhdGgiLCJjbGVhclNlbGVjdGlvbiIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic0FjdGlvbiIsImJFbmFibGVkIiwib25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJvRXZlbnQiLCJ3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUZpZWxkIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwib1NvdXJjZUZpZWxkIiwiZmllbGQiLCJzRmllbGRJZCIsIm1GaWVsZFZhbGlkaXR5IiwibU5ld0ZpZWxkVmFsaWRpdHkiLCJzdGF0ZSIsIm1DdXN0b21WYWxpZGl0eSIsIm1OZXdDdXN0b21WYWxpZGl0eSIsImdldEJpbmRpbmciLCJmaWVsZElkIiwic1RhcmdldCIsImdldEJpbmRpbmdQYXRoIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInJlbW92ZU1lc3NhZ2VzIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsInJvd0JpbmRpbmciLCJnZXRDb250ZXh0IiwiZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50IiwiYWdncmVnYXRpb24iLCJmaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJleHBhbmRUbyIsInNlYXJjaCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJzZXRBZ2dyZWdhdGlvbiIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsInZhbHVlSW5kZXgiLCJtZGNUYWJsZSIsImdldE1kY1RhYmxlIiwiY3JlYXRpb25EYXRhIiwicHJvcGVydHlOYW1lIiwiY3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlIiwibW9kZSIsInRhYmxlSWQiLCJDcmVhdGlvbkRpYWxvZyIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwicmViaW5kIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlRG9jdW1lbnQiLCJjYXRjaCIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJFeHRlcm5hbCIsIm91dGJvdW5kIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsIk5ld1BhZ2UiLCJJbmxpbmUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJjcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJzS2V5IiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNQcm9wZXJ0eSIsImVuYWJsZWRQcm9wZXJ0eSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsIm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsInNldFRpbWVvdXQiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZVJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudFR5cGUgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2sgZHVyaW5nIHJ1bnRpbWVcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlUnVudGltZSA9IHtcblx0ZXhlY3V0ZUNvbmRpdGlvbmFsQWN0aW9uU2hvcnRjdXQ6IGZ1bmN0aW9uIChzQnV0dG9uTWF0Y2hlcjogc3RyaW5nLCBvU291cmNlOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Ly8gR2V0IHRoZSBidXR0b24gcmVsYXRlZCB0byBrZXlib2FyZCBzaG9ydGN1dFxuXHRcdGNvbnN0IG9NZGNUYWJsZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0aWYgKHNCdXR0b25NYXRjaGVyICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpIHtcblx0XHRcdGNvbnN0IG9CdXR0b24gPSBvTWRjVGFibGVcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhQWN0aW9uQnV0dG9uczogQ29udHJvbFtdLCBvQWN0aW9uVG9vbGJhckFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBhQWN0aW9uQnV0dG9ucy5jb25jYXQoKG9BY3Rpb25Ub29sYmFyQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pLmdldEFjdGlvbigpKTtcblx0XHRcdFx0fSwgW10gYXMgQ29udHJvbFtdKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0FjdGlvbkJ1dHRvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uQnV0dG9uLmdldElkKCkuZW5kc1dpdGgoc0J1dHRvbk1hdGNoZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gb01kY1RhYmxlLmdldEFnZ3JlZ2F0aW9uKFwiY3JlYXRpb25Sb3dcIikgYXMgQ3JlYXRpb25Sb3c7XG5cdFx0XHRpZiAob0NyZWF0aW9uUm93ICYmIG9DcmVhdGlvblJvdy5nZXRBcHBseUVuYWJsZWQoKSAmJiBvQ3JlYXRpb25Sb3cuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdG9DcmVhdGlvblJvdy5maXJlQXBwbHkoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHM6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh0YWJsZSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFRhYmxlUnVudGltZS5zZXRDb250ZXh0c0FzeW5jKHRhYmxlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHNBc3luYzogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZFtdIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgdW5kZWZpbmVkIHwgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRpdHkgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG1ldGFNb2RlbCkucmVzb2x2ZVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb25cblx0XHQpLnRhcmdldDtcblx0XHRjb25zdCBzVXBkYXRhYmxlUGF0aCA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdGNvbnN0IGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCA9IHRhYmxlLmRhdGEoXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiKT8uc3BsaXQoXCIsXCIpID8/IFtdO1xuXHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJ7fVwiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlLmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXG5cdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IGFEZWxldGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Y29uc3QgYlJlYWRPbmx5RHJhZnRFbmFibGVkID1cblx0XHRcdHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgISFjb2xsZWN0aW9uRW50aXR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0XHRjb25zdCBhVXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdC8vIG9EeW5hbWljQWN0aW9ucyBhcmUgYm91bmQgYWN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIHNvbWUgcHJvcGVydHlcblx0XHQvLyBpbiBlYWNoIGl0ZW1cblx0XHRjb25zdCBvRHluYW1pY0FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgYkVuYWJsZWQ/OiBib29sZWFuIH0+IHwgdW5kZWZpbmVkID0ge307XG5cdFx0Y29uc3Qgb0lCTiA9IHt9O1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBmb3IgdGhlIGRlbGV0ZSB3ZSBjb25zaWRlciB0aGUgaW5hY3RpdmUgY29udGV4dHMgYXMgcG90ZW50aWFsbHkgcGFydCBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvL2RvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciB0aGUgb3RoZXIgYWN0aW9uc1xuXHRcdGNvbnN0IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMgPSBhU2VsZWN0ZWRDb250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gIW9Db250ZXh0LmlzSW5hY3RpdmUoKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Nb2RlbE9iamVjdCA9IE9iamVjdC5hc3NpZ24ob0ludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9LCB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlOiBhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRkeW5hbWljQWN0aW9uczogb0R5bmFtaWNBY3Rpb25zLFxuXHRcdFx0aWJuOiBvSUJOLFxuXHRcdFx0ZGVsZXRlRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGRlbGV0YWJsZUNvbnRleHRzOiBhRGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR1blNhdmVkQ29udGV4dHM6IFtdLFxuXHRcdFx0bG9ja2VkQ29udGV4dHM6IFtdLFxuXHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogW10sXG5cdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGNvbnRyb2xJZDogXCJcIixcblx0XHRcdHVwZGF0YWJsZUNvbnRleHRzOiBhVXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRwYXN0ZUF1dGhvcml6ZWQ6IHRydWUsXG5cdFx0XHRwYXN0ZUZyb21Db3B5QXV0b3JpemVkOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ/IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIilcblx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9KTtcblx0XHRvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvID0gb01vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyB8fCB7fTtcblxuXHRcdGZvciAoY29uc3Qgb1NlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0NvbnRleHREYXRhKSB7XG5cdFx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPT09IDApIHtcblx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGg6IHN0cmluZyA9IGtleTtcblx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IHNBY3Rpb25QYXRoLnN1YnN0cmluZygxLCBzQWN0aW9uUGF0aC5sZW5ndGgpO1xuXHRcdFx0XHRcdG9Nb2RlbE9iamVjdC5keW5hbWljQWN0aW9uc1tzQWN0aW9uUGF0aF0gPSB7IGVuYWJsZWQ6IHRydWUgfTtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaXNVcGRhdGFibGVDb250ZXh0KHNVcGRhdGFibGVQYXRoLCBvU2VsZWN0ZWRDb250ZXh0LCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdGFVcGRhdGFibGVDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlQWN0aW9uKGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCwgb0R5bmFtaWNBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAob01vZGVsT2JqZWN0KSB7XG5cdFx0XHRvTW9kZWxPYmplY3RbXCJ1cGRhdGFibGVDb250ZXh0c1wiXSA9IGFVcGRhdGFibGVDb250ZXh0cztcblx0XHRcdG9Nb2RlbE9iamVjdFtcImNvbnRyb2xJZFwiXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHR9XG5cblx0XHQvLyBNYW5hZ2UgYSBwb3RlbnRpYWwgY2FsbGJhY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNyZWF0ZSBidXR0b24vbWVudSBmb3IgYSBUcmVlVGFibGVcblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPD0gMSAmJiB0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPyBhY3RpdmVTZWxlY3RlZENvbnRleHRzWzBdIDogbnVsbDtcblx0XHRcdHRoaXMuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdHBhcmVudENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChvTW9kZWxPYmplY3QsIHRhYmxlKTtcblx0XHR0aGlzLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHJldHVybiBBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MsIGlmIHRoZSBzZWxlY3RlZCBjb250ZXh0IGlzIHVwZGF0YWJsZSBmb3IgTWFzcyBFZGl0LlxuXHQgKiBAcGFyYW0gdXBkYXRhYmxlUHJvcGVydHlQYXRoIFRoZSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggZnJvbSB0aGUgdGFibGUgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IFRoZSBzZWxlY3RlZCBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWFkT25seURyYWZ0RW5hYmxlZCBJbmRpY2F0ZXMsIGlmIHRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWRcblx0ICogQHJldHVybnMgQm9vbGVhbiBJbmRpY2F0aW5nIGNvbnRleHQgaXMgdXBkYXRhYmxlXG5cdCAqL1xuXHRpc1VwZGF0YWJsZUNvbnRleHQ6IGZ1bmN0aW9uICh1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZywgc2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0LCByZWFkT25seURyYWZ0RW5hYmxlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdC8qIFRoZSB1cGRhdGFibGUgY29udGV4dHMgd2l0aCBtYXNzIGVkaXQgZGVwZW5kIG9uIHRoZSBmb2xsb3dpbmc6XG5cdFx0IFx0MS4gVXBkYXRlIGlzIGRlcGVuZGVudCBvbiBjdXJyZW50IGVudGl0eSBwcm9wZXJ0eSAodXBkYXRhYmxlUGF0aCkuXG5cdFx0IFx0Mi4gVGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZCAobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQgKG5vdCBkcmFmdCBjb250ZXh0cykuXG5cdFx0ICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknLCAnSGFzRHJhZnRFbnRpdHknICB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkLiAqL1xuXHRcdGNvbnN0IGNvbnRleHREYXRhID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUJ5UGF0aCA9IHVwZGF0YWJsZVByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAgfHwgISFzZWxlY3RlZENvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCBub3REcmFmdEluUmVhZE9ubHlNb2RlID0gIXJlYWRPbmx5RHJhZnRFbmFibGVkIHx8IChjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSAmJiAhY29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkpO1xuXHRcdGlmICh1cGRhdGFibGVCeVBhdGggJiYgbm90RHJhZnRJblJlYWRPbmx5TW9kZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBub2RlIGlzIG1vdmFibGUgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMgKGlmIGFueSkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXN0b20gbG9naWMgYWxsb3dzIHRoZSBub2RlIHRvIGJlIG1vdmVkIChvciBpZiB0aGVyZSdzIG5vIGN1c3RvbSBsb2dpYyksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc01vdmFibGU6IGZ1bmN0aW9uIChub2RlOiBDb250ZXh0LCB0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc05vZGVNb3ZhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlTW92YWJsZUZ1bmN0aW9uXG5cdFx0XHQ/IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwoY29udGV4dDogQ29udGV4dCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgbm9kZSBjYW4gYmUgY29waWVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljLCBpZiBhbnkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgY29waWVkIChvciBpZiBubyBjdXN0b20gbG9naWMgaXMgZGVmaW5lZCk7IGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGNoZWNrSWZOb2RlSXNDb3B5YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlQ29weWFibGU7XG5cdFx0Y29uc3Qgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlQ29weWFibGVGdW5jdGlvbi5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdHRhYmxlXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID09PSB1bmRlZmluZWQgfHwgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbihub2RlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLndhcm5pbmcoYEVycm9yIGluIGN1c3RvbSBmdW5jdGlvbiBmb3IgaXNOb2RlTW92YWJsZTogJHtlcnJvcn1gKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3V0IGFuZCBQYXN0ZSBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3QgSW50ZXJuYWwgY29udGV4dCBvYmplY3Qgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgVGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHR1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50OiBmdW5jdGlvbiAobW9kZWxPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCB0YWJsZTogVGFibGUsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRtb2RlbE9iamVjdC5jb250ZXh0bWVudSA9IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51ID8/IHsgc2VsZWN0ZWRDb250ZXh0czogW10gfTtcblxuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdC8vIFRoZSBsb2dpYyBiZWxvdyBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIFRyZWUgVGFibGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdGNvbnN0IGlzVmlld0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRpZiAodmlldy5nZXRDb250cm9sbGVyTmFtZSgpICE9PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiICYmICFpc1ZpZXdFZGl0YWJsZSkge1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcgaXMgbm90IGVkaXRhYmxlLCB3ZSBkaXNhYmxlIHRoZSBjdXQvY29weS9wYXN0ZSBmdW5jdGlvbmFsaXR5IGFuZCBjbGVhciB0aGUgbm9kZVVwZGF0ZXNJbmZvXG5cdFx0XHRtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gPSB7fTtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGNoZWNrRHJhZnRJbnN0YW5jZSA9ICF0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpO1xuXG5cdFx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQobW9kZWxPYmplY3QuY29udGV4dG1lbnUgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm5vZGVVcGRhdGVzSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRjb25zdCBub2RlVXBkYXRlc0luZm8gPSBtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFx0Ly9JZiB0aGUgcGFzdGFibGVDb250ZXh0IGJlY29tZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgbGlzdEJpbmRpbmcsIGZvciBleGFtcGxlLCB3aGVuIHRoZSB1c2VyIGNvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGUsIHdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSBjb3JyZWN0IGNvbnRleHQgYnkgY29tcGFyaW5nIHRoZWlyIHBhdGhzXG5cdFx0Y29uc3QgcGFzdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gdGFibGVcblx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdC5nZXRBbGxDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0LmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFx0KChub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyB8fCBbXSkgYXMgQ29udGV4dFtdKVxuXHRcdFx0XHRcdC5tYXAoKHBhc3RhYmxlQ29udGV4dCkgPT4gcGFzdGFibGVDb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0XHQuaW5jbHVkZXMoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHBhc3RhYmxlQ29udGV4dHMubGVuZ3RoICE9PSAoKG5vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIHx8IFtdKSBhcyBDb250ZXh0W10pLmxlbmd0aCkge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXCJcIiArIFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fUEFTVEFCTEVfQ09OVEVYVFNfTk9UX0FWQUlMQUJMRVwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvID0gKCghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSlcblx0XHRcdC5ub2RlVXBkYXRlc0luZm8gYXMge1xuXHRcdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0XHR9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbHNyYyA9ICghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHRjb25zdCBjdXRhYmxlQ29udGV4dHMgPSAoZGF0YU1vZGVsc3JjLnVwZGF0YWJsZUNvbnRleHRzIGFzIENvbnRleHRbXSkuZmlsdGVyKFxuXHRcdFx0KGNvbnRleHQpID0+XG5cdFx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShjb250ZXh0LCB0YWJsZSkgJiYgKCFjaGVja0RyYWZ0SW5zdGFuY2UgfHwgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29weWFibGVDb250ZXh0cyA9IChkYXRhTW9kZWxzcmMuc2VsZWN0ZWRDb250ZXh0cyBhcyBDb250ZXh0W10pLmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzQ29weWFibGUoY29udGV4dCwgdGFibGUpXG5cdFx0KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZGF0YU1vZGVsc3JjLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmN1dEVuYWJsZW1lbnQgPSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA9PT0gMSAmJiBjdXRhYmxlQ29udGV4dHMubGVuZ3RoID09PSAxO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmNvcHlFbmFibGVtZW50ID0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDEgJiYgY29weWFibGVDb250ZXh0cy5sZW5ndGggPT09IDE7XG5cblx0XHRpZiAobm9kZVVwZGF0ZXNJbmZvLmxhc3RBY3Rpb24pIHtcblx0XHRcdGlmIChwYXN0YWJsZUNvbnRleHRzPy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8ucGFzdGVFbmFibGVtZW50ID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudDogQ29udGV4dFtdO1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uUG9pbnQgPVxuXHRcdFx0XHRub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbiA9PT0gXCJDdXRcIlxuXHRcdFx0XHRcdD8gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcblx0XHRcdFx0XHQ6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkO1xuXG5cdFx0XHQvL3JlbW92ZSBjb250ZXh0cyBkZXBlbmRpbmcgb2YgdGhlIGN1c3RvbSBmdW5jdGlvblxuXHRcdFx0aWYgKGV4dGVuc2lvblBvaW50KSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdLmZpbHRlcihcblx0XHRcdFx0XHQodGFyZ2V0Q29udGV4dCkgPT5cblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0XHRleHRlbnNpb25Qb2ludC5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KSBhcyBGdW5jdGlvblxuXHRcdFx0XHRcdFx0KShwYXN0YWJsZUNvbnRleHRzWzBdLCB0YXJnZXRDb250ZXh0KSAvL25vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIGhhcyBiZWVuIHRoZSBsYXN0IHRpbWUgdGhlIHVzZXIgcHJlc3NlZCB0aGUgY3V0L2NvcHkgYnV0dG9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudCA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0XHRcdH1cblxuXHRcdFx0Ly90aGUgcGFzdGUgY2Fubm90IGJlIGRvbmUgaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgc2VsZWN0ZWRcblx0XHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLnBhc3RlRW5hYmxlbWVudCA9XG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoIDw9IDEgJiYgY29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQubGVuZ3RoID09PSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqICBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBtb3ZlIHVwL21vdmUgZG93biBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0dXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsT2JqZWN0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IG1vZGVsT2JqZWN0IDogKG1vZGVsT2JqZWN0LmNvbnRleHRtZW51IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gbW9kZWxPYmplY3RQYXRoLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cblx0XHRjb25zdCBjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQgPSB0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQ7XG5cdFx0Ly8gRGlzYWJsZSB0aGUgbW92ZSB1cC9tb3ZlIGRvd24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQgY29udGV4dHMsIGlmIHRoZSB0YWJsZSBpcyBub3QgYSBUcmVlVGFibGUsIG9yIGlmIHRoZSB0YWJsZSBpcyBzb3J0ZWRcblx0XHRpZiAoXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAhPT0gMSB8fFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiB8fFxuXHRcdFx0dGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJpc1NvcnRlZFwiKSA9PT0gdHJ1ZSB8fFxuXHRcdFx0KHNlbGVjdGVkQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoXCJAJHVpNS5ub2RlLmxldmVsXCIpID09PSAxICYmICFjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQpIC8vIERpc2FibGUgbW92ZSB1cC9kb3duIGZvciByb290c1xuXHRcdCkge1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlVXAgPSBmYWxzZTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZURvd24gPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gc2VsZWN0ZWRDb250ZXh0c1swXTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgY2FuIGJlIG1vdmVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljIChpZiBhbnkpIGFuZCBpZiBpdCBkb2Vzbid0IGhhdmUgYSBkcmFmdCBpbnN0YW5jZSBpZiB3ZSdyZSBpbiBhIExpc3RSZXBvcnQsXG5cdFx0XHQvLyBhbmQgaWYgaXQncyBub3Qgb3V0LW9mLXBsYWNlIChpLmUuIGl0IG11c3QgYmUgZGlzcGxheWVkIGF0IGl0cyAncmVhbCcgcG9zaXRpb24pXG5cdFx0XHRjb25zdCBtb3ZhYmxlRHJhZnQgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpIHx8IG1vdmVkQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb3V0T2ZQbGFjZUNvbnRleHQgPSBtb3ZlZENvbnRleHQuaXNUcmFuc2llbnQoKSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgY3VzdG9tTW92YWJsZSA9IFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShtb3ZlZENvbnRleHQsIHRhYmxlKTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZVVwID1cblx0XHRcdFx0bW92YWJsZURyYWZ0ICYmIGN1c3RvbU1vdmFibGUgJiYgIW91dE9mUGxhY2VDb250ZXh0ICYmICFtb3ZlZENvbnRleHQuaXNEZWxldGVkKCkgJiYgbW92ZWRDb250ZXh0LmdldFNpYmxpbmcoLTEpICE9PSBudWxsO1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9XG5cdFx0XHRcdG1vdmFibGVEcmFmdCAmJiBjdXN0b21Nb3ZhYmxlICYmICFvdXRPZlBsYWNlQ29udGV4dCAmJiAhbW92ZWRDb250ZXh0LmlzRGVsZXRlZCgpICYmIG1vdmVkQ29udGV4dC5nZXRTaWJsaW5nKDEpICE9PSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3JlYXRlIGJ1dHRvbiAvIG1lbnUgLyBtZW51IGl0ZW1zLlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxDb250ZXh0XG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2tcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tb2R1bGVOYW1lXG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subWV0aG9kTmFtZVxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdF91cGRhdGVDcmVhdGVFbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2s6IHsgbW9kdWxlTmFtZTogc3RyaW5nOyBtZXRob2ROYW1lOiBzdHJpbmcgfSxcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwsXG5cdFx0bm9kZVR5cGVQYXJhbWV0ZXJzPzogeyBwcm9wZXJ0eU5hbWU6IHN0cmluZzsgdmFsdWVzOiB7IHZhbHVlOiBzdHJpbmcgfVtdIH0sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgcG9zc2libGVWYWx1ZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cdFx0aWYgKG5vZGVUeXBlUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBQdXNoIGFsbCBwb3NzaWJsZSB2YWx1ZXMgaW4gdGhlIG1lbnVcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlcy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gbWVudSAtLT4gT25seSAndW5kZWZpbmVkJyB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSAnQ3JlYXRlJyBidXR0b25cblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW3VuZGVmaW5lZF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW5hYmxlbWVudEZ1bmN0aW9uID0gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subW9kdWxlTmFtZSxcblx0XHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tZXRob2ROYW1lLFxuXHRcdFx0dGFibGVcblx0XHQpO1xuXG5cdFx0aWYgKCFlbmFibGVtZW50RnVuY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZW5hYmxlZEZsYWdzID0gcG9zc2libGVWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0bGV0IGVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVuYWJsZWQgPSAhIShlbmFibGVtZW50RnVuY3Rpb24odmFsdWUsIHBhcmVudENvbnRleHQpID8/IHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRcdGVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZWQ7XG5cdFx0fSk7XG5cdFx0Ly8gZW5hYmxlRmxhZ3NbaV0gaXMgdHJ1ZSA8PT4gcG9zc2libGVWYWx1ZXNbaV0gaXMgYWxsb3dlZCBmb3IgY3JlYXRpb25cblxuXHRcdGNvbnN0IGVuYWJsZW1lbnRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0ZW5hYmxlbWVudE1hcFtcIkNyZWF0ZVwiXSA9IGVuYWJsZWRGbGFncy5zb21lKChmbGFnKSA9PiBmbGFnKTsgLy8gRW5hYmxlIHRoZSBNZW51IChvciB0aGUgYnV0dG9uKSBpZiBhdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHBvc3NpYmxlXG5cdFx0ZW5hYmxlZEZsYWdzLmZvckVhY2goKGVuYWJsZWQsIGluZGV4KSA9PiB7XG5cdFx0XHRlbmFibGVtZW50TWFwW2BDcmVhdGVfJHtpbmRleH1gXSA9IGVuYWJsZWQ7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9cIiA6IFwiXCI7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGNvbnRleHRQYXRoICsgXCJjcmVhdGVFbmFibGVtZW50XCIsIGVuYWJsZW1lbnRNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHRhYmxlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZXMvZGlzYWJsZXMgdGhlICdDcmVhdGUnIGJ1dHRvbi9tZW51IGlmIG5lY2Vzc2FyeS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKi9cblx0Y2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250cm9sXG5cdFx0dGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLXJlbGF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIGludGVybmFsIG1vZGVsXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIsIGZhbHNlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIDApO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZS9kaXNhYmxlIHRoZSAnQ3JlYXRlJyBidXR0b24vbWVudSBpZiBuZWNlc3Nhcnlcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHR0aGlzLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHRkaXNhYmxlQWN0aW9uOiBmdW5jdGlvbiAoYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkOiBzdHJpbmdbXSwgb0R5bmFtaWNBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IGJFbmFibGVkPzogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZC5mb3JFYWNoKGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdG9EeW5hbWljQWN0aW9uc1tzQWN0aW9uXSA9IHsgYkVuYWJsZWQ6IGZhbHNlIH07XG5cdFx0fSk7XG5cdH0sXG5cdG9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93OiBmdW5jdGlvbiAob0V2ZW50OiBFdmVudFR5cGU8dHlwZW9mIEZpZWxkLnByb3RvdHlwZS5jaGFuZ2U+LCB3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Ly8gQ1JFQVRJT04gUk9XIENBU0Vcblx0XHRjb25zdCBtRmllbGQgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCksXG5cdFx0XHRvU291cmNlRmllbGQgPSBtRmllbGQuZmllbGQsXG5cdFx0XHRzRmllbGRJZCA9IG9Tb3VyY2VGaWVsZC5nZXRJZCgpO1xuXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRtRmllbGRWYWxpZGl0eSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiKSxcblx0XHRcdG1OZXdGaWVsZFZhbGlkaXR5ID0gT2JqZWN0LmFzc2lnbih7fSwgbUZpZWxkVmFsaWRpdHkpO1xuXG5cdFx0bU5ld0ZpZWxkVmFsaWRpdHlbc0ZpZWxkSWRdID0gbUZpZWxkLnN0YXRlO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCBtTmV3RmllbGRWYWxpZGl0eSk7XG5cblx0XHQvLyBwcmVwYXJlIEN1c3RvbSBWYWxpZGF0aW9uXG5cdFx0aWYgKHdpdGhDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24pIHtcblx0XHRcdGNvbnN0IG1DdXN0b21WYWxpZGl0eSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiksXG5cdFx0XHRcdG1OZXdDdXN0b21WYWxpZGl0eSA9IE9iamVjdC5hc3NpZ24oe30sIG1DdXN0b21WYWxpZGl0eSk7XG5cdFx0XHRtTmV3Q3VzdG9tVmFsaWRpdHlbb1NvdXJjZUZpZWxkLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKSEuZ2V0UGF0aCgpXSA9IHtcblx0XHRcdFx0ZmllbGRJZDogb1NvdXJjZUZpZWxkLmdldElkKClcblx0XHRcdH07XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIG1OZXdDdXN0b21WYWxpZGl0eSk7XG5cdFx0XHQvLyBSZW1vdmUgZXhpc3RpbmcgQ3VzdG9tVmFsaWRhdGlvbiBtZXNzYWdlXG5cdFx0XHRjb25zdCBzVGFyZ2V0ID0gYCR7b1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtvU291cmNlRmllbGQuZ2V0QmluZGluZ1BhdGgoXCJ2YWx1ZVwiKX1gO1xuXHRcdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gc1RhcmdldCkge1xuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0b25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZDogZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCwgaW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gV2hlbiB0aGUgY29udGV4dCBvZiBhIFRyZWVUYWJsZSBjaGFuZ2VzLCB3ZSB3YW50IHRvIHJlc3RvcmUgaXRzIGV4cGFuc2lvbiBzdGF0ZSB0byB0aGUgZGVmYXVsdDpcblx0XHQvLyAgIC0gYWxsIGV4cGFuZGVkIGlmIHRoZXJlJ3MgYSBzZWFyY2ggcGFyYW1ldGVyIGNvbWluZyBmcm9tIHRoZSBmaWx0ZXJCYXJcblx0XHQvLyAgIC0gb3RoZXJ3aXNlIGluaXRpYWwgZXhwYW5zaW9uIHN0YXRlIGNvbWluZyBmcm9tIHRoZSBQViAoc3RvcmVkIGluIHRoZSBwYXlsb2FkKVxuXHRcdC8vICAgLSBvdGhlcndpc2Ugbm8gZXhwYW5zaW9uIGF0IGFsbFxuXG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdGFibGUgPSBzb3VyY2UgYXMgVGFibGU7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGlmICghcm93QmluZGluZz8uZ2V0Q29udGV4dCgpIHx8IHRhYmxlQVBJLmdldElnbm9yZUNvbnRleHRDaGFuZ2VFdmVudCgpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgaXMgbm90IGJvdW5kLCBvciB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHN3aXRjaGluZyBiZXR3ZWVuIG5vcm1hbCBhbmQgZnVsbHNjcmVlbiwgc28gd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGV4cGFuc2lvbiBzdGF0ZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uOiB7XG5cdFx0XHRhZ2dyZWdhdGU/OiBvYmplY3Q7XG5cdFx0XHRleHBhbmRUbz86IG51bWJlcjtcblx0XHRcdGdyYW5kVG90YWxBdEJvdHRvbU9ubHk/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXA/OiBvYmplY3Q7XG5cdFx0XHRncm91cExldmVscz86IHN0cmluZ1tdO1xuXHRcdFx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRcdFx0c2VhcmNoPzogc3RyaW5nO1xuXHRcdFx0c3VidG90YWxzQXRCb3R0b21Pbmx5PzogYm9vbGVhbjtcblx0XHR9ID0gcm93QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpID8/IHt9O1xuXHRcdGNvbnN0IGZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gZmlsdGVySW5mby5zZWFyY2ggPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGluaXRpYWxFeHBhbnNpb25MZXZlbDtcblx0XHRyb3dCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYW4gaXRlbSBpbiBhICdDcmVhdGUnIG1lbnUgaXMgY2xpY2tlZC4gSXQgY3JlYXRlcyBhIGRvY3VtZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaW5pdGlhbCBkYXRhLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHBhcmFtIHZhbHVlSW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBtZW51XG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzIFRoZSBzZWxlY3RlZCBjb250ZXh0cyBpbiB0aGUgdGFibGUgZm9yIHRoaXMgJ0NyZWF0ZScgbWVudVxuXHQgKi9cblx0b25DcmVhdGVNZW51SXRlbVByZXNzOiBhc3luYyBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4sIHZhbHVlSW5kZXg6IG51bWJlciwgc2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU29tZSBjaGVja3MgdG8gYmUgb24gdGhlIHNhZmUgc2lkZVxuXHRcdGlmICghdGFibGVBUEkgfHwgIW1kY1RhYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG5vZGVUeXBlID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGU7XG5cdFx0aWYgKCFub2RlVHlwZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlQVBJKTtcblx0XHRjb25zdCBjcmVhdGlvbkRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRjcmVhdGlvbkRhdGFbbm9kZVR5cGUucHJvcGVydHlOYW1lXSA9IG5vZGVUeXBlLnZhbHVlc1t2YWx1ZUluZGV4XS52YWx1ZTtcblxuXHRcdGNvbnN0IGNyZWF0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Y3JlYXRpb25Nb2RlOiBzdHJpbmc7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG5cdFx0XHRkYXRhPzogb2JqZWN0O1xuXHRcdH0gPSB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUubW9kZSxcblx0XHRcdGRhdGE6IGNyZWF0aW9uRGF0YSxcblx0XHRcdHRhYmxlSWQ6IG1kY1RhYmxlPy5nZXRJZCgpXG5cdFx0fTtcblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IG5vZGVUeXBlLnZhbHVlc1t2YWx1ZUluZGV4XS5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdGlmICghY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzIHx8IGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gVXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIG5vIGNyZWF0aW9uIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGZvciB0aGlzIG1lbnUgaXRlbVxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdH1cblx0XHRcdGlmICghbWRjVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRcdC8vIEluIGNyZWF0aW9uIGRpYWxvZyBtb2RlLCB3ZSBmb3JjZSB0aGUgdGFibGUgZGF0YSB0byBiZSBsb2FkZWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBkb2N1bWVudFxuXHRcdFx0XHQvLyAodG8gb3ZlcmNvbWUgdGhlIGNhc2UgaW4gYSBMaXN0UmVwb3J0IHdoZXJlIG5vIGRhdGEgaXMgbG9hZGVkIHlldClcblx0XHRcdFx0YXdhaXQgbWRjVGFibGUucmViaW5kKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudCh0YWJsZUFQSS5nZXRSb3dCaW5kaW5nKCksIGNyZWF0aW9uUGFyYW1ldGVycylcblx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBkb2N1bWVudDogJHtlcnJvcn1gKTtcblx0XHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgJ0NyZWF0ZScgYnV0dG9uIGlzIHByZXNzZWQsIG9yIHRoZSAnQ3JlYXRlJyBjb21tYW5kIGludm9rZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyBUaGUgc2VsZWN0ZWQgY29udGV4dHMgaW4gdGhlIHRhYmxlIGZvciB0aGlzICdDcmVhdGUnIGJ1dHRvblxuXHQgKi9cblx0b25DcmVhdGVCdXR0b25QcmVzczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCwgc2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNvbWUgY2hlY2tzIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGVcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZGNUYWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNyZWF0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRcdFx0Y3JlYXRpb25Nb2RlOiBzdHJpbmc7XG5cdFx0XHRvdXRib3VuZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uUm93PzogQ3JlYXRpb25Sb3c7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG5cdFx0fSA9IHsgY3JlYXRpb25Nb2RlOiB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUubW9kZSB9O1xuXG5cdFx0c3dpdGNoIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlKSB7XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5FeHRlcm5hbDpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLm91dGJvdW5kID0gKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZSBhcyBDcmVhdGVCZWhhdmlvckV4dGVybmFsKS5vdXRib3VuZDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93OlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlQXRFbmQgPz8gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5OZXdQYWdlOlxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuSW5saW5lOlxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2c6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGVBdEVuZCA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUF0RW5kID8/IGZhbHNlO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMudGFibGVJZCA9IG1kY1RhYmxlPy5nZXRJZCgpO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuc2VsZWN0ZWRDb250ZXh0cyA9IHNlbGVjdGVkQ29udGV4dHM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3M6XG5cdFx0XHRcdC8vIE5vdGhpbmdcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIE90aGVyIG1vZGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdGlmICghbWRjVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRcdC8vIEluIGNyZWF0aW9uIGRpYWxvZyBtb2RlLCB3ZSBmb3JjZSB0aGUgdGFibGUgZGF0YSB0byBiZSBsb2FkZWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBkb2N1bWVudFxuXHRcdFx0XHQvLyAodG8gb3ZlcmNvbWUgdGhlIGNhc2UgaW4gYSBMaXN0UmVwb3J0IHdoZXJlIG5vIGRhdGEgaXMgbG9hZGVkIHlldClcblx0XHRcdFx0YXdhaXQgbWRjVGFibGUucmViaW5kKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGVBUEkpO1xuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyhtZGNUYWJsZSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZW1wdHkgcm93OiAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KHRhYmxlQVBJLCBjcmVhdGlvblBhcmFtZXRlcnMpXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGRvY3VtZW50OiAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtYW5hZ2UgdGhlIEludGVudEJhc2VkIE5hdmlnYXRpb24gZW5hYmxlbWVudC5cblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0c2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmdbXSxcblx0XHRzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaWJuLyR7c0tleX1gLCB7XG5cdFx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaWJuLyR7c0tleX1gLCB7XG5cdFx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0XHRiRW5hYmxlZDogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9iRW5hYmxlZGApLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2FBcHBsaWNhYmxlYCksXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYU5vdEFwcGxpY2FibGVgKSxcblx0XHRcdFx0XHRiRW5hYmxlZEZvckNvbnRleHRNZW51OiBmYWxzZSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlID0gW107XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwW3NLZXldO1xuXHRcdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2Ygc2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZW5hYmxlZFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJiRW5hYmxlZFwiIDogXCJiRW5hYmxlZEZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7ZW5hYmxlZFByb3BlcnR5fWAsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHthcHBsaWNhYmxlUHJvcGVydHl9YCwgYUFwcGxpY2FibGUpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9YCwgYU5vdEFwcGxpY2FibGUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYSBjb250ZXh0IG1lbnUgaXRlbSBpcyBwcmVzc2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdG9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTZXQgdGhlIGZsYWcgb24gdGhlIHRhYmxlQVBJIHNvIHRoYXQgZ2V0U2VsZWN0ZWRDb250ZXh0cyByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlXG5cdFx0dGFibGVBUEk/LnNldENvbnRleHRNZW51QWN0aXZlKHRydWUpO1xuXG5cdFx0Ly8gQWZ0ZXIgYSBzaG9ydCBkZWxheSAob25jZSB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkKSwgd2UgbmVlZCB0byByZXNldCB0aGUgZmxhZyBvbiB0aGUgdGFibGVcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRhYmxlQVBJPy5zZXRDb250ZXh0TWVudUFjdGl2ZShmYWxzZSk7XG5cdFx0fSwgMCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIE1EQyBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIHRvIGRpc3BsYXkgbWVzc2FnZVN0cmlwIG9uIGEgdGFibGUuXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBtZXNzYWdlU3RyaXAgdmlzaWJsZVxuXHQgKi9cblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSwgY29udHJvbDogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRyZXR1cm4gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKG1lc3NhZ2UsIGNvbnRyb2wpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUE2QkEsTUFBTUEsWUFBWSxHQUFHQyxTQUFTLENBQUNELFlBQVk7RUFDM0M7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNRSxZQUFZLEdBQUc7SUFDcEJDLGdDQUFnQyxFQUFFLFNBQUFBLENBQVVDLGNBQXNCLEVBQUVDLE9BQWdCLEVBQVE7TUFDM0Y7TUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0UsU0FBUyxDQUFDLENBQWE7TUFDakQsSUFBSUgsY0FBYyxLQUFLSixZQUFZLENBQUNRLFdBQVcsRUFBRTtRQUNoRCxNQUFNQyxPQUFPLEdBQUdILFNBQVMsQ0FDdkJJLFVBQVUsQ0FBQyxDQUFDLENBQ1pDLE1BQU0sQ0FBQyxVQUFVQyxjQUF5QixFQUFFQyxvQkFBNkIsRUFBRTtVQUMzRSxPQUFPRCxjQUFjLENBQUNFLE1BQU0sQ0FBRUQsb0JBQW9CLENBQXlCRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsRUFBRSxFQUFlLENBQUMsQ0FDbEJDLElBQUksQ0FBQyxVQUFVQyxhQUFzQixFQUFFO1VBQ3ZDLE9BQU9BLGFBQWEsQ0FB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
571
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dG1lbnUiLCJ0eXBlIiwidmlldyIsImdldFRhcmdldFZpZXciLCJpc1ZpZXdFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJnZXRDb250cm9sbGVyTmFtZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwicGFzdGFibGVDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImNvbnRleHQiLCJtYXAiLCJwYXN0YWJsZUNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiY29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8iLCJkYXRhTW9kZWxzcmMiLCJjdXRhYmxlQ29udGV4dHMiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RlRW5hYmxlbWVudCIsImNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50IiwiZXh0ZW5zaW9uUG9pbnQiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImlzQ29weVRvUG9zaXRpb25BbGxvd2VkIiwidGFyZ2V0Q29udGV4dCIsIm1vZGVsT2JqZWN0UGF0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJtb3ZlZENvbnRleHQiLCJtb3ZhYmxlRHJhZnQiLCJvdXRPZlBsYWNlQ29udGV4dCIsImlzVHJhbnNpZW50IiwiY3VzdG9tTW92YWJsZSIsImlzRGVsZXRlZCIsImdldFNpYmxpbmciLCJpbnRlcm5hbENvbnRleHQiLCJjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2siLCJub2RlVHlwZVBhcmFtZXRlcnMiLCJwb3NzaWJsZVZhbHVlcyIsInZhbHVlcyIsIm9wdGlvbiIsInZhbHVlIiwiZW5hYmxlbWVudEZ1bmN0aW9uIiwiZW5hYmxlZEZsYWdzIiwiX2Vycm9yIiwiZW5hYmxlbWVudE1hcCIsInNvbWUiLCJmbGFnIiwiZm9yRWFjaCIsImluZGV4IiwiY29udGV4dFBhdGgiLCJjbGVhclNlbGVjdGlvbiIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic0FjdGlvbiIsImJFbmFibGVkIiwib25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJvRXZlbnQiLCJ3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUZpZWxkIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwib1NvdXJjZUZpZWxkIiwiZmllbGQiLCJzRmllbGRJZCIsIm1GaWVsZFZhbGlkaXR5IiwibU5ld0ZpZWxkVmFsaWRpdHkiLCJzdGF0ZSIsIm1DdXN0b21WYWxpZGl0eSIsIm1OZXdDdXN0b21WYWxpZGl0eSIsImdldEJpbmRpbmciLCJmaWVsZElkIiwic1RhcmdldCIsImdldEJpbmRpbmdQYXRoIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInJlbW92ZU1lc3NhZ2VzIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsInJvd0JpbmRpbmciLCJnZXRDb250ZXh0IiwiZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50IiwiYWdncmVnYXRpb24iLCJmaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJleHBhbmRUbyIsInNlYXJjaCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJzZXRBZ2dyZWdhdGlvbiIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsInZhbHVlSW5kZXgiLCJtZGNUYWJsZSIsImdldE1kY1RhYmxlIiwiY3JlYXRpb25EYXRhIiwicHJvcGVydHlOYW1lIiwiY3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlIiwibW9kZSIsInRhYmxlSWQiLCJyZXF1ZXN0QXRMZWFzdCIsImtleXMiLCJDcmVhdGlvbkRpYWxvZyIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwicmViaW5kIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlRG9jdW1lbnQiLCJjYXRjaCIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJFeHRlcm5hbCIsIm91dGJvdW5kIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsIk5ld1BhZ2UiLCJJbmxpbmUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJjcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJzS2V5IiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNQcm9wZXJ0eSIsImVuYWJsZWRQcm9wZXJ0eSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsIm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsInNldFRpbWVvdXQiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZVJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudFR5cGUgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2sgZHVyaW5nIHJ1bnRpbWVcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlUnVudGltZSA9IHtcblx0ZXhlY3V0ZUNvbmRpdGlvbmFsQWN0aW9uU2hvcnRjdXQ6IGZ1bmN0aW9uIChzQnV0dG9uTWF0Y2hlcjogc3RyaW5nLCBvU291cmNlOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Ly8gR2V0IHRoZSBidXR0b24gcmVsYXRlZCB0byBrZXlib2FyZCBzaG9ydGN1dFxuXHRcdGNvbnN0IG9NZGNUYWJsZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0aWYgKHNCdXR0b25NYXRjaGVyICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpIHtcblx0XHRcdGNvbnN0IG9CdXR0b24gPSBvTWRjVGFibGVcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhQWN0aW9uQnV0dG9uczogQ29udHJvbFtdLCBvQWN0aW9uVG9vbGJhckFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBhQWN0aW9uQnV0dG9ucy5jb25jYXQoKG9BY3Rpb25Ub29sYmFyQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pLmdldEFjdGlvbigpKTtcblx0XHRcdFx0fSwgW10gYXMgQ29udHJvbFtdKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0FjdGlvbkJ1dHRvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uQnV0dG9uLmdldElkKCkuZW5kc1dpdGgoc0J1dHRvbk1hdGNoZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gb01kY1RhYmxlLmdldEFnZ3JlZ2F0aW9uKFwiY3JlYXRpb25Sb3dcIikgYXMgQ3JlYXRpb25Sb3c7XG5cdFx0XHRpZiAob0NyZWF0aW9uUm93ICYmIG9DcmVhdGlvblJvdy5nZXRBcHBseUVuYWJsZWQoKSAmJiBvQ3JlYXRpb25Sb3cuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdG9DcmVhdGlvblJvdy5maXJlQXBwbHkoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHM6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh0YWJsZSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFRhYmxlUnVudGltZS5zZXRDb250ZXh0c0FzeW5jKHRhYmxlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHNBc3luYzogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZFtdIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgdW5kZWZpbmVkIHwgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRpdHkgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG1ldGFNb2RlbCkucmVzb2x2ZVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb25cblx0XHQpLnRhcmdldDtcblx0XHRjb25zdCBzVXBkYXRhYmxlUGF0aCA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdGNvbnN0IGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCA9IHRhYmxlLmRhdGEoXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiKT8uc3BsaXQoXCIsXCIpID8/IFtdO1xuXHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJ7fVwiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlLmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXG5cdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IGFEZWxldGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Y29uc3QgYlJlYWRPbmx5RHJhZnRFbmFibGVkID1cblx0XHRcdHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgISFjb2xsZWN0aW9uRW50aXR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0XHRjb25zdCBhVXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdC8vIG9EeW5hbWljQWN0aW9ucyBhcmUgYm91bmQgYWN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIHNvbWUgcHJvcGVydHlcblx0XHQvLyBpbiBlYWNoIGl0ZW1cblx0XHRjb25zdCBvRHluYW1pY0FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgYkVuYWJsZWQ/OiBib29sZWFuIH0+IHwgdW5kZWZpbmVkID0ge307XG5cdFx0Y29uc3Qgb0lCTiA9IHt9O1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBmb3IgdGhlIGRlbGV0ZSB3ZSBjb25zaWRlciB0aGUgaW5hY3RpdmUgY29udGV4dHMgYXMgcG90ZW50aWFsbHkgcGFydCBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvL2RvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciB0aGUgb3RoZXIgYWN0aW9uc1xuXHRcdGNvbnN0IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMgPSBhU2VsZWN0ZWRDb250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gIW9Db250ZXh0LmlzSW5hY3RpdmUoKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Nb2RlbE9iamVjdCA9IE9iamVjdC5hc3NpZ24ob0ludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9LCB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlOiBhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRkeW5hbWljQWN0aW9uczogb0R5bmFtaWNBY3Rpb25zLFxuXHRcdFx0aWJuOiBvSUJOLFxuXHRcdFx0ZGVsZXRlRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGRlbGV0YWJsZUNvbnRleHRzOiBhRGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR1blNhdmVkQ29udGV4dHM6IFtdLFxuXHRcdFx0bG9ja2VkQ29udGV4dHM6IFtdLFxuXHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogW10sXG5cdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGNvbnRyb2xJZDogXCJcIixcblx0XHRcdHVwZGF0YWJsZUNvbnRleHRzOiBhVXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRwYXN0ZUF1dGhvcml6ZWQ6IHRydWUsXG5cdFx0XHRwYXN0ZUZyb21Db3B5QXV0b3JpemVkOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ/IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIilcblx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9KTtcblx0XHRvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvID0gb01vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyB8fCB7fTtcblxuXHRcdGZvciAoY29uc3Qgb1NlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0NvbnRleHREYXRhKSB7XG5cdFx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPT09IDApIHtcblx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGg6IHN0cmluZyA9IGtleTtcblx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IHNBY3Rpb25QYXRoLnN1YnN0cmluZygxLCBzQWN0aW9uUGF0aC5sZW5ndGgpO1xuXHRcdFx0XHRcdG9Nb2RlbE9iamVjdC5keW5hbWljQWN0aW9uc1tzQWN0aW9uUGF0aF0gPSB7IGVuYWJsZWQ6IHRydWUgfTtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaXNVcGRhdGFibGVDb250ZXh0KHNVcGRhdGFibGVQYXRoLCBvU2VsZWN0ZWRDb250ZXh0LCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdGFVcGRhdGFibGVDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlQWN0aW9uKGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCwgb0R5bmFtaWNBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAob01vZGVsT2JqZWN0KSB7XG5cdFx0XHRvTW9kZWxPYmplY3RbXCJ1cGRhdGFibGVDb250ZXh0c1wiXSA9IGFVcGRhdGFibGVDb250ZXh0cztcblx0XHRcdG9Nb2RlbE9iamVjdFtcImNvbnRyb2xJZFwiXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHR9XG5cblx0XHQvLyBNYW5hZ2UgYSBwb3RlbnRpYWwgY2FsbGJhY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNyZWF0ZSBidXR0b24vbWVudSBmb3IgYSBUcmVlVGFibGVcblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPD0gMSAmJiB0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPyBhY3RpdmVTZWxlY3RlZENvbnRleHRzWzBdIDogbnVsbDtcblx0XHRcdHRoaXMuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdHBhcmVudENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChvTW9kZWxPYmplY3QsIHRhYmxlKTtcblx0XHR0aGlzLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHJldHVybiBBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0YWN0aXZlU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFwidGFibGVcIixcblx0XHRcdGZhbHNlLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcywgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgdXBkYXRhYmxlIGZvciBNYXNzIEVkaXQuXG5cdCAqIEBwYXJhbSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggVGhlIHVwZGF0YWJsZVByb3BlcnR5UGF0aCBmcm9tIHRoZSB0YWJsZSBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHQgVGhlIHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHBhcmFtIHJlYWRPbmx5RHJhZnRFbmFibGVkIEluZGljYXRlcywgaWYgdGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIEluZGljYXRpbmcgY29udGV4dCBpcyB1cGRhdGFibGVcblx0ICovXG5cdGlzVXBkYXRhYmxlQ29udGV4dDogZnVuY3Rpb24gKHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nLCBzZWxlY3RlZENvbnRleHQ6IENvbnRleHQsIHJlYWRPbmx5RHJhZnRFbmFibGVkOiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0LyogVGhlIHVwZGF0YWJsZSBjb250ZXh0cyB3aXRoIG1hc3MgZWRpdCBkZXBlbmQgb24gdGhlIGZvbGxvd2luZzpcblx0XHQgXHQxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5ICh1cGRhdGFibGVQYXRoKS5cblx0XHQgXHQyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkIChsaWtlIExSKSwgaW4gdGhpcyBjYXNlIG9ubHkgYWN0aXZlIGNvbnRleHRzIGNhbiBiZSBtYXNzIGVkaXRlZCAobm90IGRyYWZ0IGNvbnRleHRzKS5cblx0XHQgICAgU28sIHVwZGF0ZSBkZXBlbmRzIG9uICdJc0FjdGl2ZUVudGl0eScsICdIYXNEcmFmdEVudGl0eScgIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQuICovXG5cdFx0Y29uc3QgY29udGV4dERhdGEgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgdXBkYXRhYmxlQnlQYXRoID0gdXBkYXRhYmxlUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCB8fCAhIXNlbGVjdGVkQ29udGV4dC5nZXRQcm9wZXJ0eSh1cGRhdGFibGVQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IG5vdERyYWZ0SW5SZWFkT25seU1vZGUgPSAhcmVhZE9ubHlEcmFmdEVuYWJsZWQgfHwgKGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5ICYmICFjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eSk7XG5cdFx0aWYgKHVwZGF0YWJsZUJ5UGF0aCAmJiBub3REcmFmdEluUmVhZE9ubHlNb2RlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIG5vZGUgaXMgbW92YWJsZSBhY2NvcmRpbmcgdG8gdGhlIGN1c3RvbSBsb2dpYyAoaWYgYW55KS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgbW92ZWQgKG9yIGlmIHRoZXJlJ3Mgbm8gY3VzdG9tIGxvZ2ljKSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0lmTm9kZUlzTW92YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZU1vdmFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVNb3ZhYmxlO1xuXHRcdGNvbnN0IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPSBpc05vZGVNb3ZhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9PT0gdW5kZWZpbmVkIHx8IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24obm9kZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy53YXJuaW5nKGBFcnJvciBpbiBjdXN0b20gZnVuY3Rpb24gZm9yIGlzTm9kZU1vdmFibGU6ICR7ZXJyb3J9YCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBub2RlIGNhbiBiZSBjb3BpZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMsIGlmIGFueS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgY3VzdG9tIGxvZ2ljIGFsbG93cyB0aGUgbm9kZSB0byBiZSBjb3BpZWQgKG9yIGlmIG5vIGN1c3RvbSBsb2dpYyBpcyBkZWZpbmVkKTsgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc0NvcHlhYmxlOiBmdW5jdGlvbiAobm9kZTogQ29udGV4dCwgdGFibGU6IFRhYmxlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNOb2RlQ29weWFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVDb3B5YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlQ29weWFibGVGdW5jdGlvblxuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHQ6IENvbnRleHQpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBDdXQgYW5kIFBhc3RlIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBtb2RlbE9iamVjdCBJbnRlcm5hbCBjb250ZXh0IG9iamVjdCBvZiB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBUYWJsZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdG1vZGVsT2JqZWN0LmNvbnRleHRtZW51ID0gbW9kZWxPYmplY3QuY29udGV4dG1lbnUgPz8geyBzZWxlY3RlZENvbnRleHRzOiBbXSB9O1xuXG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0Ly8gVGhlIGxvZ2ljIGJlbG93IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGEgVHJlZSBUYWJsZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0Y29uc3QgaXNWaWV3RWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdGlmICh2aWV3LmdldENvbnRyb2xsZXJOYW1lKCkgIT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIgJiYgIWlzVmlld0VkaXRhYmxlKSB7XG5cdFx0XHQvLyBJZiB0aGUgdmlldyBpcyBub3QgZWRpdGFibGUsIHdlIGRpc2FibGUgdGhlIGN1dC9jb3B5L3Bhc3RlIGZ1bmN0aW9uYWxpdHkgYW5kIGNsZWFyIHRoZSBub2RlVXBkYXRlc0luZm9cblx0XHRcdG1vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyA9IHt9O1xuXHRcdFx0KG1vZGVsT2JqZWN0LmNvbnRleHRtZW51IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KS5ub2RlVXBkYXRlc0luZm8gPSB7fTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY2hlY2tEcmFmdEluc3RhbmNlID0gIXRhYmxlLmdldFJvd0JpbmRpbmcoKS5pc1JlbGF0aXZlKCk7XG5cblx0XHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0fVxuXHRcdGNvbnN0IG5vZGVVcGRhdGVzSW5mbyA9IG1vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHQvL0lmIHRoZSBwYXN0YWJsZUNvbnRleHQgYmVjb21lIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBsaXN0QmluZGluZywgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHVzZXIgY29sbGFwc2VzIHRoZSBwYXJlbnQgbm9kZSwgd2UgYXR0ZW1wdCB0byBsb2NhdGUgdGhlIGNvcnJlY3QgY29udGV4dCBieSBjb21wYXJpbmcgdGhlaXIgcGF0aHNcblx0XHRjb25zdCBwYXN0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSB0YWJsZVxuXHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0LmdldEFsbEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHQuZmlsdGVyKChjb250ZXh0KSA9PlxuXHRcdFx0XHQoKG5vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIHx8IFtdKSBhcyBDb250ZXh0W10pXG5cdFx0XHRcdFx0Lm1hcCgocGFzdGFibGVDb250ZXh0KSA9PiBwYXN0YWJsZUNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdFx0XHRcdC5pbmNsdWRlcyhjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdCk7XG5cblx0XHRpZiAocGFzdGFibGVDb250ZXh0cy5sZW5ndGggIT09ICgobm9kZVVwZGF0ZXNJbmZvLnBhc3RhYmxlQ29udGV4dHMgfHwgW10pIGFzIENvbnRleHRbXSkubGVuZ3RoKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcIlwiICsgUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9QQVNUQUJMRV9DT05URVhUU19OT1RfQVZBSUxBQkxFXCIpKTtcblx0XHR9XG5cdFx0Y29uc3QgY29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8gPSAoKCFmb3JDb250ZXh0TWVudSA/IG1vZGVsT2JqZWN0IDogbW9kZWxPYmplY3QuY29udGV4dG1lbnUpIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KVxuXHRcdFx0Lm5vZGVVcGRhdGVzSW5mbyBhcyB7XG5cdFx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHRcdH07XG5cdFx0Y29uc3QgZGF0YU1vZGVsc3JjID0gKCFmb3JDb250ZXh0TWVudSA/IG1vZGVsT2JqZWN0IDogbW9kZWxPYmplY3QuY29udGV4dG1lbnUpIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXHRcdGNvbnN0IGN1dGFibGVDb250ZXh0cyA9IChkYXRhTW9kZWxzcmMudXBkYXRhYmxlQ29udGV4dHMgYXMgQ29udGV4dFtdKS5maWx0ZXIoXG5cdFx0XHQoY29udGV4dCkgPT5cblx0XHRcdFx0VGFibGVSdW50aW1lLmNoZWNrSWZOb2RlSXNNb3ZhYmxlKGNvbnRleHQsIHRhYmxlKSAmJiAoIWNoZWNrRHJhZnRJbnN0YW5jZSB8fCBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIikgIT09IHRydWUpXG5cdFx0KTtcblx0XHRjb25zdCBjb3B5YWJsZUNvbnRleHRzID0gKGRhdGFNb2RlbHNyYy5zZWxlY3RlZENvbnRleHRzIGFzIENvbnRleHRbXSkuZmlsdGVyKChjb250ZXh0KSA9PlxuXHRcdFx0VGFibGVSdW50aW1lLmNoZWNrSWZOb2RlSXNDb3B5YWJsZShjb250ZXh0LCB0YWJsZSlcblx0XHQpO1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBkYXRhTW9kZWxzcmMuc2VsZWN0ZWRDb250ZXh0cyBhcyBDb250ZXh0W107XG5cdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8uY3V0RW5hYmxlbWVudCA9IHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID09PSAxICYmIGN1dGFibGVDb250ZXh0cy5sZW5ndGggPT09IDE7XG5cdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8uY29weUVuYWJsZW1lbnQgPSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA9PT0gMSAmJiBjb3B5YWJsZUNvbnRleHRzLmxlbmd0aCA9PT0gMTtcblxuXHRcdGlmIChub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbikge1xuXHRcdFx0aWYgKHBhc3RhYmxlQ29udGV4dHM/Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5wYXN0ZUVuYWJsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50OiBDb250ZXh0W107XG5cdFx0XHRjb25zdCBleHRlbnNpb25Qb2ludCA9XG5cdFx0XHRcdG5vZGVVcGRhdGVzSW5mby5sYXN0QWN0aW9uID09PSBcIkN1dFwiXG5cdFx0XHRcdFx0PyB0YWJsZURlZmluaXRpb24uY29udHJvbC5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZFxuXHRcdFx0XHRcdDogdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQ7XG5cblx0XHRcdC8vcmVtb3ZlIGNvbnRleHRzIGRlcGVuZGluZyBvZiB0aGUgY3VzdG9tIGZ1bmN0aW9uXG5cdFx0XHRpZiAoZXh0ZW5zaW9uUG9pbnQpIHtcblx0XHRcdFx0Y29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQgPSBbLi4uc2VsZWN0ZWRDb250ZXh0c10uZmlsdGVyKFxuXHRcdFx0XHRcdCh0YXJnZXRDb250ZXh0KSA9PlxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHRzOiBDb250ZXh0W10pID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0ZXh0ZW5zaW9uUG9pbnQubWV0aG9kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR0YWJsZVxuXHRcdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0XHQpKHBhc3RhYmxlQ29udGV4dHNbMF0sIHRhcmdldENvbnRleHQpIC8vbm9kZVVwZGF0ZXNJbmZvLnBhc3RhYmxlQ29udGV4dHMgaGFzIGJlZW4gdGhlIGxhc3QgdGltZSB0aGUgdXNlciBwcmVzc2VkIHRoZSBjdXQvY29weSBidXR0b25cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdO1xuXHRcdFx0fVxuXG5cdFx0XHQvL3RoZSBwYXN0ZSBjYW5ub3QgYmUgZG9uZSBpZiBzZXZlcmFsIGNvbnRleHRzIGFyZSBzZWxlY3RlZFxuXHRcdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8ucGFzdGVFbmFibGVtZW50ID1cblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPD0gMSAmJiBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudC5sZW5ndGggPT09IHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogIFVwZGF0ZXMgdGhlIGludGVybmFsIGNvbnRleHQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIG1vdmUgdXAvbW92ZSBkb3duIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBtb2RlbE9iamVjdFxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHR1cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudDogZnVuY3Rpb24gKG1vZGVsT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgdGFibGU6IFRhYmxlLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWxPYmplY3RQYXRoID0gIWZvckNvbnRleHRNZW51ID8gbW9kZWxPYmplY3QgOiAobW9kZWxPYmplY3QuY29udGV4dG1lbnUgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pO1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBtb2RlbE9iamVjdFBhdGguc2VsZWN0ZWRDb250ZXh0cyBhcyBDb250ZXh0W107XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKTtcblxuXHRcdGNvbnN0IGNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZDtcblx0XHQvLyBEaXNhYmxlIHRoZSBtb3ZlIHVwL21vdmUgZG93biBidXR0b25zIGlmIHRoZXJlIGFyZSBubyBzZWxlY3RlZCBjb250ZXh0cywgaWYgdGhlIHRhYmxlIGlzIG5vdCBhIFRyZWVUYWJsZSwgb3IgaWYgdGhlIHRhYmxlIGlzIHNvcnRlZFxuXHRcdGlmIChcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxIHx8XG5cdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlICE9PSBcIlRyZWVUYWJsZVwiIHx8XG5cdFx0XHR0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlIHx8XG5cdFx0XHQoc2VsZWN0ZWRDb250ZXh0c1swXS5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUubGV2ZWxcIikgPT09IDEgJiYgIWNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCkgLy8gRGlzYWJsZSBtb3ZlIHVwL2Rvd24gZm9yIHJvb3RzXG5cdFx0KSB7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9IGZhbHNlO1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtb3ZlZENvbnRleHQgPSBzZWxlY3RlZENvbnRleHRzWzBdO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgY29udGV4dCBjYW4gYmUgbW92ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMgKGlmIGFueSkgYW5kIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIGRyYWZ0IGluc3RhbmNlIGlmIHdlJ3JlIGluIGEgTGlzdFJlcG9ydCxcblx0XHRcdC8vIGFuZCBpZiBpdCdzIG5vdCBvdXQtb2YtcGxhY2UgKGkuZS4gaXQgbXVzdCBiZSBkaXNwbGF5ZWQgYXQgaXRzICdyZWFsJyBwb3NpdGlvbilcblx0XHRcdGNvbnN0IG1vdmFibGVEcmFmdCA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKS5pc1JlbGF0aXZlKCkgfHwgbW92ZWRDb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIikgIT09IHRydWU7XG5cdFx0XHRjb25zdCBvdXRPZlBsYWNlQ29udGV4dCA9IG1vdmVkQ29udGV4dC5pc1RyYW5zaWVudCgpICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBjdXN0b21Nb3ZhYmxlID0gVGFibGVSdW50aW1lLmNoZWNrSWZOb2RlSXNNb3ZhYmxlKG1vdmVkQ29udGV4dCwgdGFibGUpO1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlVXAgPVxuXHRcdFx0XHRtb3ZhYmxlRHJhZnQgJiYgY3VzdG9tTW92YWJsZSAmJiAhb3V0T2ZQbGFjZUNvbnRleHQgJiYgIW1vdmVkQ29udGV4dC5pc0RlbGV0ZWQoKSAmJiBtb3ZlZENvbnRleHQuZ2V0U2libGluZygtMSkgIT09IG51bGw7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVEb3duID1cblx0XHRcdFx0bW92YWJsZURyYWZ0ICYmIGN1c3RvbU1vdmFibGUgJiYgIW91dE9mUGxhY2VDb250ZXh0ICYmICFtb3ZlZENvbnRleHQuaXNEZWxldGVkKCkgJiYgbW92ZWRDb250ZXh0LmdldFNpYmxpbmcoMSkgIT09IG51bGw7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBDcmVhdGUgYnV0dG9uIC8gbWVudSAvIG1lbnUgaXRlbXMuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbENvbnRleHRcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFja1xuXHQgKiBAcGFyYW0gY3JlYXRlRW5hYmxlbWVudENhbGxiYWNrLm1vZHVsZU5hbWVcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tZXRob2ROYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gcGFyZW50Q29udGV4dFxuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBub2RlVHlwZVBhcmFtZXRlcnMucHJvcGVydHlOYW1lXG5cdCAqIEBwYXJhbSBub2RlVHlwZVBhcmFtZXRlcnMudmFsdWVzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChcblx0XHRpbnRlcm5hbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjazogeyBtb2R1bGVOYW1lOiBzdHJpbmc7IG1ldGhvZE5hbWU6IHN0cmluZyB9LFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCxcblx0XHRub2RlVHlwZVBhcmFtZXRlcnM/OiB7IHByb3BlcnR5TmFtZTogc3RyaW5nOyB2YWx1ZXM6IHsgdmFsdWU6IHN0cmluZyB9W10gfSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IHZvaWQge1xuXHRcdGxldCBwb3NzaWJsZVZhbHVlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcblx0XHRpZiAobm9kZVR5cGVQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFB1c2ggYWxsIHBvc3NpYmxlIHZhbHVlcyBpbiB0aGUgbWVudVxuXHRcdFx0cG9zc2libGVWYWx1ZXMgPSBub2RlVHlwZVBhcmFtZXRlcnMudmFsdWVzLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBtZW51IC0tPiBPbmx5ICd1bmRlZmluZWQnIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlICdDcmVhdGUnIGJ1dHRvblxuXHRcdFx0cG9zc2libGVWYWx1ZXMgPSBbdW5kZWZpbmVkXTtcblx0XHR9XG5cblx0XHRjb25zdCBlbmFibGVtZW50RnVuY3Rpb24gPSBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGVUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHBhcmVudENvbnRleHQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tb2R1bGVOYW1lLFxuXHRcdFx0Y3JlYXRlRW5hYmxlbWVudENhbGxiYWNrLm1ldGhvZE5hbWUsXG5cdFx0XHR0YWJsZVxuXHRcdCk7XG5cblx0XHRpZiAoIWVuYWJsZW1lbnRGdW5jdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBlbmFibGVkRmxhZ3MgPSBwb3NzaWJsZVZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG5cdFx0XHRsZXQgZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZW5hYmxlZCA9ICEhKGVuYWJsZW1lbnRGdW5jdGlvbih2YWx1ZSwgcGFyZW50Q29udGV4dCkgPz8gdHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChfZXJyb3IpIHtcblx0XHRcdFx0ZW5hYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZW5hYmxlZDtcblx0XHR9KTtcblx0XHQvLyBlbmFibGVGbGFnc1tpXSBpcyB0cnVlIDw9PiBwb3NzaWJsZVZhbHVlc1tpXSBpcyBhbGxvd2VkIGZvciBjcmVhdGlvblxuXG5cdFx0Y29uc3QgZW5hYmxlbWVudE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRlbmFibGVtZW50TWFwW1wiQ3JlYXRlXCJdID0gZW5hYmxlZEZsYWdzLnNvbWUoKGZsYWcpID0+IGZsYWcpOyAvLyBFbmFibGUgdGhlIE1lbnUgKG9yIHRoZSBidXR0b24pIGlmIGF0IGxlYXN0IG9uZSBvcHRpb24gaXMgcG9zc2libGVcblx0XHRlbmFibGVkRmxhZ3MuZm9yRWFjaCgoZW5hYmxlZCwgaW5kZXgpID0+IHtcblx0XHRcdGVuYWJsZW1lbnRNYXBbYENyZWF0ZV8ke2luZGV4fWBdID0gZW5hYmxlZDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L1wiIDogXCJcIjtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoY29udGV4dFBhdGggKyBcImNyZWF0ZUVuYWJsZW1lbnRcIiwgZW5hYmxlbWVudE1hcCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsZWFycyB0aGUgdGFibGUgc2VsZWN0aW9uLCBhbmQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgJ0NyZWF0ZScgYnV0dG9uL21lbnUgaWYgbmVjZXNzYXJ5LlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlXG5cdCAqL1xuXHRjbGVhclNlbGVjdGlvbjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRyb2xcblx0XHR0YWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXG5cdFx0Ly8gVXBkYXRlIHRoZSBzZWxlY3Rpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgMCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkZWxldGFibGVDb250ZXh0c1wiLCBbXSk7XG5cdFx0fVxuXG5cdFx0Ly8gRW5hYmxlL2Rpc2FibGUgdGhlICdDcmVhdGUnIGJ1dHRvbi9tZW51IGlmIG5lY2Vzc2FyeVxuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0IGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0dGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc2FibGVBY3Rpb246IGZ1bmN0aW9uIChhQWN0aW9uc011bHRpc2VsZWN0RGlzYWJsZWQ6IHN0cmluZ1tdLCBvRHluYW1pY0FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgYkVuYWJsZWQ/OiBib29sZWFuIH0+KTogdm9pZCB7XG5cdFx0YUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkLmZvckVhY2goZnVuY3Rpb24gKHNBY3Rpb246IHN0cmluZykge1xuXHRcdFx0b0R5bmFtaWNBY3Rpb25zW3NBY3Rpb25dID0geyBiRW5hYmxlZDogZmFsc2UgfTtcblx0XHR9KTtcblx0fSxcblx0b25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3c6IGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50VHlwZTx0eXBlb2YgRmllbGQucHJvdG90eXBlLmNoYW5nZT4sIHdpdGhDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IGJvb2xlYW4pOiB2b2lkIHtcblx0XHQvLyBDUkVBVElPTiBST1cgQ0FTRVxuXHRcdGNvbnN0IG1GaWVsZCA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRGaWVsZFN0YXRlT25DaGFuZ2Uob0V2ZW50KSxcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IG1GaWVsZC5maWVsZCxcblx0XHRcdHNGaWVsZElkID0gb1NvdXJjZUZpZWxkLmdldElkKCk7XG5cblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvU291cmNlRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG1GaWVsZFZhbGlkaXR5ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIpLFxuXHRcdFx0bU5ld0ZpZWxkVmFsaWRpdHkgPSBPYmplY3QuYXNzaWduKHt9LCBtRmllbGRWYWxpZGl0eSk7XG5cblx0XHRtTmV3RmllbGRWYWxpZGl0eVtzRmllbGRJZF0gPSBtRmllbGQuc3RhdGU7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIG1OZXdGaWVsZFZhbGlkaXR5KTtcblxuXHRcdC8vIHByZXBhcmUgQ3VzdG9tIFZhbGlkYXRpb25cblx0XHRpZiAod2l0aEN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbikge1xuXHRcdFx0Y29uc3QgbUN1c3RvbVZhbGlkaXR5ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiKSxcblx0XHRcdFx0bU5ld0N1c3RvbVZhbGlkaXR5ID0gT2JqZWN0LmFzc2lnbih7fSwgbUN1c3RvbVZhbGlkaXR5KTtcblx0XHRcdG1OZXdDdXN0b21WYWxpZGl0eVtvU291cmNlRmllbGQuZ2V0QmluZGluZyhcInZhbHVlXCIpIS5nZXRQYXRoKCldID0ge1xuXHRcdFx0XHRmaWVsZElkOiBvU291cmNlRmllbGQuZ2V0SWQoKVxuXHRcdFx0fTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwgbU5ld0N1c3RvbVZhbGlkaXR5KTtcblx0XHRcdC8vIFJlbW92ZSBleGlzdGluZyBDdXN0b21WYWxpZGF0aW9uIG1lc3NhZ2Vcblx0XHRcdGNvbnN0IHNUYXJnZXQgPSBgJHtvU291cmNlRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8ke29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nUGF0aChcInZhbHVlXCIpfWA7XG5cdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRpZiAob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBzVGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHRvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkOiBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50LCBpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBXaGVuIHRoZSBjb250ZXh0IG9mIGEgVHJlZVRhYmxlIGNoYW5nZXMsIHdlIHdhbnQgdG8gcmVzdG9yZSBpdHMgZXhwYW5zaW9uIHN0YXRlIHRvIHRoZSBkZWZhdWx0OlxuXHRcdC8vICAgLSBhbGwgZXhwYW5kZWQgaWYgdGhlcmUncyBhIHNlYXJjaCBwYXJhbWV0ZXIgY29taW5nIGZyb20gdGhlIGZpbHRlckJhclxuXHRcdC8vICAgLSBvdGhlcndpc2UgaW5pdGlhbCBleHBhbnNpb24gc3RhdGUgY29taW5nIGZyb20gdGhlIFBWIChzdG9yZWQgaW4gdGhlIHBheWxvYWQpXG5cdFx0Ly8gICAtIG90aGVyd2lzZSBubyBleHBhbnNpb24gYXQgYWxsXG5cblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCB0YWJsZSA9IHNvdXJjZSBhcyBUYWJsZTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IHJvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0aWYgKCFyb3dCaW5kaW5nPy5nZXRDb250ZXh0KCkgfHwgdGFibGVBUEkuZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50KCkpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBpcyBub3QgYm91bmQsIG9yIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Ygc3dpdGNoaW5nIGJldHdlZW4gbm9ybWFsIGFuZCBmdWxsc2NyZWVuLCBzbyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgZXhwYW5zaW9uIHN0YXRlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWdncmVnYXRpb246IHtcblx0XHRcdGFnZ3JlZ2F0ZT86IG9iamVjdDtcblx0XHRcdGV4cGFuZFRvPzogbnVtYmVyO1xuXHRcdFx0Z3JhbmRUb3RhbEF0Qm90dG9tT25seT86IGJvb2xlYW47XG5cdFx0XHRncm91cD86IG9iamVjdDtcblx0XHRcdGdyb3VwTGV2ZWxzPzogc3RyaW5nW107XG5cdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0XHRzdWJ0b3RhbHNBdEJvdHRvbU9ubHk/OiBib29sZWFuO1xuXHRcdH0gPSByb3dCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgPz8ge307XG5cdFx0Y29uc3QgZmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyh0YWJsZSk7XG5cdFx0YWdncmVnYXRpb24uZXhwYW5kVG8gPSBmaWx0ZXJJbmZvLnNlYXJjaCA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogaW5pdGlhbEV4cGFuc2lvbkxldmVsO1xuXHRcdHJvd0JpbmRpbmcuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb24pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBpdGVtIGluIGEgJ0NyZWF0ZScgbWVudSBpcyBjbGlja2VkLiBJdCBjcmVhdGVzIGEgZG9jdW1lbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsIGRhdGEuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcGFyYW0gdmFsdWVJbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIG1lbnVcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgVGhlIHNlbGVjdGVkIGNvbnRleHRzIGluIHRoZSB0YWJsZSBmb3IgdGhpcyAnQ3JlYXRlJyBtZW51XG5cdCAqL1xuXHRvbkNyZWF0ZU1lbnVJdGVtUHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPiwgdmFsdWVJbmRleDogbnVtYmVyLCBzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTb21lIGNoZWNrcyB0byBiZSBvbiB0aGUgc2FmZSBzaWRlXG5cdFx0aWYgKCF0YWJsZUFQSSB8fCAhbWRjVGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm9kZVR5cGUgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZTtcblx0XHRpZiAoIW5vZGVUeXBlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGVBUEkpO1xuXHRcdGNvbnN0IGNyZWF0aW9uRGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGNyZWF0aW9uRGF0YVtub2RlVHlwZS5wcm9wZXJ0eU5hbWVdID0gbm9kZVR5cGUudmFsdWVzW3ZhbHVlSW5kZXhdLnZhbHVlO1xuXG5cdFx0Y29uc3QgY3JlYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRjcmVhdGlvbk1vZGU6IHN0cmluZztcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W107XG5cdFx0XHR0YWJsZUlkPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0XHRcdGRhdGE/OiBvYmplY3Q7XG5cdFx0XHRyZXF1ZXN0QXRMZWFzdD86IHN0cmluZ1tdO1xuXHRcdH0gPSB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUubW9kZSxcblx0XHRcdGRhdGE6IGNyZWF0aW9uRGF0YSxcblx0XHRcdHRhYmxlSWQ6IG1kY1RhYmxlPy5nZXRJZCgpLFxuXHRcdFx0cmVxdWVzdEF0TGVhc3Q6IE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSlcblx0XHR9O1xuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gbm9kZVR5cGUudmFsdWVzW3ZhbHVlSW5kZXhdLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0aWYgKCFjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgfHwgY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBVc2UgdGhlIGRlZmF1bHQgdmFsdWUgaWYgbm8gY3JlYXRpb24gZmllbGRzIGFyZSBzcGVjaWZpZWQgZm9yIHRoaXMgbWVudSBpdGVtXG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdFx0Ly8gSW4gY3JlYXRpb24gZGlhbG9nIG1vZGUsIHdlIGZvcmNlIHRoZSB0YWJsZSBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGRvY3VtZW50XG5cdFx0XHRcdC8vICh0byBvdmVyY29tZSB0aGUgY2FzZSBpbiBhIExpc3RSZXBvcnQgd2hlcmUgbm8gZGF0YSBpcyBsb2FkZWQgeWV0KVxuXHRcdFx0XHRhd2FpdCBtZGNUYWJsZS5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0LmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KHRhYmxlQVBJLmdldFJvd0JpbmRpbmcoKSwgY3JlYXRpb25QYXJhbWV0ZXJzKVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGRvY3VtZW50OiAke2Vycm9yfWApO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSAnQ3JlYXRlJyBidXR0b24gaXMgcHJlc3NlZCwgb3IgdGhlICdDcmVhdGUnIGNvbW1hbmQgaW52b2tlZC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzIFRoZSBzZWxlY3RlZCBjb250ZXh0cyBpbiB0aGUgdGFibGUgZm9yIHRoaXMgJ0NyZWF0ZScgYnV0dG9uXG5cdCAqL1xuXHRvbkNyZWF0ZUJ1dHRvblByZXNzOiBhc3luYyBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50LCBzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU29tZSBjaGVja3MgdG8gYmUgb24gdGhlIHNhZmUgc2lkZVxuXHRcdGlmICghdGFibGVBUEkgfHwgIW1kY1RhYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRjcmVhdGVBdEVuZD86IGJvb2xlYW47XG5cdFx0XHRjcmVhdGlvbk1vZGU6IHN0cmluZztcblx0XHRcdG91dGJvdW5kPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25Sb3c/OiBDcmVhdGlvblJvdztcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W107XG5cdFx0XHR0YWJsZUlkPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0XHRcdHJlcXVlc3RBdExlYXN0Pzogc3RyaW5nW107XG5cdFx0fSA9IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlLm1vZGUsXG5cdFx0XHRyZXF1ZXN0QXRMZWFzdDogT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUpIHtcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkV4dGVybmFsOlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMub3V0Ym91bmQgPSAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlIGFzIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwpLm91dGJvdW5kO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3c6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvblJvdyA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVBdEVuZCA/PyBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLk5ld1BhZ2U6XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmU6XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZzpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlQXRFbmQgPz8gZmFsc2U7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy50YWJsZUlkID0gbWRjVGFibGU/LmdldElkKCk7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzID0gc2VsZWN0ZWRDb250ZXh0cztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93czpcblx0XHRcdFx0Ly8gTm90aGluZ1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gT3RoZXIgbW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0aWYgKCFtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdFx0Ly8gSW4gY3JlYXRpb24gZGlhbG9nIG1vZGUsIHdlIGZvcmNlIHRoZSB0YWJsZSBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGRvY3VtZW50XG5cdFx0XHRcdC8vICh0byBvdmVyY29tZSB0aGUgY2FzZSBpbiBhIExpc3RSZXBvcnQgd2hlcmUgbm8gZGF0YSBpcyBsb2FkZWQgeWV0KVxuXHRcdFx0XHRhd2FpdCBtZGNUYWJsZS5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZUFQSSk7XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmNyZWF0ZUVtcHR5Um93c0FuZEZvY3VzKG1kY1RhYmxlKVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBlbXB0eSByb3c6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQodGFibGVBUEksIGNyZWF0aW9uUGFyYW1ldGVycylcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZG9jdW1lbnQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1hbmFnZSB0aGUgSW50ZW50QmFzZWQgTmF2aWdhdGlvbiBlbmFibGVtZW50LlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIG5hdmlnYXRpb25BdmFpbGFibGVNYXBcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHNcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZ1tdLFxuXHRcdHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpYm4vJHtzS2V5fWAsIHtcblx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpYm4vJHtzS2V5fWAsIHtcblx0XHRcdFx0XHQvLyBEbyBub3QgY2hhbmdlIGVuYWJsZWQsIGFBcHBsaWNhYmxlIGFuZCBhTm90QXBwbGljYWJsZSBwcm9wZXJ0eSBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSBjYWxjdWxhdGlvblxuXHRcdFx0XHRcdGJFbmFibGVkOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2JFbmFibGVkYCksXG5cdFx0XHRcdFx0YUFwcGxpY2FibGU6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYUFwcGxpY2FibGVgKSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9hTm90QXBwbGljYWJsZWApLFxuXHRcdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYUFwcGxpY2FibGUgPSBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG5hdmlnYXRpb25BdmFpbGFibGVNYXBbc0tleV07XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBzZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHNQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRjb25zdCBlbmFibGVkUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkXCIgOiBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHtlbmFibGVkUHJvcGVydHl9YCwgdHJ1ZSk7XG5cdFx0XHRcdFx0YUFwcGxpY2FibGUucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke2FwcGxpY2FibGVQcm9wZXJ0eX1gLCBhQXBwbGljYWJsZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhIGNvbnRleHQgbWVudSBpdGVtIGlzIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0b25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgdGFibGVBUEkgc28gdGhhdCBnZXRTZWxlY3RlZENvbnRleHRzIHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWVcblx0XHR0YWJsZUFQST8uc2V0Q29udGV4dE1lbnVBY3RpdmUodHJ1ZSk7XG5cblx0XHQvLyBBZnRlciBhIHNob3J0IGRlbGF5IChvbmNlIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQpLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBmbGFnIG9uIHRoZSB0YWJsZVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGFibGVBUEk/LnNldENvbnRleHRNZW51QWN0aXZlKGZhbHNlKTtcblx0XHR9LCAwKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgTURDIERhdGFTdGF0ZUluZGljYXRvciBwbHVnaW4gdG8gZGlzcGxheSBtZXNzYWdlU3RyaXAgb24gYSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICogQHJldHVybnMgV2hldGhlciB0byByZW5kZXIgdGhlIG1lc3NhZ2VTdHJpcCB2aXNpYmxlXG5cdCAqL1xuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBjb250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdHJldHVybiB0YWJsZUFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIobWVzc2FnZSwgY29udHJvbCk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUnVudGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQTZCQSxNQUFNQSxZQUFZLEdBQUdDLFNBQVMsQ0FBQ0QsWUFBWTtFQUMzQztBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1FLFlBQVksR0FBRztJQUNwQkMsZ0NBQWdDLEVBQUUsU0FBQUEsQ0FBVUMsY0FBc0IsRUFBRUMsT0FBZ0IsRUFBUTtNQUMzRjtNQUNB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
@@ -170,7 +170,14 @@ const TableRuntime = {
170
170
 
171
171
  this.updateCutCopyPasteEnablement(oModelObject, table);
172
172
  this.updateMoveUpDownEnablement(oModelObject, table);
173
- return ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, activeSelectedContexts, "table");
173
+ return ActionRuntime.setActionEnablement(
174
+ oInternalModelContext,
175
+ oActionOperationAvailableMap,
176
+ activeSelectedContexts,
177
+ "table",
178
+ false,
179
+ true
180
+ );
174
181
  },
175
182
 
176
183
  /**
@@ -554,11 +561,13 @@ const TableRuntime = {
554
561
  tableId?: string;
555
562
  creationDialogFields?: string[];
556
563
  data?: object;
564
+ requestAtLeast?: string[];
557
565
  } = {
558
566
  selectedContexts,
559
567
  creationMode: tableAPI.tableDefinition.annotation.create.mode,
560
568
  data: creationData,
561
- tableId: mdcTable?.getId()
569
+ tableId: mdcTable?.getId(),
570
+ requestAtLeast: Object.keys(tableAPI.tableDefinition.requestAtLeast ?? {})
562
571
  };
563
572
 
564
573
  if (creationParameters.creationMode === CreationMode.CreationDialog) {
@@ -603,7 +612,11 @@ const TableRuntime = {
603
612
  selectedContexts?: Context[];
604
613
  tableId?: string;
605
614
  creationDialogFields?: string[];
606
- } = { creationMode: tableAPI.tableDefinition.annotation.create.mode };
615
+ requestAtLeast?: string[];
616
+ } = {
617
+ creationMode: tableAPI.tableDefinition.annotation.create.mode,
618
+ requestAtLeast: Object.keys(tableAPI.tableDefinition.requestAtLeast ?? {})
619
+ };
607
620
 
608
621
  switch (creationParameters.creationMode) {
609
622
  case CreationMode.External: