@sapui5/sap.fe.macros 1.142.0 → 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 (83) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  24. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  25. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  26. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  27. package/src/sap/fe/macros/controls/Section.js +3 -2
  28. package/src/sap/fe/macros/controls/Section.ts +1 -1
  29. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  30. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  33. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  34. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  35. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  36. package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
  37. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  38. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  39. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  40. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  41. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  42. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  43. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  44. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  45. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  46. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  47. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  48. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  49. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  50. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  51. package/src/sap/fe/macros/library.js +5 -6
  52. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  53. package/src/sap/fe/macros/messagebundle.properties +6 -0
  54. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  55. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  56. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
  57. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
  58. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  59. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  60. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  61. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  62. package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
  63. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
  64. package/src/sap/fe/macros/table/Table.block.js +3 -1
  65. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  66. package/src/sap/fe/macros/table/TableAPI.js +62 -28
  67. package/src/sap/fe/macros/table/TableAPI.ts +73 -32
  68. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
  69. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
  70. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  71. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  72. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  73. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  74. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  75. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  76. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  77. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  78. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  79. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  80. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  81. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  82. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
  83. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
@@ -169,6 +169,12 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
169
169
  const overflowToolbarID = this.id ? StableIDHelper.generate([this.id, "FormActionsToolbar"]) : undefined;
170
170
  const dataModelObject = getInvolvedDataModelObjects(this.contextPath, this.metaPath);
171
171
  const bindingString = FormHelper.generateBindingExpression(this.navigationPath, dataModelObject);
172
+ let title = "";
173
+ if (this.title && this.title.length > 0) {
174
+ title = xml`<f:title>
175
+ <core:Title level="${this.titleLevel}" text="${this.title}" />
176
+ </f:title>`;
177
+ }
172
178
  return xml`
173
179
  <f:FormContainer
174
180
  xmlns="sap.m"
@@ -204,12 +210,7 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
204
210
  macrodata:UiHiddenPresent="${this.hasUiHiddenAnnotation}"
205
211
  >
206
212
 
207
- <template:if test="${this.title}">
208
- <f:title>
209
- <core:Title level="${this.titleLevel}" text="${this.title}" />
210
- </f:title>
211
- </template:if>
212
-
213
+ ${title}
213
214
  <template:if test="${this.actions}">
214
215
  <template:then>
215
216
  <f:toolbar>
@@ -658,7 +659,7 @@ width="100%"
658
659
  dt:designtime="${designtime}"
659
660
  id="${formElementId}"
660
661
  label="${formElement.label}"
661
- visible="${formElement.visible}"
662
+ ${this.attr("visible", formElement.visible)}
662
663
  ${this.attr("binding", bindingString)}
663
664
  >
664
665
  <f:fields>
@@ -828,4 +829,4 @@ width="100%"
828
829
  _exports = FormContainerBlock;
829
830
  return _exports;
830
831
  }, false);
831
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJzb3J0ZWRDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZVN0cmluZyIsIm9yaWdpbmFsVGVtcGxhdGUiLCJwbGFjZWhvbGRlcnMiLCJBcnJheSIsImZyb20iLCJtYXRjaEFsbCIsIm1hcCIsIm0iLCJTdHJpbmciLCJ0cmltIiwiZmlsdGVyIiwicCIsImdldEZpZWxkSWRlbnRpZmllciIsImNmIiwib3JpZ2luYWxPYmplY3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpZWxkSWRzIiwidW5pcXVlUGxhY2Vob2xkZXJzIiwiU2V0IiwiaXNQZXJmZWN0TWF0Y2giLCJzaXplIiwiZXZlcnkiLCJoYXMiLCJtYXBCeUlkIiwiTWFwIiwicGgiLCJnZXQiLCJjb25uZWN0ZWRGaWVsZCIsIm1vZGVsIiwidGVtcE5hbWUiLCJiaW5kaW5nQ29udGV4dCIsImRlbGltaXRlciIsIkNvbW1vbkhlbHBlciIsImdldERlbGltaXRlciIsIm5vdExhc3RJbmRleENvbmRpdGlvbiIsImluZGV4T2YiLCJjb21wdXRlZElkUHJlZml4IiwiVmFsdWUiLCJjb21wdXRlZFZoSWRQcmVmaXgiLCJjb25uZWN0ZWRGaWVsZEVsZW1lbnQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRNYXhMZW5ndGgiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwiZmllbGRFZGl0U3R5bGUiLCJyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0IiwiZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIiwidmlzaWJsZUV4cHJlc3Npb24iLCJpc1BhcnRPZlByZXZpZXciLCJpc1JlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkIiwidG9TdHJpbmciLCJsYWJlbCIsImdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50IiwibXVsdGlWYWx1ZUZpZWxkSWQiLCJ2aElkUHJlZml4IiwiZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50IiwiZmllbGRHcm91cEVsZW1lbnRzIiwiZ3JvdXBFbGVtZW50IiwiZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0IiwiaXNCb29sZWFuRmllbGRHcm91cCIsImZpZWxkR3JvdXBFbGVtZW50IiwiZmllbGRHcm91cEZvcm1FbGVtZW50SWQiLCJsYWJlbElEIiwiZmllbGRHcm91cEhvcml6b250YWxMYXlvdXQiLCJnZXRGaWVsZEZvcm1FbGVtZW50IiwicmVhZE9ubHkiLCJzZW1hbnRpY09iamVjdCIsInBhdHRlcm4iLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIiwiZ2V0Q3VzdG9tRm9ybUVsZW1lbnQiLCJwcm9wZXJ0eVBhdGgiLCJmb3JtRWxlbWVudEtleSIsInRlbXBsYXRlIiwiZ2V0U2xvdENvbHVtbiIsImlzTXVsdGlWYWx1ZURhdGFGaWVsZCIsImRhdGFGaWVsZCIsImlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uIiwidmFsdWVQYXRoIiwiJFBhdGgiLCJpc011bHRpVmFsdWVGaWVsZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicmV0dXJuU3RyaW5nIiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtQ29udGFpbmVyLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnRUeXBlLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YmxvY2tBZ2dyZWdhdGlvbixcblx0YmxvY2tBdHRyaWJ1dGUsXG5cdGJsb2NrRXZlbnQsXG5cdGRlZmluZUJ1aWxkaW5nQmxvY2tcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB7IHhtbCwgdHlwZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCwgQ3VzdG9tRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlESGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCwgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEZvcm1IZWxwZXIgZnJvbSBcIi4vRm9ybUhlbHBlclwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZvcm1Db250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9EYXRhIFY0IG1ldGFkYXRhLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Rm9ybUNvbnRhaW5lclxuICogaWQ9XCJTb21lSWRcIlxuICogZW50aXR5U2V0PVwie2VudGl0eVNldD59XCJcbiAqIGRhdGFGaWVsZENvbGxlY3Rpb24gPVwie2RhdGFGaWVsZENvbGxlY3Rpb24+fVwiXG4gKiB0aXRsZT1cInNvbWVUaXRsZVwiXG4gKiBuYXZpZ2F0aW9uUGF0aD1cIntUb1N1cHBsaWVyfVwiXG4gKiB2aXNpYmxlPXRydWVcbiAqIG9uQ2hhbmdlPVwiLmhhbmRsZXJzLm9uRmllbGRWYWx1ZUNoYW5nZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7IG5hbWU6IFwiRm9ybUNvbnRhaW5lclwiLCBuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvc1wiIH0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtQ29udGFpbmVyQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkPzogc3RyaW5nO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiXG5cdH0pXG5cdGVudGl0eVNldD86IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0bWV0YVBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhRmllbGRDb2xsZWN0aW9uXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRkYXRhRmllbGRDb2xsZWN0aW9uPzogRm9ybUVsZW1lbnRbXTtcblxuXHQvKipcblx0ICogQ29udHJvbCB3aGV0aGVyIHRoZSBmb3JtIGlzIGluIGRpc3BsYXlNb2RlIG9yIG5vdFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkaXNwbGF5TW9kZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaXRsZSBvZiB0aGUgZm9ybSBjb250YWluZXJcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dGl0bGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIFwiYXJpYS1sZXZlbFwiIG9mIHRoZSBmb3JtIHRpdGxlLCB0aXRsZXMgb2YgaW50ZXJuYWxseSB1c2VkIGZvcm0gY29udGFpbmVycyBhcmUgbmVzdGVkIHN1YnNlcXVlbnRseVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzYXAudWkuY29yZS5UaXRsZUxldmVsXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlTGV2ZWwgPSBcIkF1dG9cIjtcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bmF2aWdhdGlvblBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZvcm0gY29udGFpbmVyIHVzaW5nIGFuIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpc2libGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIGhpZGRlbiBhbm5vdGF0aW9uIGlzIHByZXNlbnQgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRoYXNVaUhpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBGbGV4IGRlc2lnbnRpbWUgc2V0dGluZ3MgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRkZXNpZ250aW1lU2V0dGluZ3MgPSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyLmRlc2lnbnRpbWVcIjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cblx0QGJsb2NrQWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtRWxlbWVudFwiIH0pXG5cdGZvcm1FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ29uZmlndXJhYmxlT2JqZWN0PiA9IHt9O1xuXG5cdC8vIEp1c3QgcHJveGllZCBkb3duIHRvIHRoZSBGaWVsZCBtYXkgbmVlZCB0byBzZWUgaWYgbmVlZGVkIG9yIG5vdFxuXHRAYmxvY2tFdmVudCgpXG5cdG9uQ2hhbmdlPzogc3RyaW5nO1xuXG5cdGNvbnRlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Rm9ybUNvbnRhaW5lckJsb2NrPiwgZXh0ZXJuYWxDb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmVudGl0eVNldCA9IHRoaXMuY29udGV4dFBhdGghO1xuXHRcdGlmICh0aGlzLmZvcm1FbGVtZW50cyAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm1FbGVtZW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFJlZmVyZW5jZUZhY2V0Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdGNvbnN0IG1FeHRyYVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0bGV0IG9GYWNldERlZmluaXRpb24gPSBvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCxcblx0XHRcdFx0TGFiZWw6IG9GYWNldERlZmluaXRpb24/LkxhYmVsLFxuXHRcdFx0XHRUYXJnZXQ6IHtcblx0XHRcdFx0XHQkdGFyZ2V0OiBvRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0NvbnRleHRPYmplY3RQYXRoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbm5vdGF0aW9uczoge30sXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHR9IGFzIHVua25vd24gYXMgUmVmZXJlbmNlRmFjZXQ7XG5cdFx0XHRtRXh0cmFTZXR0aW5nc1tvRmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZV0gPSB7IGZpZWxkczogdGhpcy5mb3JtRWxlbWVudHMgfTtcblx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5nZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRvQ29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdC8qdGhpcy5jb250ZXh0UGF0aCovIHVuZGVmaW5lZCxcblx0XHRcdFx0c2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgXCJ0cnVlXCIsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdFx0dGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uID0gb0Zvcm1EZWZpbml0aW9uLmZvcm1Db250YWluZXJzWzBdLmZvcm1FbGVtZW50cztcblx0XHR9XG5cdFx0Ly8gV2UgbmVlZCB0aGUgdmlldyBpZCBmb3IgdGhlIGZvcm0gZWxlbWVudHMgc3RhYmxlIGlkcyBnZW5lcmF0aW9uXG5cdFx0dGhpcy5jb250ZW50SWQgPSBzZXR0aW5ncy52aWV3SWQgYXMgc3RyaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGZvciB0aGUgRm9ybUNvbnRhaW5lci5cblx0ICogQHJldHVybnMgVGhlIFhNTCB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdmVyZmxvd1Rvb2xiYXJJRCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtQWN0aW9uc1Rvb2xiYXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyh0aGlzLmNvbnRleHRQYXRoLCB0aGlzLm1ldGFQYXRoKSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBkYXRhTW9kZWxPYmplY3QpO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHQ8ZjpGb3JtQ29udGFpbmVyXG5cdFx0XHR4bWxucz1cInNhcC5tXCJcblx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0eG1sbnM6bWFjcm89XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdHhtbG5zOm1hY3JvRm9ybT1cInNhcC5mZS5tYWNyb3MuZm9ybVwiXG5cdFx0XHR4bWxuczppbnRlcm5hbE1hY3JvPVwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiXG5cdFx0XHR4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIlxuXHRcdFx0eG1sbnM6Y29udHJvbHM9XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCJcblx0XHRcdHhtbG5zOmR0PVwic2FwLnVpLmR0XCJcblx0XHRcdHhtbG5zOm1hY3JvZGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIlxuXHRcdFx0eG1sbnM6ZnBtPVwic2FwLmZlLm1hY3Jvcy5mcG1cIlxuXHRcdFx0eG1sbnM6dGVtcGxhdGU9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiXG5cdFx0XHR0ZW1wbGF0ZTpyZXF1aXJlPVwie1xuXHRcdFx0XHRNT0RFTDogJ3NhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyJyxcblx0XHRcdFx0SUQ6ICdzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyJyxcblx0XHRcdFx0Q09NTU9OOiAnc2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXInLFxuXHRcdFx0XHRGT1JNOiAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1IZWxwZXInLFxuXHRcdFx0XHRVSTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RGF0YUZpZWxkOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhRmllbGRGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RmllbGRUZW1wbGF0aW5nOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmcnLFxuXHRcdFx0XHRQcm9wZXJ0eTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RklFTEQ6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyJyxcblx0XHRcdFx0TUFDUk86ICdzYXAvZmUvbWFjcm9zL01hY3JvVGVtcGxhdGluZydcblx0XHRcdH1cIlxuXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7Rm9ybUNvbnRhaW5lclJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUNvbnRhaW5lckFQSSd9XCJcblx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke3RoaXMuZGVzaWdudGltZVNldHRpbmdzfVwiXG5cdFx0XHRpZD1cIiR7dGhpcy5pZCB8fCB1bmRlZmluZWR9XCJcblx0XHRcdHZpc2libGU9XCIke3RoaXMudmlzaWJsZX1cIlxuXHRcdFx0bWFjcm9kYXRhOm5hdmlnYXRpb25QYXRoPVwiJHt0aGlzLm5hdmlnYXRpb25QYXRofVwiXG5cdFx0XHRtYWNyb2RhdGE6ZXROYW1lPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldE9iamVjdChcIi4vQHNhcHVpLm5hbWVcIil9XCJcblx0XHRcdG1hY3JvZGF0YTpVaUhpZGRlblByZXNlbnQ9XCIke3RoaXMuaGFzVWlIaWRkZW5Bbm5vdGF0aW9ufVwiXG5cdFx0PlxuXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIiR7dGhpcy50aXRsZX1cIj5cblx0XHRcdFx0PGY6dGl0bGU+XG5cdFx0XHRcdFx0PGNvcmU6VGl0bGUgbGV2ZWw9XCIke3RoaXMudGl0bGVMZXZlbH1cIiB0ZXh0PVwiJHt0aGlzLnRpdGxlfVwiIC8+XG5cdFx0XHRcdDwvZjp0aXRsZT5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLmFjdGlvbnN9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDxmOnRvb2xiYXI+XG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyXG5cdFx0XHRcdFx0XHRcdGlkPVwiJHtvdmVyZmxvd1Rvb2xiYXJJRH1cIlxuXHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0PHRlbXBsYXRlOnJlcGVhdCBsaXN0PVwie2FjdGlvbnM+fVwiIHZhcj1cImFjdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQWN0aW9uQnV0dG9uc1wiIHR5cGU9XCJYTUxcIiAvPlxuXHRcdFx0XHRcdFx0XHQ8L3RlbXBsYXRlOnJlcGVhdD5cblx0XHRcdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdDwvZjp0b29sYmFyPlxuXHRcdFx0XHQ8L3RlbXBsYXRlOnRoZW4+XG5cdFx0XHQ8L3RlbXBsYXRlOmlmPlxuXG5cdFx0XHQ8ZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHQ8bWFjcm9Gb3JtOkZvcm1Db250YWluZXJBUEkgZm9ybUNvbnRhaW5lcklkPVwiJHt0aGlzLmlkfVwiIHNob3dEZXRhaWxzPVwie2ludGVybmFsPnNob3dEZXRhaWxzfVwiIC8+XG5cdFx0XHQ8L2Y6ZGVwZW5kZW50cz5cblxuXHRcdFx0PGY6Zm9ybUVsZW1lbnRzPlxuXHRcdFx0XHQke3RoaXMuZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L2Y6Zm9ybUVsZW1lbnRzPlxuXG5cdFx0PC9mOkZvcm1Db250YWluZXI+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldFRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZGF0YUZpZWxkQ29sbGVjdGlvbj5cIiB2YXI9XCJmb3JtRWxlbWVudHNcIj5cblx0XHRcdFx0JHt0aGlzLmdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbm5lciB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cywgaW5jbHVkaW5nIERhdGFQb2ludCBhbmQgQ29udGFjdCB0ZW1wbGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgaW5uZXIgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHB1YmxpYyBnZXRJbm5lclRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdGxldCBnZXREYXRhUG9pbnRUZW1wbGF0ZSA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICYmIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGFuIGFubm90YXRpb25QYXRoXG5cdFx0XHRjb25zdCBmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGggPSB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24uZmluZCgoZGYpID0+ICEhZGYuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0bGV0IGlkUHJlZml4ID0gXCJcIjtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGVIZWFkZXIgPSB0aGlzLmlkPy5pbmNsdWRlcyhcIkhlYWRlckZhY2V0OjpGb3JtQ29udGFpbmVyXCIpID09PSB0cnVlO1xuXHRcdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0aWYgKGlzRWRpdGFibGVIZWFkZXIpIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0XHRpZFByZWZpeCA9IGAke3RoaXMuaWR9OjpGb3JtRWxlbWVudGA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvblswXS5rZXldKX1gO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0XHRcdGdldERhdGFQb2ludFRlbXBsYXRlID0geG1sYFxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGhcIiB2YXI9XCJtZXRhUGF0aFwiPlxuXHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJ7PSBcXCR7bWV0YVBhdGg+Li9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlbn0gPyAnbm90LWFkYXB0YWJsZS10cmVlJyA6ICAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWUnIH1cIlxuXHRcdFx0XHRcdGJpbmRpbmc9XCJ7PSBGT1JNLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24oXFwke3RoaXMubmF2aWdhdGlvblBhdGh9LFxcJHtjb250ZXh0UGF0aD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD1cInttZXRhUGF0aD5mbi8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWx9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oXFwke2RhdGFGaWVsZD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHQ8bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxmOkNvbHVtbkVsZW1lbnREYXRhIGNlbGxzTGFyZ2U9XCIxMlwiIC8+XG5cdFx0XHRcdFx0PC9sYXlvdXREYXRhPlxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PG1hY3JvOkNvbnRhY3Rcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCJ7bWV0YVBhdGg+QEBDT01NT04uZ2V0TWV0YVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIntjb250ZXh0UGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50JykgPiAtMSB9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdCR7Z2V0RGF0YVBvaW50VGVtcGxhdGV9XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0XHRcdHRlc3Q9XCJ7PSBcXCR7Zm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGh9LmluZGV4T2YoJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdCcpID4gLTEgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke2dldENvbnRhY3RUZW1wbGF0ZX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlaWY+XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHQvLyBDcmVhdGUgYSBzb3J0ZWQgY29weSBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcyBiYXNlZCBvbiB0aGUgcGxhY2Vob2xkZXIgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIHN0cmluZy5cblx0XHQvLyBUaGUgdGVtcGxhdGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sgbGlrZSBcIntGaWVsZEF9IC8ge0ZpZWxkQn1cIiBldGMuIFdlIGV4dHJhY3QgdGhlIHBsYWNlaG9sZGVyXG5cdFx0Ly8gc2VxdWVuY2UgYW5kIHNvcnQgdGhlIGNvbm5lY3RlZCBmaWVsZHMgYWNjb3JkaW5nbHkgKGZhbGxpbmcgYmFjayB0byBvcmlnaW5hbCBvcmRlciBmb3IgdW5tYXRjaGVkIGZpZWxkcykuXG5cdFx0bGV0IHNvcnRlZENvbm5lY3RlZEZpZWxkcyA9IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyA/IFsuLi5mb3JtRWxlbWVudC5jb25uZWN0ZWRGaWVsZHNdIDogW107XG5cdFx0aWYgKHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkc1swXS5vcmlnaW5hbFRlbXBsYXRlIHx8IFwiXCI7XG5cdFx0XHQvLyBFeHRyYWN0IHBsYWNlaG9sZGVycyBpbiB0aGUgc2VxdWVuY2UgZGVmaW5lZCBieSB0aGUgdGVtcGxhdGUgKGUuZy4gXCJ7RmllbGRBfSAvIHtGaWVsZEJ9XCIpXG5cdFx0XHRjb25zdCBwbGFjZWhvbGRlcnMgPSBBcnJheS5mcm9tKHRlbXBsYXRlU3RyaW5nLm1hdGNoQWxsKC9cXHsoW159XSspXFx9L2cpKVxuXHRcdFx0XHQubWFwKChtKSA9PiBTdHJpbmcobVsxXSkudHJpbSgpKVxuXHRcdFx0XHQuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG5cdFx0XHQvLyBIZWxwZXIgdG8gZGVyaXZlIHRoZSBpZGVudGlmaWVyIGZyb20gdGhlIGNvbm5lY3RlZCBmaWVsZCAobGFzdCBzZWdtZW50IG9mIGZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHRcdGNvbnN0IGdldEZpZWxkSWRlbnRpZmllciA9IChjZjogKHR5cGVvZiBzb3J0ZWRDb25uZWN0ZWRGaWVsZHMpW251bWJlcl0pOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE9iamVjdCA9IGNmLm9yaWdpbmFsT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gb3JpZ2luYWxPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhvcmlnaW5hbE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSlcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmaWVsZElkcyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5tYXAoZ2V0RmllbGRJZGVudGlmaWVyKTtcblx0XHRcdGNvbnN0IHVuaXF1ZVBsYWNlaG9sZGVycyA9IG5ldyBTZXQocGxhY2Vob2xkZXJzKTtcblxuXHRcdFx0Ly8gV2Ugb25seSByZW9yZGVyIGlmIHRoZSB0ZW1wbGF0ZSBpcyBwZXJmZWN0bHkgYW5ub3RhdGVkOlxuXHRcdFx0Ly8gMS4gU2FtZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzIGFzIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdC8vIDIuIEFsbCBwbGFjZWhvbGRlcnMgYXJlIHVuaXF1ZVxuXHRcdFx0Ly8gMy4gRXZlcnkgY29ubmVjdGVkIGZpZWxkIGlkIGlzIHJlZmVyZW5jZWQgZXhhY3RseSBvbmNlXG5cdFx0XHRjb25zdCBpc1BlcmZlY3RNYXRjaCA9XG5cdFx0XHRcdHBsYWNlaG9sZGVycy5sZW5ndGggPT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggJiZcblx0XHRcdFx0dW5pcXVlUGxhY2Vob2xkZXJzLnNpemUgPT09IHBsYWNlaG9sZGVycy5sZW5ndGggJiZcblx0XHRcdFx0ZmllbGRJZHMuZXZlcnkoKGlkKSA9PiB1bmlxdWVQbGFjZWhvbGRlcnMuaGFzKGlkKSk7XG5cblx0XHRcdC8vIFJldmlldyBmZWVkYmFjazogRG8gTk9UIFwiZml4XCIgYmFkbHkgYW5ub3RhdGVkIGNvbm5lY3RlZCBmaWVsZHMuXG5cdFx0XHQvLyBJZiB0aGUgYW5ub3RhdGlvbiBpcyBub3QgcGVyZmVjdCwgd2Uga2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuXG5cdFx0XHRpZiAoaXNQZXJmZWN0TWF0Y2gpIHtcblx0XHRcdFx0Y29uc3QgbWFwQnlJZCA9IG5ldyBNYXAoc29ydGVkQ29ubmVjdGVkRmllbGRzLm1hcCgoY2YpID0+IFtnZXRGaWVsZElkZW50aWZpZXIoY2YpLCBjZl0pKTtcblx0XHRcdFx0c29ydGVkQ29ubmVjdGVkRmllbGRzID0gcGxhY2Vob2xkZXJzLm1hcCgocGgpID0+IG1hcEJ5SWQuZ2V0KHBoKSEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29ubmVjdGVkRmllbGQgb2Ygc29ydGVkQ29ubmVjdGVkRmllbGRzKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSBDb21tb25IZWxwZXIuZ2V0RGVsaW1pdGVyKGNvbm5lY3RlZEZpZWxkLm9yaWdpbmFsVGVtcGxhdGUgPz8gXCJcIik7XG5cdFx0XHRjb25zdCBub3RMYXN0SW5kZXhDb25kaXRpb24gPVxuXHRcdFx0XHRzb3J0ZWRDb25uZWN0ZWRGaWVsZHMuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0PyB4bWxgPFRleHRcbnRleHQ9XCIke2RlbGltaXRlcn1cIlxuY2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxud2lkdGg9XCIxMDAlXCJcbi8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG4gICAgICAgICAgICAgICAgPG1hY3JvOkZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG4gICAgICAgICAgICAgICAgICAgIHZoSWRQcmVmaXg9XCIke2NvbXB1dGVkVmhJZFByZWZpeH1cIlxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuICAgICAgICAgICAgICAgICAgICBtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXhMaW5lcz1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVkaXRTdHlsZT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8uZmllbGRFZGl0U3R5bGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hY3JvOmxheW91dERhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCJ7PSAle3VpPi9pc0VkaXRhYmxlfSA/IDEgOiAwfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWFjcm86bGF5b3V0RGF0YT5cbiAgICAgICAgICAgICAgICA8L21hY3JvOkZpZWxkPlxuICAgICAgICAgICAgICAgICR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuICAgICAgICAgICAgICAgIGA7XG5cblx0XHRcdGNvbm5lY3RlZEZpZWxkRWxlbWVudHMgKz0gY29ubmVjdGVkRmllbGRFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT5cblx0XHRcdCAgKVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzKTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0XG5cdFx0XHQ/LiR0YXJnZXQgYXMgQW5ub3RhdGlvblRlcm08Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPjtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHM/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cblx0XHQpPy50b1N0cmluZygpO1xuXG5cdFx0cmV0dXJuIHhtbGBcbiAgICAgICAgICAgIDxmOkZvcm1FbGVtZW50XG4gICAgICAgICAgICAgICAgeG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG4gICAgICAgICAgICAgICAgZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuICAgICAgICAgICAgICAgIGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG4gICAgICAgICAgICAgICAgdmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcbiAgICAgICAgICAgICAgICAke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGY6bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9mOmxhYmVsPlxuICAgICAgICAgICAgICAgIDxmOmZpZWxkcz5cbiAgICAgICAgICAgICAgICAgICAgPGNvbnRyb2xzOkZpZWxkV3JhcHBlciByZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIQm94IHdyYXA9XCJXcmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25uZWN0ZWRGaWVsZEVsZW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9IQm94PlxuICAgICAgICAgICAgICAgICAgICA8L2NvbnRyb2xzOkZpZWxkV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8L2Y6ZmllbGRzPlxuICAgICAgICAgICAgPC9mOkZvcm1FbGVtZW50PlxuICAgICAgICBgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIG11bHRpdmFsdWUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIG11bHRpLXZhbHVlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBmb3JtRWxlbWVudElkID0gdGhpcy5pZCA/IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWAgOiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IG11bHRpVmFsdWVGaWVsZElkID0gdGhpcy5pZFxuXHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXksIFwiTXVsdGlWYWx1ZUZpZWxkXCJdKX1gXG5cdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiBcIlwiO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6bWFjcm9zPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm11bHRpdmFsdWVmaWVsZD1cInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvczpNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHttdWx0aVZhbHVlRmllbGRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7dmhJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG11bHRpdmFsdWVmaWVsZDpGb3JtYXRPcHRpb25zIHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvczpNdWx0aVZhbHVlRmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBmb3JtIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIGNoZWNrYm94IGdyb3VwLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjaGVja2JveCBncm91cCBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0Z2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGxldCBmaWVsZEdyb3VwRWxlbWVudHMgPSBcIlwiO1xuXHRcdC8vV2UgdGVtcGxhdGUgZWFjaCBlbGVtZW50IG9mIHRoZSBjaGVja2JveCBncm91cFxuXHRcdGZvciAoY29uc3QgZ3JvdXBFbGVtZW50IG9mIGZvcm1FbGVtZW50LmZpZWxkR3JvdXBFbGVtZW50cyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBncm91cEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT4oYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJDaGVja0JveEdyb3VwXCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LnBhdGhcblx0XHRcdFx0ICBdKX1gXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgaXNCb29sZWFuRmllbGRHcm91cCA9XG5cdFx0XHRcdChncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGUpPy5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiO1xuXG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRWxlbWVudCA9IGlzQm9vbGVhbkZpZWxkR3JvdXBcblx0XHRcdFx0PyB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgaXNGaWVsZEdyb3VwSXRlbT1cInRydWVcIiB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiIC8+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRgXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0ZmllbGRHcm91cEVsZW1lbnRzICs9IGZpZWxkR3JvdXBFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRsZXQgZmllbGRHcm91cEZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGxldCBsYWJlbElEID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFtcblx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5XG5cdFx0XHRcdF0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cDtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2ZpZWxkR3JvdXBGb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bGFiZWxJRH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjb250cm9sczpSZXF1aXJlZEZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0ID09PSB0cnVlID8gXCJSb3dcIiA6IFwiQ29sdW1uXCJ9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD1cIldyYXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5HYXA9XCIxcmVtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGl0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7ZmllbGRHcm91cEVsZW1lbnRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2l0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYSBmb3JtIGVsZW1lbnQgcmVwcmVzZW50aW5nIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldEZpZWxkRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEFubm90YXRpb25Gb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBjb21wdXRlZFZoSWRQcmVmaXggPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHtjb21wdXRlZFZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke2Zvcm1FbGVtZW50LmFubm90YXRpb25QYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT1cIiR7dGhpcy5vbkNoYW5nZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9XCIke2Zvcm1FbGVtZW50LnJlYWRPbmx5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD1cIiR7Zm9ybUVsZW1lbnQuc2VtYW50aWNPYmplY3R9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dExpbmVzRWRpdD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGVuZ3RoPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZVRpbWVQYXR0ZXJuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5wYXR0ZXJufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW49XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW59XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNybzpGaWVsZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDdXN0b21Gb3JtRWxlbWVudChmb3JtRWxlbWVudDogQ3VzdG9tRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpICsgXCIvXCIgKyBmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGg7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5UGF0aCkpIGFzXG5cdFx0XHR8IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PlxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZW50SWQpIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBmb3JtRWxlbWVudC5pZF0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRLZXkgPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5XSk7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHtmb3JtRWxlbWVudC52aXNpYmxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRLZXk9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZwbTpDdXN0b21GcmFnbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRLZXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROYW1lPVwiJHtmb3JtRWxlbWVudC50ZW1wbGF0ZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbiBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgc2xvdCBjb2x1bW4uXG5cdCAqL1xuXHRnZXRTbG90Q29sdW1uKGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGA8c2xvdCBuYW1lPVwiJHtmb3JtRWxlbWVudC5rZXl9XCIgLz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGRhdGEgZmllbGQgaXMgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNNdWx0aVZhbHVlRGF0YUZpZWxkKGRhdGFGaWVsZDogRm9ybUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRsZXQgaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBmYWxzZTtcblx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdmFsdWVQYXRoID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk/LlZhbHVlPy4kUGF0aDtcblx0XHRcdGlmICh2YWx1ZVBhdGgpIHtcblx0XHRcdFx0aXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBpc011bHRpVmFsdWVGaWVsZChcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYmluZGluZ0NvbnRleHQpLCB2YWx1ZVBhdGgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGFsbCBkYXRhIGZpZWxkcyBmb3IgYW5ub3RhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgZGF0YSBmaWVsZHMuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKTogc3RyaW5nIHtcblx0XHRsZXQgcmV0dXJuU3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5jb25uZWN0ZWRGaWVsZHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEZpZWxkRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDdXN0b21Gb3JtRWxlbWVudChkYXRhRmllbGQgYXMgQ3VzdG9tRm9ybUVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldFNsb3RDb2x1bW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHhtbGAke3JldHVyblN0cmluZ31gO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWpCQSxJQW1CcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBRHRDQyxtQkFBbUIsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZUFBZTtJQUFFQyxTQUFTLEVBQUU7RUFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdsQ0YsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJFLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsV0FBVztFQUM3RSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdETixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHRFAsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJHLFFBQVEsRUFBRSxJQUFJO0lBQ2RELFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURSLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUU7RUFDUCxDQUFD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
832
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInRpdGxlIiwieG1sIiwidGl0bGVMZXZlbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJzb3J0ZWRDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZVN0cmluZyIsIm9yaWdpbmFsVGVtcGxhdGUiLCJwbGFjZWhvbGRlcnMiLCJBcnJheSIsImZyb20iLCJtYXRjaEFsbCIsIm1hcCIsIm0iLCJTdHJpbmciLCJ0cmltIiwiZmlsdGVyIiwicCIsImdldEZpZWxkSWRlbnRpZmllciIsImNmIiwib3JpZ2luYWxPYmplY3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpZWxkSWRzIiwidW5pcXVlUGxhY2Vob2xkZXJzIiwiU2V0IiwiaXNQZXJmZWN0TWF0Y2giLCJzaXplIiwiZXZlcnkiLCJoYXMiLCJtYXBCeUlkIiwiTWFwIiwicGgiLCJnZXQiLCJjb25uZWN0ZWRGaWVsZCIsIm1vZGVsIiwidGVtcE5hbWUiLCJiaW5kaW5nQ29udGV4dCIsImRlbGltaXRlciIsIkNvbW1vbkhlbHBlciIsImdldERlbGltaXRlciIsIm5vdExhc3RJbmRleENvbmRpdGlvbiIsImluZGV4T2YiLCJjb21wdXRlZElkUHJlZml4IiwiVmFsdWUiLCJjb21wdXRlZFZoSWRQcmVmaXgiLCJjb25uZWN0ZWRGaWVsZEVsZW1lbnQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRNYXhMZW5ndGgiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwiZmllbGRFZGl0U3R5bGUiLCJyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0IiwiZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIiwidmlzaWJsZUV4cHJlc3Npb24iLCJpc1BhcnRPZlByZXZpZXciLCJpc1JlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkIiwidG9TdHJpbmciLCJsYWJlbCIsImdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50IiwibXVsdGlWYWx1ZUZpZWxkSWQiLCJ2aElkUHJlZml4IiwiZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50IiwiZmllbGRHcm91cEVsZW1lbnRzIiwiZ3JvdXBFbGVtZW50IiwiZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0IiwiaXNCb29sZWFuRmllbGRHcm91cCIsImZpZWxkR3JvdXBFbGVtZW50IiwiZmllbGRHcm91cEZvcm1FbGVtZW50SWQiLCJsYWJlbElEIiwiZmllbGRHcm91cEhvcml6b250YWxMYXlvdXQiLCJnZXRGaWVsZEZvcm1FbGVtZW50IiwicmVhZE9ubHkiLCJzZW1hbnRpY09iamVjdCIsInBhdHRlcm4iLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIiwiZ2V0Q3VzdG9tRm9ybUVsZW1lbnQiLCJwcm9wZXJ0eVBhdGgiLCJmb3JtRWxlbWVudEtleSIsInRlbXBsYXRlIiwiZ2V0U2xvdENvbHVtbiIsImlzTXVsdGlWYWx1ZURhdGFGaWVsZCIsImRhdGFGaWVsZCIsImlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uIiwidmFsdWVQYXRoIiwiJFBhdGgiLCJpc011bHRpVmFsdWVGaWVsZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicmV0dXJuU3RyaW5nIiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtQ29udGFpbmVyLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnRUeXBlLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YmxvY2tBZ2dyZWdhdGlvbixcblx0YmxvY2tBdHRyaWJ1dGUsXG5cdGJsb2NrRXZlbnQsXG5cdGRlZmluZUJ1aWxkaW5nQmxvY2tcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB7IHhtbCwgdHlwZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCwgQ3VzdG9tRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlESGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCwgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEZvcm1IZWxwZXIgZnJvbSBcIi4vRm9ybUhlbHBlclwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZvcm1Db250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9EYXRhIFY0IG1ldGFkYXRhLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Rm9ybUNvbnRhaW5lclxuICogaWQ9XCJTb21lSWRcIlxuICogZW50aXR5U2V0PVwie2VudGl0eVNldD59XCJcbiAqIGRhdGFGaWVsZENvbGxlY3Rpb24gPVwie2RhdGFGaWVsZENvbGxlY3Rpb24+fVwiXG4gKiB0aXRsZT1cInNvbWVUaXRsZVwiXG4gKiBuYXZpZ2F0aW9uUGF0aD1cIntUb1N1cHBsaWVyfVwiXG4gKiB2aXNpYmxlPXRydWVcbiAqIG9uQ2hhbmdlPVwiLmhhbmRsZXJzLm9uRmllbGRWYWx1ZUNoYW5nZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7IG5hbWU6IFwiRm9ybUNvbnRhaW5lclwiLCBuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvc1wiIH0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtQ29udGFpbmVyQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkPzogc3RyaW5nO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiXG5cdH0pXG5cdGVudGl0eVNldD86IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0bWV0YVBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhRmllbGRDb2xsZWN0aW9uXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRkYXRhRmllbGRDb2xsZWN0aW9uPzogRm9ybUVsZW1lbnRbXTtcblxuXHQvKipcblx0ICogQ29udHJvbCB3aGV0aGVyIHRoZSBmb3JtIGlzIGluIGRpc3BsYXlNb2RlIG9yIG5vdFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkaXNwbGF5TW9kZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaXRsZSBvZiB0aGUgZm9ybSBjb250YWluZXJcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dGl0bGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIFwiYXJpYS1sZXZlbFwiIG9mIHRoZSBmb3JtIHRpdGxlLCB0aXRsZXMgb2YgaW50ZXJuYWxseSB1c2VkIGZvcm0gY29udGFpbmVycyBhcmUgbmVzdGVkIHN1YnNlcXVlbnRseVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzYXAudWkuY29yZS5UaXRsZUxldmVsXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlTGV2ZWwgPSBcIkF1dG9cIjtcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bmF2aWdhdGlvblBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZvcm0gY29udGFpbmVyIHVzaW5nIGFuIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpc2libGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIGhpZGRlbiBhbm5vdGF0aW9uIGlzIHByZXNlbnQgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRoYXNVaUhpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBGbGV4IGRlc2lnbnRpbWUgc2V0dGluZ3MgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRkZXNpZ250aW1lU2V0dGluZ3MgPSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyLmRlc2lnbnRpbWVcIjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cblx0QGJsb2NrQWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtRWxlbWVudFwiIH0pXG5cdGZvcm1FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ29uZmlndXJhYmxlT2JqZWN0PiA9IHt9O1xuXG5cdC8vIEp1c3QgcHJveGllZCBkb3duIHRvIHRoZSBGaWVsZCBtYXkgbmVlZCB0byBzZWUgaWYgbmVlZGVkIG9yIG5vdFxuXHRAYmxvY2tFdmVudCgpXG5cdG9uQ2hhbmdlPzogc3RyaW5nO1xuXG5cdGNvbnRlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Rm9ybUNvbnRhaW5lckJsb2NrPiwgZXh0ZXJuYWxDb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmVudGl0eVNldCA9IHRoaXMuY29udGV4dFBhdGghO1xuXHRcdGlmICh0aGlzLmZvcm1FbGVtZW50cyAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm1FbGVtZW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFJlZmVyZW5jZUZhY2V0Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdGNvbnN0IG1FeHRyYVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0bGV0IG9GYWNldERlZmluaXRpb24gPSBvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCxcblx0XHRcdFx0TGFiZWw6IG9GYWNldERlZmluaXRpb24/LkxhYmVsLFxuXHRcdFx0XHRUYXJnZXQ6IHtcblx0XHRcdFx0XHQkdGFyZ2V0OiBvRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0NvbnRleHRPYmplY3RQYXRoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbm5vdGF0aW9uczoge30sXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHR9IGFzIHVua25vd24gYXMgUmVmZXJlbmNlRmFjZXQ7XG5cdFx0XHRtRXh0cmFTZXR0aW5nc1tvRmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZV0gPSB7IGZpZWxkczogdGhpcy5mb3JtRWxlbWVudHMgfTtcblx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5nZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRvQ29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdC8qdGhpcy5jb250ZXh0UGF0aCovIHVuZGVmaW5lZCxcblx0XHRcdFx0c2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgXCJ0cnVlXCIsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdFx0dGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uID0gb0Zvcm1EZWZpbml0aW9uLmZvcm1Db250YWluZXJzWzBdLmZvcm1FbGVtZW50cztcblx0XHR9XG5cdFx0Ly8gV2UgbmVlZCB0aGUgdmlldyBpZCBmb3IgdGhlIGZvcm0gZWxlbWVudHMgc3RhYmxlIGlkcyBnZW5lcmF0aW9uXG5cdFx0dGhpcy5jb250ZW50SWQgPSBzZXR0aW5ncy52aWV3SWQgYXMgc3RyaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGZvciB0aGUgRm9ybUNvbnRhaW5lci5cblx0ICogQHJldHVybnMgVGhlIFhNTCB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdmVyZmxvd1Rvb2xiYXJJRCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtQWN0aW9uc1Rvb2xiYXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyh0aGlzLmNvbnRleHRQYXRoLCB0aGlzLm1ldGFQYXRoKSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBkYXRhTW9kZWxPYmplY3QpO1xuXG5cdFx0bGV0IHRpdGxlID0gXCJcIjtcblx0XHRpZiAodGhpcy50aXRsZSAmJiB0aGlzLnRpdGxlLmxlbmd0aCA+IDApIHtcblx0XHRcdHRpdGxlID0geG1sYDxmOnRpdGxlPlxuXHRcdFx0XHQ8Y29yZTpUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdDwvZjp0aXRsZT5gO1xuXHRcdH1cblxuXHRcdHJldHVybiB4bWxgXG5cdFx0PGY6Rm9ybUNvbnRhaW5lclxuXHRcdFx0eG1sbnM9XCJzYXAubVwiXG5cdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdHhtbG5zOm1hY3JvPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHR4bWxuczptYWNyb0Zvcm09XCJzYXAuZmUubWFjcm9zLmZvcm1cIlxuXHRcdFx0eG1sbnM6aW50ZXJuYWxNYWNybz1cInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIlxuXHRcdFx0eG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJcblx0XHRcdHhtbG5zOmNvbnRyb2xzPVwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiXG5cdFx0XHR4bWxuczpkdD1cInNhcC51aS5kdFwiXG5cdFx0XHR4bWxuczptYWNyb2RhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCJcblx0XHRcdHhtbG5zOmZwbT1cInNhcC5mZS5tYWNyb3MuZnBtXCJcblx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0dGVtcGxhdGU6cmVxdWlyZT1cIntcblx0XHRcdFx0TU9ERUw6ICdzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlcicsXG5cdFx0XHRcdElEOiAnc2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlcicsXG5cdFx0XHRcdENPTU1PTjogJ3NhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyJyxcblx0XHRcdFx0Rk9STTogJ3NhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtSGVscGVyJyxcblx0XHRcdFx0VUk6ICdzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVycycsXG5cdFx0XHRcdERhdGFGaWVsZDogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YUZpZWxkRm9ybWF0dGVycycsXG5cdFx0XHRcdEZpZWxkVGVtcGxhdGluZzogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nJyxcblx0XHRcdFx0UHJvcGVydHk6ICdzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5Rm9ybWF0dGVycycsXG5cdFx0XHRcdEZJRUxEOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlcicsXG5cdFx0XHRcdE1BQ1JPOiAnc2FwL2ZlL21hY3Jvcy9NYWNyb1RlbXBsYXRpbmcnXG5cdFx0XHR9XCJcblxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0Zvcm1Db250YWluZXJSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1Db250YWluZXJBUEknfVwiXG5cdFx0XHRkdDpkZXNpZ250aW1lPVwiJHt0aGlzLmRlc2lnbnRpbWVTZXR0aW5nc31cIlxuXHRcdFx0aWQ9XCIke3RoaXMuaWQgfHwgdW5kZWZpbmVkfVwiXG5cdFx0XHR2aXNpYmxlPVwiJHt0aGlzLnZpc2libGV9XCJcblx0XHRcdG1hY3JvZGF0YTpuYXZpZ2F0aW9uUGF0aD1cIiR7dGhpcy5uYXZpZ2F0aW9uUGF0aH1cIlxuXHRcdFx0bWFjcm9kYXRhOmV0TmFtZT1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRPYmplY3QoXCIuL0BzYXB1aS5uYW1lXCIpfVwiXG5cdFx0XHRtYWNyb2RhdGE6VWlIaWRkZW5QcmVzZW50PVwiJHt0aGlzLmhhc1VpSGlkZGVuQW5ub3RhdGlvbn1cIlxuXHRcdD5cblxuXHRcdFx0JHt0aXRsZX1cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLmFjdGlvbnN9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDxmOnRvb2xiYXI+XG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyXG5cdFx0XHRcdFx0XHRcdGlkPVwiJHtvdmVyZmxvd1Rvb2xiYXJJRH1cIlxuXHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0PHRlbXBsYXRlOnJlcGVhdCBsaXN0PVwie2FjdGlvbnM+fVwiIHZhcj1cImFjdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQWN0aW9uQnV0dG9uc1wiIHR5cGU9XCJYTUxcIiAvPlxuXHRcdFx0XHRcdFx0XHQ8L3RlbXBsYXRlOnJlcGVhdD5cblx0XHRcdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdDwvZjp0b29sYmFyPlxuXHRcdFx0XHQ8L3RlbXBsYXRlOnRoZW4+XG5cdFx0XHQ8L3RlbXBsYXRlOmlmPlxuXG5cdFx0XHQ8ZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHQ8bWFjcm9Gb3JtOkZvcm1Db250YWluZXJBUEkgZm9ybUNvbnRhaW5lcklkPVwiJHt0aGlzLmlkfVwiIHNob3dEZXRhaWxzPVwie2ludGVybmFsPnNob3dEZXRhaWxzfVwiIC8+XG5cdFx0XHQ8L2Y6ZGVwZW5kZW50cz5cblxuXHRcdFx0PGY6Zm9ybUVsZW1lbnRzPlxuXHRcdFx0XHQke3RoaXMuZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L2Y6Zm9ybUVsZW1lbnRzPlxuXG5cdFx0PC9mOkZvcm1Db250YWluZXI+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldFRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZGF0YUZpZWxkQ29sbGVjdGlvbj5cIiB2YXI9XCJmb3JtRWxlbWVudHNcIj5cblx0XHRcdFx0JHt0aGlzLmdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbm5lciB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cywgaW5jbHVkaW5nIERhdGFQb2ludCBhbmQgQ29udGFjdCB0ZW1wbGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgaW5uZXIgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHB1YmxpYyBnZXRJbm5lclRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdGxldCBnZXREYXRhUG9pbnRUZW1wbGF0ZSA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICYmIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGFuIGFubm90YXRpb25QYXRoXG5cdFx0XHRjb25zdCBmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGggPSB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24uZmluZCgoZGYpID0+ICEhZGYuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0bGV0IGlkUHJlZml4ID0gXCJcIjtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGVIZWFkZXIgPSB0aGlzLmlkPy5pbmNsdWRlcyhcIkhlYWRlckZhY2V0OjpGb3JtQ29udGFpbmVyXCIpID09PSB0cnVlO1xuXHRcdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0aWYgKGlzRWRpdGFibGVIZWFkZXIpIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0XHRpZFByZWZpeCA9IGAke3RoaXMuaWR9OjpGb3JtRWxlbWVudGA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvblswXS5rZXldKX1gO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0XHRcdGdldERhdGFQb2ludFRlbXBsYXRlID0geG1sYFxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGhcIiB2YXI9XCJtZXRhUGF0aFwiPlxuXHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJ7PSBcXCR7bWV0YVBhdGg+Li9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlbn0gPyAnbm90LWFkYXB0YWJsZS10cmVlJyA6ICAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWUnIH1cIlxuXHRcdFx0XHRcdGJpbmRpbmc9XCJ7PSBGT1JNLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24oXFwke3RoaXMubmF2aWdhdGlvblBhdGh9LFxcJHtjb250ZXh0UGF0aD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD1cInttZXRhUGF0aD5mbi8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWx9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oXFwke2RhdGFGaWVsZD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHQ8bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxmOkNvbHVtbkVsZW1lbnREYXRhIGNlbGxzTGFyZ2U9XCIxMlwiIC8+XG5cdFx0XHRcdFx0PC9sYXlvdXREYXRhPlxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PG1hY3JvOkNvbnRhY3Rcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCJ7bWV0YVBhdGg+QEBDT01NT04uZ2V0TWV0YVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIntjb250ZXh0UGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50JykgPiAtMSB9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdCR7Z2V0RGF0YVBvaW50VGVtcGxhdGV9XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0XHRcdHRlc3Q9XCJ7PSBcXCR7Zm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGh9LmluZGV4T2YoJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdCcpID4gLTEgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke2dldENvbnRhY3RUZW1wbGF0ZX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlaWY+XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHQvLyBDcmVhdGUgYSBzb3J0ZWQgY29weSBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcyBiYXNlZCBvbiB0aGUgcGxhY2Vob2xkZXIgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIHN0cmluZy5cblx0XHQvLyBUaGUgdGVtcGxhdGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sgbGlrZSBcIntGaWVsZEF9IC8ge0ZpZWxkQn1cIiBldGMuIFdlIGV4dHJhY3QgdGhlIHBsYWNlaG9sZGVyXG5cdFx0Ly8gc2VxdWVuY2UgYW5kIHNvcnQgdGhlIGNvbm5lY3RlZCBmaWVsZHMgYWNjb3JkaW5nbHkgKGZhbGxpbmcgYmFjayB0byBvcmlnaW5hbCBvcmRlciBmb3IgdW5tYXRjaGVkIGZpZWxkcykuXG5cdFx0bGV0IHNvcnRlZENvbm5lY3RlZEZpZWxkcyA9IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyA/IFsuLi5mb3JtRWxlbWVudC5jb25uZWN0ZWRGaWVsZHNdIDogW107XG5cdFx0aWYgKHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkc1swXS5vcmlnaW5hbFRlbXBsYXRlIHx8IFwiXCI7XG5cdFx0XHQvLyBFeHRyYWN0IHBsYWNlaG9sZGVycyBpbiB0aGUgc2VxdWVuY2UgZGVmaW5lZCBieSB0aGUgdGVtcGxhdGUgKGUuZy4gXCJ7RmllbGRBfSAvIHtGaWVsZEJ9XCIpXG5cdFx0XHRjb25zdCBwbGFjZWhvbGRlcnMgPSBBcnJheS5mcm9tKHRlbXBsYXRlU3RyaW5nLm1hdGNoQWxsKC9cXHsoW159XSspXFx9L2cpKVxuXHRcdFx0XHQubWFwKChtKSA9PiBTdHJpbmcobVsxXSkudHJpbSgpKVxuXHRcdFx0XHQuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG5cdFx0XHQvLyBIZWxwZXIgdG8gZGVyaXZlIHRoZSBpZGVudGlmaWVyIGZyb20gdGhlIGNvbm5lY3RlZCBmaWVsZCAobGFzdCBzZWdtZW50IG9mIGZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHRcdGNvbnN0IGdldEZpZWxkSWRlbnRpZmllciA9IChjZjogKHR5cGVvZiBzb3J0ZWRDb25uZWN0ZWRGaWVsZHMpW251bWJlcl0pOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE9iamVjdCA9IGNmLm9yaWdpbmFsT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gb3JpZ2luYWxPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhvcmlnaW5hbE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSlcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmaWVsZElkcyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5tYXAoZ2V0RmllbGRJZGVudGlmaWVyKTtcblx0XHRcdGNvbnN0IHVuaXF1ZVBsYWNlaG9sZGVycyA9IG5ldyBTZXQocGxhY2Vob2xkZXJzKTtcblxuXHRcdFx0Ly8gV2Ugb25seSByZW9yZGVyIGlmIHRoZSB0ZW1wbGF0ZSBpcyBwZXJmZWN0bHkgYW5ub3RhdGVkOlxuXHRcdFx0Ly8gMS4gU2FtZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzIGFzIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdC8vIDIuIEFsbCBwbGFjZWhvbGRlcnMgYXJlIHVuaXF1ZVxuXHRcdFx0Ly8gMy4gRXZlcnkgY29ubmVjdGVkIGZpZWxkIGlkIGlzIHJlZmVyZW5jZWQgZXhhY3RseSBvbmNlXG5cdFx0XHRjb25zdCBpc1BlcmZlY3RNYXRjaCA9XG5cdFx0XHRcdHBsYWNlaG9sZGVycy5sZW5ndGggPT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggJiZcblx0XHRcdFx0dW5pcXVlUGxhY2Vob2xkZXJzLnNpemUgPT09IHBsYWNlaG9sZGVycy5sZW5ndGggJiZcblx0XHRcdFx0ZmllbGRJZHMuZXZlcnkoKGlkKSA9PiB1bmlxdWVQbGFjZWhvbGRlcnMuaGFzKGlkKSk7XG5cblx0XHRcdC8vIFJldmlldyBmZWVkYmFjazogRG8gTk9UIFwiZml4XCIgYmFkbHkgYW5ub3RhdGVkIGNvbm5lY3RlZCBmaWVsZHMuXG5cdFx0XHQvLyBJZiB0aGUgYW5ub3RhdGlvbiBpcyBub3QgcGVyZmVjdCwgd2Uga2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuXG5cdFx0XHRpZiAoaXNQZXJmZWN0TWF0Y2gpIHtcblx0XHRcdFx0Y29uc3QgbWFwQnlJZCA9IG5ldyBNYXAoc29ydGVkQ29ubmVjdGVkRmllbGRzLm1hcCgoY2YpID0+IFtnZXRGaWVsZElkZW50aWZpZXIoY2YpLCBjZl0pKTtcblx0XHRcdFx0c29ydGVkQ29ubmVjdGVkRmllbGRzID0gcGxhY2Vob2xkZXJzLm1hcCgocGgpID0+IG1hcEJ5SWQuZ2V0KHBoKSEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29ubmVjdGVkRmllbGQgb2Ygc29ydGVkQ29ubmVjdGVkRmllbGRzKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSBDb21tb25IZWxwZXIuZ2V0RGVsaW1pdGVyKGNvbm5lY3RlZEZpZWxkLm9yaWdpbmFsVGVtcGxhdGUgPz8gXCJcIik7XG5cdFx0XHRjb25zdCBub3RMYXN0SW5kZXhDb25kaXRpb24gPVxuXHRcdFx0XHRzb3J0ZWRDb25uZWN0ZWRGaWVsZHMuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0PyB4bWxgPFRleHRcbnRleHQ9XCIke2RlbGltaXRlcn1cIlxuY2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxud2lkdGg9XCIxMDAlXCJcbi8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG4gICAgICAgICAgICAgICAgPG1hY3JvOkZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG4gICAgICAgICAgICAgICAgICAgIHZoSWRQcmVmaXg9XCIke2NvbXB1dGVkVmhJZFByZWZpeH1cIlxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuICAgICAgICAgICAgICAgICAgICBtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXhMaW5lcz1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVkaXRTdHlsZT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8uZmllbGRFZGl0U3R5bGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hY3JvOmxheW91dERhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCJ7PSAle3VpPi9pc0VkaXRhYmxlfSA/IDEgOiAwfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWFjcm86bGF5b3V0RGF0YT5cbiAgICAgICAgICAgICAgICA8L21hY3JvOkZpZWxkPlxuICAgICAgICAgICAgICAgICR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuICAgICAgICAgICAgICAgIGA7XG5cblx0XHRcdGNvbm5lY3RlZEZpZWxkRWxlbWVudHMgKz0gY29ubmVjdGVkRmllbGRFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT5cblx0XHRcdCAgKVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzKTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0XG5cdFx0XHQ/LiR0YXJnZXQgYXMgQW5ub3RhdGlvblRlcm08Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPjtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHM/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cblx0XHQpPy50b1N0cmluZygpO1xuXG5cdFx0cmV0dXJuIHhtbGBcbiAgICAgICAgICAgIDxmOkZvcm1FbGVtZW50XG4gICAgICAgICAgICAgICAgeG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG4gICAgICAgICAgICAgICAgZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuICAgICAgICAgICAgICAgIGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG4gICAgICAgICAgICAgICAgdmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcbiAgICAgICAgICAgICAgICAke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGY6bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9mOmxhYmVsPlxuICAgICAgICAgICAgICAgIDxmOmZpZWxkcz5cbiAgICAgICAgICAgICAgICAgICAgPGNvbnRyb2xzOkZpZWxkV3JhcHBlciByZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIQm94IHdyYXA9XCJXcmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25uZWN0ZWRGaWVsZEVsZW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9IQm94PlxuICAgICAgICAgICAgICAgICAgICA8L2NvbnRyb2xzOkZpZWxkV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8L2Y6ZmllbGRzPlxuICAgICAgICAgICAgPC9mOkZvcm1FbGVtZW50PlxuICAgICAgICBgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIG11bHRpdmFsdWUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIG11bHRpLXZhbHVlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBmb3JtRWxlbWVudElkID0gdGhpcy5pZCA/IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWAgOiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IG11bHRpVmFsdWVGaWVsZElkID0gdGhpcy5pZFxuXHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXksIFwiTXVsdGlWYWx1ZUZpZWxkXCJdKX1gXG5cdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiBcIlwiO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6bWFjcm9zPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm11bHRpdmFsdWVmaWVsZD1cInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvczpNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHttdWx0aVZhbHVlRmllbGRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7dmhJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG11bHRpdmFsdWVmaWVsZDpGb3JtYXRPcHRpb25zIHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvczpNdWx0aVZhbHVlRmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBmb3JtIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIGNoZWNrYm94IGdyb3VwLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjaGVja2JveCBncm91cCBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0Z2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGxldCBmaWVsZEdyb3VwRWxlbWVudHMgPSBcIlwiO1xuXHRcdC8vV2UgdGVtcGxhdGUgZWFjaCBlbGVtZW50IG9mIHRoZSBjaGVja2JveCBncm91cFxuXHRcdGZvciAoY29uc3QgZ3JvdXBFbGVtZW50IG9mIGZvcm1FbGVtZW50LmZpZWxkR3JvdXBFbGVtZW50cyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBncm91cEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT4oYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJDaGVja0JveEdyb3VwXCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LnBhdGhcblx0XHRcdFx0ICBdKX1gXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgaXNCb29sZWFuRmllbGRHcm91cCA9XG5cdFx0XHRcdChncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGUpPy5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiO1xuXG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRWxlbWVudCA9IGlzQm9vbGVhbkZpZWxkR3JvdXBcblx0XHRcdFx0PyB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgaXNGaWVsZEdyb3VwSXRlbT1cInRydWVcIiB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiIC8+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRgXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0ZmllbGRHcm91cEVsZW1lbnRzICs9IGZpZWxkR3JvdXBFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRsZXQgZmllbGRHcm91cEZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGxldCBsYWJlbElEID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFtcblx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5XG5cdFx0XHRcdF0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cDtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2ZpZWxkR3JvdXBGb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bGFiZWxJRH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjb250cm9sczpSZXF1aXJlZEZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0ID09PSB0cnVlID8gXCJSb3dcIiA6IFwiQ29sdW1uXCJ9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD1cIldyYXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5HYXA9XCIxcmVtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGl0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7ZmllbGRHcm91cEVsZW1lbnRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2l0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYSBmb3JtIGVsZW1lbnQgcmVwcmVzZW50aW5nIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldEZpZWxkRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEFubm90YXRpb25Gb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBjb21wdXRlZFZoSWRQcmVmaXggPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHtjb21wdXRlZFZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke2Zvcm1FbGVtZW50LmFubm90YXRpb25QYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT1cIiR7dGhpcy5vbkNoYW5nZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9XCIke2Zvcm1FbGVtZW50LnJlYWRPbmx5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD1cIiR7Zm9ybUVsZW1lbnQuc2VtYW50aWNPYmplY3R9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dExpbmVzRWRpdD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGVuZ3RoPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZVRpbWVQYXR0ZXJuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5wYXR0ZXJufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW49XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW59XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNybzpGaWVsZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDdXN0b21Gb3JtRWxlbWVudChmb3JtRWxlbWVudDogQ3VzdG9tRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpICsgXCIvXCIgKyBmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGg7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5UGF0aCkpIGFzXG5cdFx0XHR8IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PlxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZW50SWQpIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBmb3JtRWxlbWVudC5pZF0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRLZXkgPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5XSk7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50SWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9XCIke2Zvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwidmlzaWJsZVwiLCBmb3JtRWxlbWVudC52aXNpYmxlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvRm9ybTpDdXN0b21Gb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke2Zvcm1FbGVtZW50LnByb3BlcnR5UGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudEtleT1cIiR7Zm9ybUVsZW1lbnRLZXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZnBtOkN1c3RvbUZyYWdtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudEtleX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcmFnbWVudE5hbWU9XCIke2Zvcm1FbGVtZW50LnRlbXBsYXRlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvRm9ybTpDdXN0b21Gb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGZvciBhIHNsb3QgY29sdW1uIGZvciB0aGUgZ2l2ZW4gZm9ybSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBzbG90IGNvbHVtbi5cblx0ICovXG5cdGdldFNsb3RDb2x1bW4oZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRyZXR1cm4geG1sYDxzbG90IG5hbWU9XCIke2Zvcm1FbGVtZW50LmtleX1cIiAvPmA7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBpcyBhIG11bHRpdmFsdWUgZmllbGQuXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gY2hlY2suXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgZmllbGQgaXMgYSBtdWx0aXZhbHVlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRpc011bHRpVmFsdWVEYXRhRmllbGQoZGF0YUZpZWxkOiBGb3JtRWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdGxldCBpc011bHRpVmFsdWVGaWVsZENvbmRpdGlvbiA9IGZhbHNlO1xuXHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZVBhdGggPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKT8uVmFsdWU/LiRQYXRoO1xuXHRcdFx0aWYgKHZhbHVlUGF0aCkge1xuXHRcdFx0XHRpc011bHRpVmFsdWVGaWVsZENvbmRpdGlvbiA9IGlzTXVsdGlWYWx1ZUZpZWxkKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhiaW5kaW5nQ29udGV4dCksIHZhbHVlUGF0aClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb247XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIGRhdGEgZmllbGRzIGZvciBhbm5vdGF0aW9ucy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBkYXRhIGZpZWxkcy5cblx0ICovXG5cdGdldERhdGFGaWVsZHNGb3JBbm5vdGF0aW9ucygpOiBzdHJpbmcge1xuXHRcdGxldCByZXR1cm5TdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGRhdGFGaWVsZCBvZiB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24pIHtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQudHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5jb25uZWN0ZWRGaWVsZHMgJiZcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmNvbm5lY3RlZEZpZWxkcyEubGVuZ3RoID4gMFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldENvbm5lY3RlZEZpZWxkc0Zvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXNNdWx0aVZhbHVlRGF0YUZpZWxkKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0TXVsdGlWYWx1ZUZpZWxkRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMgJiZcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmZpZWxkR3JvdXBFbGVtZW50cyEubGVuZ3RoID4gMFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEZpZWxkR3JvdXBGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0RmllbGRGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEN1c3RvbUZvcm1FbGVtZW50KGRhdGFGaWVsZCBhcyBDdXN0b21Gb3JtRWxlbWVudCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0U2xvdENvbHVtbihkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4geG1sYCR7cmV0dXJuU3RyaW5nfWA7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBakJBLElBbUJxQkEsa0JBQWtCLElBQUFDLElBQUEsR0FEdENDLG1CQUFtQixDQUFDO0lBQUVDLElBQUksRUFBRSxlQUFlO0lBQUVDLFNBQVMsRUFBRTtFQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUV6RUMsY0FBYyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2xDRixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkUsUUFBUSxFQUFFLElBQUk7SUFDZEMsUUFBUSxFQUFFLElBQUk7SUFDZEMsYUFBYSxFQUFFLENBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxXQUFXO0VBQzdFLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0ROLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUdEUCxjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkcsUUFBUSxFQUFFLElBQUk7SUFDZEQsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVB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
@@ -189,6 +189,13 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
189
189
  const dataModelObject = getInvolvedDataModelObjects(this.contextPath, this.metaPath) as DataModelObjectPath<EntitySet> | undefined;
190
190
  const bindingString = FormHelper.generateBindingExpression(this.navigationPath, dataModelObject);
191
191
 
192
+ let title = "";
193
+ if (this.title && this.title.length > 0) {
194
+ title = xml`<f:title>
195
+ <core:Title level="${this.titleLevel}" text="${this.title}" />
196
+ </f:title>`;
197
+ }
198
+
192
199
  return xml`
193
200
  <f:FormContainer
194
201
  xmlns="sap.m"
@@ -224,12 +231,7 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
224
231
  macrodata:UiHiddenPresent="${this.hasUiHiddenAnnotation}"
225
232
  >
226
233
 
227
- <template:if test="${this.title}">
228
- <f:title>
229
- <core:Title level="${this.titleLevel}" text="${this.title}" />
230
- </f:title>
231
- </template:if>
232
-
234
+ ${title}
233
235
  <template:if test="${this.actions}">
234
236
  <template:then>
235
237
  <f:toolbar>
@@ -764,12 +766,13 @@ width="100%"
764
766
  ? "not-adaptable-tree"
765
767
  : "sap/fe/macros/form/FormElement.designtime";
766
768
  const formElementKey = StableIDHelper.generate([this.id, formElement.key]);
769
+
767
770
  return xml`
768
771
  <f:FormElement
769
772
  dt:designtime="${designtime}"
770
773
  id="${formElementId}"
771
774
  label="${formElement.label}"
772
- visible="${formElement.visible}"
775
+ ${this.attr("visible", formElement.visible)}
773
776
  ${this.attr("binding", bindingString)}
774
777
  >
775
778
  <f:fields>