@sapui5/sap.fe.core 1.125.0 → 1.126.1

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 (198) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +4 -4
  5. package/src/sap/fe/core/ReuseComponent.js +172 -0
  6. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  7. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  8. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -1
  9. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -3
  10. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -3
  11. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +2 -1
  12. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +1 -0
  13. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  14. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +2 -2
  15. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +16 -4
  16. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +13 -5
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +16 -10
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +16 -8
  19. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -2
  20. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -0
  21. package/src/sap/fe/core/controllerextensions/InternalRouting.js +6 -3
  22. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +3 -3
  23. package/src/sap/fe/core/controllerextensions/KPIManagement.js +4 -3
  24. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -0
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -3
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +3 -0
  27. package/src/sap/fe/core/controllerextensions/PageReady.js +16 -10
  28. package/src/sap/fe/core/controllerextensions/PageReady.ts +20 -7
  29. package/src/sap/fe/core/controllerextensions/Placeholder.js +11 -5
  30. package/src/sap/fe/core/controllerextensions/Placeholder.ts +14 -0
  31. package/src/sap/fe/core/controllerextensions/Recommendations.js +4 -5
  32. package/src/sap/fe/core/controllerextensions/Recommendations.ts +4 -0
  33. package/src/sap/fe/core/controllerextensions/Routing.js +7 -7
  34. package/src/sap/fe/core/controllerextensions/Routing.ts +6 -4
  35. package/src/sap/fe/core/controllerextensions/Share.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/Share.ts +4 -0
  37. package/src/sap/fe/core/controllerextensions/SideEffects.js +4 -4
  38. package/src/sap/fe/core/controllerextensions/SideEffects.ts +11 -7
  39. package/src/sap/fe/core/controllerextensions/ViewState.js +38 -52
  40. package/src/sap/fe/core/controllerextensions/ViewState.ts +55 -59
  41. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +19 -33
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +21 -35
  45. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +31 -10
  46. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +41 -13
  47. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +17 -1
  49. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  50. package/src/sap/fe/core/controls/CommandExecution.ts +1 -1
  51. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  52. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -2
  53. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  54. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  55. package/src/sap/fe/core/converters/MetaModelConverter.js +5 -5
  56. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -2
  57. package/src/sap/fe/core/converters/annotations/DataField.js +35 -13
  58. package/src/sap/fe/core/converters/annotations/DataField.ts +49 -14
  59. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  60. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  61. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  62. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  63. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +6 -3
  64. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +24 -14
  65. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  66. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  67. package/src/sap/fe/core/converters/controls/Common/KPI.js +2 -2
  68. package/src/sap/fe/core/converters/controls/Common/KPI.ts +1 -1
  69. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -39
  70. package/src/sap/fe/core/converters/controls/Common/Table.ts +164 -43
  71. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +59 -16
  72. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +77 -14
  73. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -0
  75. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  76. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  77. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  78. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  79. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  80. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  81. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  82. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  83. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  84. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  85. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  86. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  87. package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -5
  88. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +4 -3
  89. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  90. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  91. package/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -1
  92. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +1 -0
  93. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  94. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  95. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  96. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  97. package/src/sap/fe/core/fpm/manifest.json +1 -1
  98. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  99. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  100. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  101. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  102. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  103. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  104. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  105. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  106. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  107. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  108. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  109. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  110. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  111. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  112. package/src/sap/fe/core/library.js +1 -1
  113. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  114. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  115. package/src/sap/fe/core/messagebundle.properties +6 -55
  116. package/src/sap/fe/core/messagebundle_ar.properties +1 -1
  117. package/src/sap/fe/core/messagebundle_bg.properties +1 -1
  118. package/src/sap/fe/core/messagebundle_ca.properties +1 -1
  119. package/src/sap/fe/core/messagebundle_cnr.properties +1 -1
  120. package/src/sap/fe/core/messagebundle_cs.properties +1 -1
  121. package/src/sap/fe/core/messagebundle_cy.properties +2 -2
  122. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  123. package/src/sap/fe/core/messagebundle_de.properties +1 -1
  124. package/src/sap/fe/core/messagebundle_el.properties +1 -1
  125. package/src/sap/fe/core/messagebundle_en.properties +4 -55
  126. package/src/sap/fe/core/messagebundle_en_GB.properties +1 -1
  127. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -35
  128. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  129. package/src/sap/fe/core/messagebundle_es_MX.properties +1 -1
  130. package/src/sap/fe/core/messagebundle_et.properties +1 -1
  131. package/src/sap/fe/core/messagebundle_fi.properties +1 -1
  132. package/src/sap/fe/core/messagebundle_fr.properties +1 -1
  133. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -2
  134. package/src/sap/fe/core/messagebundle_hi.properties +1 -1
  135. package/src/sap/fe/core/messagebundle_hr.properties +1 -1
  136. package/src/sap/fe/core/messagebundle_hu.properties +1 -1
  137. package/src/sap/fe/core/messagebundle_id.properties +1 -1
  138. package/src/sap/fe/core/messagebundle_it.properties +1 -1
  139. package/src/sap/fe/core/messagebundle_iw.properties +2 -2
  140. package/src/sap/fe/core/messagebundle_ja.properties +1 -1
  141. package/src/sap/fe/core/messagebundle_kk.properties +1 -1
  142. package/src/sap/fe/core/messagebundle_ko.properties +1 -1
  143. package/src/sap/fe/core/messagebundle_lt.properties +1 -1
  144. package/src/sap/fe/core/messagebundle_lv.properties +1 -1
  145. package/src/sap/fe/core/messagebundle_mk.properties +1 -1
  146. package/src/sap/fe/core/messagebundle_ms.properties +1 -1
  147. package/src/sap/fe/core/messagebundle_nl.properties +1 -1
  148. package/src/sap/fe/core/messagebundle_no.properties +1 -1
  149. package/src/sap/fe/core/messagebundle_pl.properties +1 -1
  150. package/src/sap/fe/core/messagebundle_pt.properties +1 -1
  151. package/src/sap/fe/core/messagebundle_pt_PT.properties +1 -1
  152. package/src/sap/fe/core/messagebundle_ro.properties +1 -1
  153. package/src/sap/fe/core/messagebundle_ru.properties +1 -1
  154. package/src/sap/fe/core/messagebundle_sh.properties +1 -1
  155. package/src/sap/fe/core/messagebundle_sk.properties +1 -1
  156. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  157. package/src/sap/fe/core/messagebundle_sr.properties +1 -1
  158. package/src/sap/fe/core/messagebundle_sv.properties +1 -1
  159. package/src/sap/fe/core/messagebundle_th.properties +1 -1
  160. package/src/sap/fe/core/messagebundle_tr.properties +1 -1
  161. package/src/sap/fe/core/messagebundle_uk.properties +1 -1
  162. package/src/sap/fe/core/messagebundle_vi.properties +1 -1
  163. package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
  164. package/src/sap/fe/core/messagebundle_zh_TW.properties +1 -1
  165. package/src/sap/fe/core/rootView/RootViewBaseController.js +67 -49
  166. package/src/sap/fe/core/rootView/RootViewBaseController.ts +67 -55
  167. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  168. package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -1
  169. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  170. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  171. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -8
  172. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +15 -9
  173. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  174. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  175. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  176. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  177. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  178. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  179. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  180. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  181. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  182. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  183. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  184. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  185. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  186. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  187. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  188. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  189. package/src/sap/fe/core/templating/UIFormatters.js +23 -15
  190. package/src/sap/fe/core/templating/UIFormatters.ts +32 -20
  191. package/src/sap/fe/core/type/InputMask.js +124 -0
  192. package/src/sap/fe/core/type/InputMask.ts +131 -0
  193. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  194. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -118
  195. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  196. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  197. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1801
  198. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2443
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.125.0",
3
+ "version": "1.126.1",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.125.0</version>
9
+ <version>1.126.1</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/ActionHelper", "sap/ui/core/Messaging", "sap/ui/core/library", "sap/ui/core/message/Message", "./controls/AnyElement", "./converters/ConverterContext", "./converters/MetaModelConverter", "./converters/objectPage/HeaderAndFooterAction"], function (Log, merge, CommonUtils, Any, BindingToolkit, ModelHelper, TypeGuards, ActionHelper, Messaging, library, Message, AnyElement, ConverterContext, MetaModelConverter, HeaderAndFooterAction) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/ActionHelper", "sap/ui/core/Messaging", "sap/ui/core/library", "sap/ui/core/message/Message", "./controls/AnyElement", "./converters/ConverterContext", "./converters/MetaModelConverter", "./converters/objectPage/HeaderAndFooterAction"], function (Log, merge, BindingToolkit, CommonUtils, Any, ModelHelper, TypeGuards, ActionHelper, Messaging, library, Message, AnyElement, ConverterContext, MetaModelConverter, HeaderAndFooterAction) {
6
6
  "use strict";
7
7
 
8
8
  var getHiddenExpression = HeaderAndFooterAction.getHiddenExpression;
@@ -325,4 +325,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
325
325
  };
326
326
  return ActionRuntime;
327
327
  }, false);
328
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiaGFzRXJyb3IiLCJnZXRWYWx1ZVN0YXRlIiwiZm9jdXMiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwic0NvbnRyb2wiLCJmb3JDb250ZXh0TWVudSIsImFQcm9taXNlcyIsInNBY3Rpb24iLCJhUmVxdWVzdFByb21pc2VzIiwic2V0UHJvcGVydHkiLCJzUHJvcGVydHkiLCJlbGVtZW50Iiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImdldE9iamVjdCIsIl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJjdXN0b21EYXRhIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsImF0dGFjaENoYW5nZSIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwibWV0YU1vZGVsIiwiY29udGV4dHMiLCJpc0FjdGlvbkNyaXRpY2FsVmFsdWUiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImFjdGlvblRhcmdldFJlc29sdXRpb24iLCJyZXNvbHZlUGF0aCIsImFjdGlvblRhcmdldCIsImlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwicmVzb2x2ZSIsImFueU9iamVjdCIsIkFueSIsImFueUJvb2xlYW4iLCJzZXRNb2RlbCIsImJvb2xlYW5CaW5kaW5nIiwiZm5DaGFuZ2UiLCJ2YWx1ZUV4dCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudE9uY2UiLCJlcnIiLCJTdHJpbmciLCJMb2ciLCJlcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiBhcyBFZG1BY3Rpb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBfUmVxdWVzdGVkUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUNvbnN0YW50LCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBpc0NvbnN0YW50LCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdEJ1dHRvbkVuYWJsZWQsIGdldEhpZGRlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL29iamVjdFBhZ2UvSGVhZGVyQW5kRm9vdGVyQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblBhcmFtZXRlckluZm8gPSB7XG5cdHBhcmFtZXRlcjogdW5rbm93bjtcblx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdHZhbHVlPzogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUgPyBcIml0ZW1zXCIgOiBcInZhbHVlXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpID8/IHVuZGVmaW5lZCwgLy8gZ2V0TW9kZWwoKTogbnVsbCB8IE1vZGVsIH5+PiBwcm9jZXNzb3I/OiBNZXNzYWdlUHJvY2Vzc29yXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkSWQgPSByZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gY29udHJvbElkLmluY2x1ZGVzKGZpZWxkSWQpKVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxldmFudE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0XHRpZiAoaXNGaWVsZEFycmF5KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBmaXJzdCB2YWx1ZSBjaGVjayBpcyBlbm91Z2ggYXMgdGhlIGZpZWxkIHZhbHVlIGNvbWVzIG9uIFswXSByZXN0IG9mIHRoZSBhcnJheSBpbmNsdWRlcyBjdXJyZW5jeSBhbmQgY3VycmVuY3kgY29kZVxuXHRcdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlWzBdID09PSBudWxsIHx8IGZpZWxkVmFsdWVbMF0gPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogTWVzc2FnZSBmb3IgbWlzc2luZyBtYW5kYXRvcnkgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgKi9cblx0XHRpZiAoZW1wdHlSZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyAqL1xuXHRcdGNvbnN0IGZpcnN0SW52YWxpZFBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVySW5mbykgPT5cblx0XHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciB8fCBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiIHx8IGVtcHR5UmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMocGFyYW1ldGVySW5mbylcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFjdGlvbiBlbmFibGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IG1vZGVsXG5cdCAqIEBwYXJhbSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIE1hcCBjb250YWluaW5nIHRoZSBvcGVyYXRpb24gYXZhaWxhYmlsaXR5IG9mIGFjdGlvbnNcblx0ICogQHBhcmFtIGFTZWxlY3RlZENvbnRleHRzIEFycmF5IGNvbnRhaW5pbmcgc2VsZWN0ZWQgY29udGV4dHMgb2YgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBzQ29udHJvbCBDb250cm9sIG5hbWVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIGVuYWJsZW1lbnQgcHJvbWlzZXNcblx0ICovXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFx0YVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkW10+IHtcblx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKGZvckNvbnRleHRNZW51ICYmIHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZEZvckNvbnRleHRNZW51YCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aWYgKCFhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBbXSwgZm9yQ29udGV4dE1lbnUpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggJiYgdHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8vIFdoZW4gYWxsIHByb3BlcnR5IHZhbHVlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCBzZXRcblx0XHRcdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcywgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChcblx0XHRvVmlldzogVmlldyxcblx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhID0gb0ludGVybmFsTW9kZWxDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb25zdCBvQ29udHJvbHMgPSAob0ludGVybmFsTW9kZWxDb250ZXh0RGF0YT8uY29udHJvbHMgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHsgY29udHJvbElkPzogc3RyaW5nIH0+O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGUgPSBvVmlldy5ieUlkKHNLZXkpO1xuXHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKG9UYWJsZS5kYXRhKFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpLmN1c3RvbURhdGEpLFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQob1ZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyk/LnZpZXdMZXZlbCxcblx0XHRcdGlzRWRpdGFibGUgPSBvVmlldy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGlmICgoaVZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSAmJiBpc0VkaXRhYmxlICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gTW9kZWxIZWxwZXIuZ2V0Um9vdEVudGl0eVNldFBhdGgoc01ldGFQYXRoKTtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb0NvbnRleHRcblx0XHRcdFx0Py5nZXRNb2RlbCgpXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ/LmdldENvbnRleHQob0NvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0XHRzRW50aXR5U2V0LFxuXHRcdFx0XHRtZXRhQ29udGV4dCxcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0XHRtZXJnZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRsZXQgdXBkYXRlSGlkZGVuO1xuXHRcdFx0Ly9GaW5kIHRoZSBVcGRhdGUgSGlkZGVuIG9mIHRoZSByb290IGVudGl0eSBzZXQgYW5kIGJpbmQgdGhlIHByb3BlcnR5IHRvIEFueUVsZW1lbnQsIGFueSBjaGFuZ2VzIGluIHRoZSBwYXRoIG9mIHRoZSByb290IFVwZGF0ZUhpZGRlbiB3aWxsIGJlIHVwZGF0ZWQgdmlhIHRoZSBwcm9wZXJ0eSwgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpcyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eVxuXHRcdFx0Y29uc3QgYlVwZGF0ZUhpZGRlbiA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdGlmIChiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0XHRcdHVwZGF0ZUhpZGRlbiA9IE1vZGVsSGVscGVyLmlzVXBkYXRlSGlkZGVuKGVudGl0eVNldCwgZW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0XHQvL0ZpbmQgdGhlIG9wZXJhdGlvbiBhdmFpbGFibGUgcHJvcGVydHkgb2YgdGhlIHJvb3QgZWRpdCBjb25maWd1cmF0aW9uIGFuZCBmZXRjaCB0aGUgcHJvcGVydHkgdXNpbmcgQW55RWxlbWVudFxuXHRcdFx0Y29uc3Qgc0VkaXRFbmFibGVCaW5kaW5nID0gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzU3RpY2t5Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXRTdGlja3lSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IGRyYWZ0Um9vdFBhdGggfHwgc1N0aWNreVJvb3RQYXRoO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChzUGF0aCkge1xuXHRcdFx0XHRjb25zdCBvUm9vdENvbnRleHQgPSBvVmlldy5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KHNQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0aWYgKHVwZGF0ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0hpZGRlbkV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRIaWRkZW5FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbiksIGZhbHNlKSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFZGl0TW9kZWxDb250ZXh0KHNIaWRkZW5FeHByZXNzaW9uLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0VmlzaWJsZVwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzRWRpdEVuYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0VkaXRFbmFibGVCaW5kaW5nLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0RW5hYmxlZFwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUVkaXRNb2RlbENvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRzQmluZGluZ0V4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVmlldzogVmlldyxcblx0XHRvUm9vdENvbnRleHQ6IENvbnRleHQsXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRpZiAoc0JpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBvSGlkZGVuRWxlbWVudCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogc0JpbmRpbmdFeHByZXNzaW9uIH0pO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHRvVmlldy5hZGREZXBlbmRlbnQob0hpZGRlbkVsZW1lbnQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuZ2V0QmluZGluZyhcImFueVRleHRcIik7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9IaWRkZW5FbGVtZW50XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdD8uYmluZENvbnRleHQob1Jvb3RDb250ZXh0LmdldFBhdGgoKSwgb1Jvb3RDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KVxuXHRcdFx0XHQ/LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQ/LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpPy5hdHRhY2hDaGFuZ2UoKG9FdmVudDogRXZlbnQ8e30sIFByb3BlcnR5QmluZGluZz4pID0+IHtcblx0XHRcdFx0Y29uc3Qgb05ld1ZhbHVlID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNQcm9wZXJ0eSwgb05ld1ZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlOiBmdW5jdGlvbiAoXG5cdFx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdIHtcblx0XHQvLyBSZXRyaWV2ZSBwcmV2aW91c2x5IGNoZWNrZWQgY29udGV4dHMgaW4gY2FzZSBvZiAhZm9yQ29udGV4dE1lbnVcblx0XHRjb25zdCBzRW5hYmxlbWVudEZpZWxkTmFtZSA9IGZvckNvbnRleHRNZW51ID8gXCJiRW5hYmxlZEZvckNvbnRleHRNZW51XCIgOiBcImJFbmFibGVkXCIsXG5cdFx0XHRhQXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCkgfHwgW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCkgfHwgW107XG5cdFx0bGV0IGJBY3Rpb25FbmFibGVkOiBib29sZWFuID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259LyR7c0VuYWJsZW1lbnRGaWVsZE5hbWV9YCkgfHwgZmFsc2U7XG5cblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdC8vIERvIG5vdCBjaGFuZ2UgZW5hYmxlZCwgYUFwcGxpY2FibGUgYW5kIGFOb3RBcHBsaWNhYmxlIHByb3BlcnR5IGluIGNhc2Ugb2YgY29udGV4dCBtZW51IGNhbGN1bGF0aW9uXG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY29udGV4dCBtZW51LCBvbmx5IHRoZSBjbGlja2VkIGNvbnRleHQgZ29lcyBpbnRvIHRoZSBwcm9jZXNzaW5nIC0gb3RoZXIgc2VsZWN0ZWQgY29udGV4dHMgbXVzdCBiZSBrZXB0IGluIHRoZSBtb2RlbFxuXHRcdFx0XHRiRW5hYmxlZDogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkYCksXG5cdFx0XHRcdGFBcHBsaWNhYmxlOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWApLFxuXHRcdFx0XHRiRW5hYmxlZEZvckNvbnRleHRNZW51OiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gTm90ZSB0aGF0IG5vbiBkeW5hbWljIGFjdGlvbnMgYXJlIG5vdCBwcm9jZXNzZWQgaGVyZS4gVGhleSBhcmUgZW5hYmxlZCBiZWNhdXNlXG5cdFx0Ly8gb25lIG9yIG1vcmUgYXJlIHNlbGVjdGVkIGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGUgdGVtcGxhdGluZ1xuXHRcdC8vIGlzIHRoZW4gdW5kZWZpbmVkIGFuZCB0aHVzIHRoZSBidXR0b24gdGFrZXMgdGhlIGRlZmF1bHQgZW5hYmxpbmcsIHdoaWNoIGlzIHRydWUhXG5cdFx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gO1xuXG5cdFx0aWYgKHR5cGVvZiBzUHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgc1Byb3BlcnR5ICE9PSBudWxsICYmIHNQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKG9CaW5kaW5nRXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHREYXRhID8gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSkgOiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHNSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbihvVHJhbnNmb3JtZWRCaW5kaW5nKTtcblx0XHRcdFx0YkFjdGlvbkVuYWJsZWQgPSBiQWN0aW9uRW5hYmxlZCB8fCBzUmVzdWx0ID09PSBcInRydWVcIjtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgYkFjdGlvbkVuYWJsZWQpO1xuXHRcdFx0XHQoc1Jlc3VsdCA9PT0gXCJ0cnVlXCIgPyBhQXBwbGljYWJsZSA6IGFOb3RBcHBsaWNhYmxlKS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkge1xuXHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAob1NlbGVjdGVkQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIENvbGxlY3QgcHJvbWlzZXMgdG8gcmV0cmlldmUgc2luZ2xldG9uIG9yIG5vcm1hbCBwcm9wZXJ0eSB2YWx1ZSBhc3luY2hyb25vdXNseVxuXHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goQ29tbW9uVXRpbHMucmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQsIHNBY3Rpb24sIHNQcm9wZXJ0eSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYVJlcXVlc3RQcm9taXNlcztcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWN0aW9uIGlzIGNyaXRpY2FsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGluIGNhc2Ugb2YgYm91bmQgYWN0aW9ucy5cblx0ICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGFjdGlvbiBpcyBjcml0aWNhbFxuXHQgKi9cblx0Z2V0SXNBY3Rpb25Dcml0aWNhbDogYXN5bmMgZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHBhdGg6IHN0cmluZywgY29udGV4dHM6IENvbnRleHRbXSA9IFtdKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gZGVmYXVsdCBpcyB0cnVlLlxuXHRcdGxldCBpc0FjdGlvbkNyaXRpY2FsVmFsdWU6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0XHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldFJlc29sdXRpb24gPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxFZG1BY3Rpb24+KHBhdGgpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGFjdGlvblRhcmdldFJlc29sdXRpb24udGFyZ2V0O1xuXHRcdGlmICghYWN0aW9uVGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gaXNBY3Rpb25Dcml0aWNhbFZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwID0gZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24oYWN0aW9uVGFyZ2V0LCBjb252ZXJ0ZWRUeXBlcyk7XG5cblx0XHRpZiAoaXNDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkpIHtcblx0XHRcdC8vIENvbnN0YW50IGV4cHJlc3Npb24gcmVzb2x2ZXMgdG8gXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLiBCdXQsIHdlIG5lZWQgYm9vbGVhbi5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IGNvbXBpbGVDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSkgYXMgYm9vbGVhbjtcblx0XHR9IGVsc2UgaWYgKGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIGV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiB2aWEgYSBVSTUgbWFuYWdlZCBvYmplY3QgaW5zdGFuY2UuXG5cdFx0XHRpc0FjdGlvbkNyaXRpY2FsVmFsdWUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIENyZWF0aW5nIEJpbmRpbmcgdG8gcmVzb2x2ZVxuXHRcdFx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnlCb29sZWFuOiBjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkgfSk7XG5cdFx0XHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKGNvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXG5cdFx0XHRcdFx0Ly8gQXR0YWNoaW5nIGNoYW5nZSBldmVudHNcblx0XHRcdFx0XHRjb25zdCBib29sZWFuQmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmc7XG5cdFx0XHRcdFx0Y29uc3QgZm5DaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUV4dCA9IGJvb2xlYW5CaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHZhbHVlRXh0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJvb2xlYW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmbkNoYW5nZSk7XG5cblx0XHRcdFx0XHQvLyBzZXR0aW5nIGJpbmRpbmcgY29udGV4dCB0byB0cmlnZ2VyIHRoZSBiaW5kaW5nIHJlc29sdXRpb25cblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dHNbMF0pO1xuXHRcdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0XHQvLyBlcnJvciB3aGlsZSBjcmVhdGluZyBvciByZXNvbHZpbmcgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRkUgOiBBY3Rpb25zIDogRXJyb3Igd2hpbGUgcmVzb2x2aW5nIElzQWN0aW9uQ3JpdGljYWwgZm9yICR7cGF0aH0gOiAke21lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0Ly8gT24gdGhlIHNhZmUgc2lkZSwgd2Ugc2hhbGwgcmV0dXJuIGFjdGlvbiBpcyBjcml0aWNhbCBpZiB2YWx1ZSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkLlxuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBLE1BQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDZCQUE2QixFQUFFLFVBQVVDLGlCQUFrRixFQUFRO01BQ2xJQyxTQUFTLENBQUNDLFdBQVcsQ0FDcEJGLGlCQUFpQixDQUFDRyxHQUFHLENBQUVDLGdCQUFnQixJQUFLO1FBQzNDLE1BQU1DLE9BQU8sR0FBR0QsZ0JBQWdCLENBQUNFLG1CQUFtQixDQUFDQyxLQUFLLENBQUNDLFVBQVUsQ0FDcEVKLGdCQUFnQixDQUFDRSxtQkFBbUIsQ0FBQ0csWUFBWSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQ3JFO1FBQ0QsT0FBTyxJQUFJQyxPQUFPLENBQUM7VUFDbEJDLE9BQU8sRUFBRVAsZ0JBQWdCLENBQUNPLE9BQU87VUFDakNDLElBQUksRUFBRUMsV0FBVyxDQUFDQyxLQUFLO1VBQ3ZCQyxTQUFTLEVBQUUsQ0FBQVYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVXLFFBQVEsRUFBRSxLQUFJQyxTQUFT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
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiaGFzRXJyb3IiLCJnZXRWYWx1ZVN0YXRlIiwiZm9jdXMiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwic0NvbnRyb2wiLCJmb3JDb250ZXh0TWVudSIsImFQcm9taXNlcyIsInNBY3Rpb24iLCJhUmVxdWVzdFByb21pc2VzIiwic2V0UHJvcGVydHkiLCJzUHJvcGVydHkiLCJlbGVtZW50Iiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImdldE9iamVjdCIsIl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJjdXN0b21EYXRhIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsImF0dGFjaENoYW5nZSIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwibWV0YU1vZGVsIiwiY29udGV4dHMiLCJpc0FjdGlvbkNyaXRpY2FsVmFsdWUiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImFjdGlvblRhcmdldFJlc29sdXRpb24iLCJyZXNvbHZlUGF0aCIsImFjdGlvblRhcmdldCIsImlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwicmVzb2x2ZSIsImFueU9iamVjdCIsIkFueSIsImFueUJvb2xlYW4iLCJzZXRNb2RlbCIsImJvb2xlYW5CaW5kaW5nIiwiZm5DaGFuZ2UiLCJ2YWx1ZUV4dCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudE9uY2UiLCJlcnIiLCJTdHJpbmciLCJMb2ciLCJlcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiBhcyBFZG1BY3Rpb24sIEFjdGlvblBhcmFtZXRlciBhcyBFZG1BY3Rpb25QYXJhbWV0ZXIsIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUNvbnN0YW50LCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBpc0NvbnN0YW50LCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgX1JlcXVlc3RlZFByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQW55IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9BbnlcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldElzQWN0aW9uQ3JpdGljYWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0QnV0dG9uRW5hYmxlZCwgZ2V0SGlkZGVuRXhwcmVzc2lvbiB9IGZyb20gXCIuL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0cGFyYW1ldGVyPzogRWRtQWN0aW9uUGFyYW1ldGVyO1xuXHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdGlzTXVsdGlWYWx1ZTogYm9vbGVhbjtcblx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG5cdHZhbGlkYXRpb25Qcm9taXNlPzogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+O1xuXHRoYXNFcnJvcjogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEFjdGlvblJ1bnRpbWUgPSB7XG5cdC8qKlxuXHQgKiBBZGRzIGVycm9yIG1lc3NhZ2VzIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyIGZpZWxkIHRvIHRoZSBtZXNzYWdlIG1hbmFnZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXNzYWdlUGFyYW1ldGVycyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyIGFuZCBtZXNzYWdlcyByZWZlcnJpbmcgdG8gdGhpcyBwYXJhbWV0ZXJcblx0ICovXG5cdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyOiBmdW5jdGlvbiAobWVzc2FnZVBhcmFtZXRlcnM6IHsgYWN0aW9uUGFyYW1ldGVySW5mbzogQWN0aW9uUGFyYW1ldGVySW5mbzsgbWVzc2FnZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXJzLm1hcCgobWVzc2FnZVBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gbWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldEJpbmRpbmcoXG5cdFx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSA/IFwiaXRlbXNcIiA6IFwidmFsdWVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2VQYXJhbWV0ZXIubWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRwcm9jZXNzb3I6IGJpbmRpbmc/LmdldE1vZGVsKCkgPz8gdW5kZWZpbmVkLCAvLyBnZXRNb2RlbCgpOiBudWxsIHwgTW9kZWwgfn4+IHByb2Nlc3Nvcj86IE1lc3NhZ2VQcm9jZXNzb3Jcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdHRhcmdldDogYmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhbGwgcmVxdWlyZWQgYWN0aW9uIHBhcmFtZXRlcnMgY29udGFpbiBkYXRhIGFuZCBjaGVja3MgZm9yIGFsbCBhY3Rpb24gcGFyYW1ldGVycyBpZiB0aGVcblx0ICogY29udGFpbmVkIGRhdGEgaXMgdmFsaWQuXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSBhY3Rpb25QYXJhbWV0ZXJJbmZvcyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHJlc3VsdCBjYW4gYmUgdHJ1ZSBvciBmYWxzZVxuXHQgKi9cblx0dmFsaWRhdGVQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAoYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zLm1hcChcblx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pOiBQcm9taXNlPHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT4gfCB1bmRlZmluZWQgPT4gYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRjb25zdCByZXF1aXJlZFBhcmFtZXRlckluZm9zID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmlsdGVyKChwYXJhbWV0ZXJJbmZvKSA9PiBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFJlcXVpcmVkKCkpO1xuXHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBlbXB0eVJlcXVpcmVkRmllbGRzID0gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcy5maWx0ZXIoKHJlcXVpcmVkUGFyYW1ldGVySW5mbykgPT4ge1xuXHRcdFx0Y29uc3QgZmllbGRJZCA9IHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZC5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IGFsbE1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBjb250cm9sSWQuaW5jbHVkZXMoZmllbGRJZCkpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGV2YW50TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKHJlcXVpcmVkUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICFyZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGRWYWx1ZSA9IChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGNvbnN0IGlzRmllbGRBcnJheSA9IEFycmF5LmlzQXJyYXkoKHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKSk7XG5cdFx0XHRcdGlmIChpc0ZpZWxkQXJyYXkpIHtcblx0XHRcdFx0XHQvLyBvbmx5IGZpcnN0IHZhbHVlIGNoZWNrIGlzIGVub3VnaCBhcyB0aGUgZmllbGQgdmFsdWUgY29tZXMgb24gWzBdIHJlc3Qgb2YgdGhlIGFycmF5IGluY2x1ZGVzIGN1cnJlbmN5IGFuZCBjdXJyZW5jeSBjb2RlXG5cdFx0XHRcdFx0Ly8gYm90aCBvZiB3aGljaCBjYW4gb3IgY2Fubm90IGJlIG51bGwsIHNvIHdlIHNoYWxsIGNoZWNrIG9ubHkgdGhlIGZpZWxkIHZhbHVlXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWVbMF0gPT09IG51bGwgfHwgZmllbGRWYWx1ZVswXSA9PT0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkVmFsdWUgPT09IG51bGwgfHwgZmllbGRWYWx1ZSA9PT0gXCJcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvKiBNZXNzYWdlIGZvciBtaXNzaW5nIG1hbmRhdG9yeSB2YWx1ZSBvZiB0aGUgYWN0aW9uIHBhcmFtZXRlciAqL1xuXHRcdGlmIChlbXB0eVJlcXVpcmVkRmllbGRzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihcblx0XHRcdFx0ZW1wdHlSZXF1aXJlZEZpZWxkcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+ICh7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUlTU0lOR19NQU5EQVRPUllfTVNHXCIsIFtcblx0XHRcdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFBhcmVudCgpPy5nZXRBZ2dyZWdhdGlvbihcImxhYmVsXCIpIGFzIExhYmVsKS5nZXRUZXh0KClcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHR9KSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8qIENoZWNrIHZhbHVlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzICovXG5cdFx0Y29uc3QgZmlyc3RJbnZhbGlkUGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdChwYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yIHx8IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCIgfHwgZW1wdHlSZXF1aXJlZEZpZWxkcy5pbmNsdWRlcyhwYXJhbWV0ZXJJbmZvKVxuXHRcdCk7XG5cdFx0aWYgKGZpcnN0SW52YWxpZFBhcmFtZXRlcikge1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gZW5hYmxlbWVudCBwcm9taXNlc1xuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdHNDb250cm9sOiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWRbXT4ge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10gPSBbXTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCBmYWxzZSk7XG5cdFx0XHRpZiAoZm9yQ29udGV4dE1lbnUgJiYgc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWAsIFtdKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnVgLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwW3NBY3Rpb25dO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBlbGVtZW50O1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdFx0aWYgKHNDb250cm9sID09PSBcImNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGlmICgoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB8fCBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzID0gdGhpcy5fc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlKFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdLCBmb3JDb250ZXh0TWVudSkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCAmJiB0eXBlb2Ygc1Byb3BlcnR5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0XHRcdC8vIFRoZSBhcHBsaWNhYmxlIGFuZCBub3QtYXBwbGljYWJsZSBzZWxlY3RlZCBjb250ZXh0cyBmb3IgZWFjaCBhY3Rpb24gYW5kXG5cdFx0XHRcdFx0Ly8gVGhlIGVuYWJsZWQgcHJvcGVydHkgb2YgdGhlIGR5bmFtaWMgYWN0aW9uIGluIGludGVybmFsIG1vZGVsIGNvbnRleHQuXG5cdFx0XHRcdFx0YVByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzLCBmb3JDb250ZXh0TWVudSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9LFxuXHRzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaDogZnVuY3Rpb24gKFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGEgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnN0IG9Db250cm9scyA9IChvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhPy5jb250cm9scyB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgeyBjb250cm9sSWQ/OiBzdHJpbmcgfT47XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db250cm9scykge1xuXHRcdFx0aWYgKG9Db250cm9sc1tzS2V5XSAmJiBvQ29udHJvbHNbc0tleV0uY29udHJvbElkKSB7XG5cdFx0XHRcdGNvbnN0IG9UYWJsZSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUgJiYgb1RhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZyA9PSBvTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdEpTT04ucGFyc2Uob1RhYmxlLmRhdGEoXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikuY3VzdG9tRGF0YSksXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdLFxuXHRcdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudChvVmlldzogRkVWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvVmlldy5nZXRWaWV3RGF0YSgpIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKT8udmlld0xldmVsLFxuXHRcdFx0aXNFZGl0YWJsZSA9IG9WaWV3LmdldE1vZGVsKFwidWlcIik/LmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0aWYgKChpVmlld0xldmVsIGFzIG51bWJlcikgPiAxICYmIGlzRWRpdGFibGUgIT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzTWV0YVBhdGgpO1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvQ29udGV4dFxuXHRcdFx0XHQ/LmdldE1vZGVsKClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uZ2V0Q29udGV4dChvQ29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRcdHNFbnRpdHlTZXQsXG5cdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRcdG1lcmdlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGxldCB1cGRhdGVIaWRkZW47XG5cdFx0XHQvL0ZpbmQgdGhlIFVwZGF0ZSBIaWRkZW4gb2YgdGhlIHJvb3QgZW50aXR5IHNldCBhbmQgYmluZCB0aGUgcHJvcGVydHkgdG8gQW55RWxlbWVudCwgYW55IGNoYW5nZXMgaW4gdGhlIHBhdGggb2YgdGhlIHJvb3QgVXBkYXRlSGlkZGVuIHdpbGwgYmUgdXBkYXRlZCB2aWEgdGhlIHByb3BlcnR5LCBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGlzIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHByb3BlcnR5XG5cdFx0XHRjb25zdCBiVXBkYXRlSGlkZGVuID0gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0aWYgKGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRcdFx0dXBkYXRlSGlkZGVuID0gTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHRcdC8vRmluZCB0aGUgb3BlcmF0aW9uIGF2YWlsYWJsZSBwcm9wZXJ0eSBvZiB0aGUgcm9vdCBlZGl0IGNvbmZpZ3VyYXRpb24gYW5kIGZldGNoIHRoZSBwcm9wZXJ0eSB1c2luZyBBbnlFbGVtZW50XG5cdFx0XHRjb25zdCBzRWRpdEVuYWJsZUJpbmRpbmcgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdGlja3lSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNQYXRoID0gZHJhZnRSb290UGF0aCB8fCBzU3RpY2t5Um9vdFBhdGg7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKHNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290Q29udGV4dCA9IG9WaWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQoc1BhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRpZiAodXBkYXRlSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBzSGlkZGVuRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSwgZmFsc2UpKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0hpZGRlbkV4cHJlc3Npb24sIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRWaXNpYmxlXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNFZGl0RW5hYmxlQmluZGluZykge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzRWRpdEVuYWJsZUJpbmRpbmcsIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRFbmFibGVkXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdE1vZGVsQ29udGV4dDogZnVuY3Rpb24gKFxuXHRcdHNCaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9Sb290Q29udGV4dDogQ29udGV4dCxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChzQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9IaWRkZW5FbGVtZW50ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBzQmluZGluZ0V4cHJlc3Npb24gfSk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdG9WaWV3LmFkZERlcGVuZGVudChvSGlkZGVuRWxlbWVudCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb0hpZGRlbkVsZW1lbnRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0Py5iaW5kQ29udGV4dChvUm9vdENvbnRleHQuZ2V0UGF0aCgpLCBvUm9vdENvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pXG5cdFx0XHRcdD8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudD8uZ2V0QmluZGluZyhcImFueVRleHRcIik/LmF0dGFjaENoYW5nZSgob0V2ZW50OiBFdmVudDx7fSwgUHJvcGVydHlCaW5kaW5nPikgPT4ge1xuXHRcdFx0XHRjb25zdCBvTmV3VmFsdWUgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc1Byb3BlcnR5LCBvTmV3VmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGU6IGZ1bmN0aW9uIChcblx0XHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10ge1xuXHRcdC8vIFJldHJpZXZlIHByZXZpb3VzbHkgY2hlY2tlZCBjb250ZXh0cyBpbiBjYXNlIG9mICFmb3JDb250ZXh0TWVudVxuXHRcdGNvbnN0IHNFbmFibGVtZW50RmllbGROYW1lID0gZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIiA6IFwiYkVuYWJsZWRcIixcblx0XHRcdGFBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSB8fCBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSB8fCBbXTtcblx0XHRsZXQgYkFjdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gKSB8fCBmYWxzZTtcblxuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUsIG9ubHkgdGhlIGNsaWNrZWQgY29udGV4dCBnb2VzIGludG8gdGhlIHByb2Nlc3NpbmcgLSBvdGhlciBzZWxlY3RlZCBjb250ZXh0cyBtdXN0IGJlIGtlcHQgaW4gdGhlIG1vZGVsXG5cdFx0XHRcdGJFbmFibGVkOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgKSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dERhdGEgPyBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRiQWN0aW9uRW5hYmxlZCA9IGJBY3Rpb25FbmFibGVkIHx8IHNSZXN1bHQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCBiQWN0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdChzUmVzdWx0ID09PSBcInRydWVcIiA/IGFBcHBsaWNhYmxlIDogYU5vdEFwcGxpY2FibGUpLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRDb21tb25VdGlscy5zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvU2VsZWN0ZWRDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChDb21tb25VdGlscy5yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhUmVxdWVzdFByb21pc2VzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhY3Rpb24gaXMgY3JpdGljYWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBwYXRoIFBhdGggdG8gdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgYWN0aW9uIGlzIGNyaXRpY2FsXG5cdCAqL1xuXHRnZXRJc0FjdGlvbkNyaXRpY2FsOiBhc3luYyBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nLCBjb250ZXh0czogQ29udGV4dFtdID0gW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBkZWZhdWx0IGlzIHRydWUuXG5cdFx0bGV0IGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gPSB0cnVlO1xuXHRcdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbiA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEVkbUFjdGlvbj4ocGF0aCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQ7XG5cdFx0aWYgKCFhY3Rpb25UYXJnZXQpIHtcblx0XHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHAgPSBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbihhY3Rpb25UYXJnZXQsIGNvbnZlcnRlZFR5cGVzKTtcblxuXHRcdGlmIChpc0NvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSkge1xuXHRcdFx0Ly8gQ29uc3RhbnQgZXhwcmVzc2lvbiByZXNvbHZlcyB0byBcInRydWVcIiBvciBcImZhbHNlXCIuIEJ1dCwgd2UgbmVlZCBib29sZWFuLlxuXHRcdFx0aXNBY3Rpb25Dcml0aWNhbFZhbHVlID0gY29tcGlsZUNvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKSBhcyBib29sZWFuO1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgZXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHZpYSBhIFVJNSBtYW5hZ2VkIG9iamVjdCBpbnN0YW5jZS5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRpbmcgQmluZGluZyB0byByZXNvbHZlXG5cdFx0XHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGNvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSB9KTtcblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dHNbMF0uZ2V0TW9kZWwoKSk7XG5cblx0XHRcdFx0XHQvLyBBdHRhY2hpbmcgY2hhbmdlIGV2ZW50c1xuXHRcdFx0XHRcdGNvbnN0IGJvb2xlYW5CaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlCb29sZWFuXCIpIGFzIFByb3BlcnR5QmluZGluZztcblx0XHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRXh0ID0gYm9vbGVhbkJpbmRpbmcuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodmFsdWVFeHQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ym9vbGVhbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGZuQ2hhbmdlKTtcblxuXHRcdFx0XHRcdC8vIHNldHRpbmcgYmluZGluZyBjb250ZXh0IHRvIHRyaWdnZXIgdGhlIGJpbmRpbmcgcmVzb2x1dGlvblxuXHRcdFx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0c1swXSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRcdC8vIGVycm9yIHdoaWxlIGNyZWF0aW5nIG9yIHJlc29sdmluZyB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IEFjdGlvbnMgOiBFcnJvciB3aGlsZSByZXNvbHZpbmcgSXNBY3Rpb25Dcml0aWNhbCBmb3IgJHtwYXRofSA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdFx0XHQvLyBPbiB0aGUgc2FmZSBzaWRlLCB3ZSBzaGFsbCByZXR1cm4gYWN0aW9uIGlzIGNyaXRpY2FsIGlmIHZhbHVlIGNvdWxkbid0IGJlIGRldGVybWluZWQuXG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTtcblx0fVxufTtcbmV4cG9ydCBkZWZhdWx0IEFjdGlvblJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQ0EsTUFBTUEsYUFBYSxHQUFHO0lBQ3JCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsNkJBQTZCLEVBQUUsVUFBVUMsaUJBQWtGLEVBQVE7TUFDbElDLFNBQVMsQ0FBQ0MsV0FBVyxDQUNwQkYsaUJBQWlCLENBQUNHLEdBQUcsQ0FBRUMsZ0JBQWdCLElBQUs7UUFDM0MsTUFBTUMsT0FBTyxHQUFHRCxnQkFBZ0IsQ0FBQ0UsbUJBQW1CLENBQUNDLEtBQUssQ0FBQ0MsVUFBVSxDQUNwRUosZ0JBQWdCLENBQUNFLG1CQUFtQixDQUFDRyxZQUFZLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FDckU7UUFDRCxPQUFPLElBQUlDLE9BQU8sQ0FBQztVQUNsQkMsT0FBTyxFQUFFUCxnQkFBZ0IsQ0FBQ08sT0FBTztVQUNqQ0MsSUFBSSxFQUFFQyxXQUFXLENBQUNDLEtBQUs7VUFDdkJDLFNBQVMsRUFBRSxDQUFBVixPQUFPLGFBQVBBLE9BQU8sdUJB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
@@ -1,13 +1,13 @@
1
- import type { Action as EdmAction, PrimitiveType } from "@sap-ux/vocabularies-types";
1
+ import type { Action as EdmAction, ActionParameter as EdmActionParameter, PrimitiveType } from "@sap-ux/vocabularies-types";
2
2
  import Log from "sap/base/Log";
3
3
  import merge from "sap/base/util/merge";
4
+ import type { PathInModelExpression } from "sap/fe/base/BindingToolkit";
5
+ import { compileConstant, compileExpression, constant, equal, isConstant, transformRecursively } from "sap/fe/base/BindingToolkit";
4
6
  import type { FEView } from "sap/fe/core/BaseController";
5
7
  import type { _RequestedProperty } from "sap/fe/core/CommonUtils";
6
8
  import CommonUtils from "sap/fe/core/CommonUtils";
7
9
  import type ResourceModel from "sap/fe/core/ResourceModel";
8
10
  import Any from "sap/fe/core/controls/Any";
9
- import type { PathInModelExpression } from "sap/fe/core/helpers/BindingToolkit";
10
- import { compileConstant, compileExpression, constant, equal, isConstant, transformRecursively } from "sap/fe/core/helpers/BindingToolkit";
11
11
  import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
12
12
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
13
13
  import { isEntitySet } from "sap/fe/core/helpers/TypeGuards";
@@ -33,7 +33,7 @@ import { convertTypes } from "./converters/MetaModelConverter";
33
33
  import { getEditButtonEnabled, getHiddenExpression } from "./converters/objectPage/HeaderAndFooterAction";
34
34
 
35
35
  export type ActionParameterInfo = {
36
- parameter: unknown;
36
+ parameter?: EdmActionParameter;
37
37
  field: Field | MultiValueField;
38
38
  isMultiValue: boolean;
39
39
  value?: string | MultiValueFieldItem[];
@@ -0,0 +1,172 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/fpm/Component", "sap/ui/core/Component"], function (Log, ClassSupport, FPMComponent, Component) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
9
+ var property = ClassSupport.property;
10
+ var event = ClassSupport.event;
11
+ var defineUI5Class = ClassSupport.defineUI5Class;
12
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
13
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
14
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
15
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
16
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
17
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
18
+ let ReuseComponent = (_dec = defineUI5Class("sap.fe.core.ReuseComponent"), _dec2 = property({
19
+ type: "object"
20
+ }), _dec3 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_FPMComponent) {
21
+ _inheritsLoose(ReuseComponent, _FPMComponent);
22
+ function ReuseComponent() {
23
+ var _this;
24
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
25
+ args[_key] = arguments[_key];
26
+ }
27
+ _this = _FPMComponent.call(this, ...args) || this;
28
+ _initializerDefineProperty(_this, "override", _descriptor, _assertThisInitialized(_this));
29
+ _initializerDefineProperty(_this, "initialized", _descriptor2, _assertThisInitialized(_this));
30
+ _this.hooksApplied = false;
31
+ return _this;
32
+ }
33
+ var _proto = ReuseComponent.prototype;
34
+ /**
35
+ * Sets the container of the component.
36
+ *
37
+ * This is being called by UI5. We override this method to keep track of the container and to initialize the router.
38
+ *
39
+ * @param container The container
40
+ * @returns The instance of the component
41
+ */
42
+ _proto.setContainer = function setContainer(container) {
43
+ _FPMComponent.prototype.setContainer.call(this, container);
44
+ this.container = container;
45
+ const router = this.getRouter();
46
+ if (router) {
47
+ // once the container is set, we can initialize the router
48
+ router.initialize();
49
+ }
50
+ return this;
51
+ };
52
+ _proto.applyHooks = function applyHooks() {
53
+ if (this.hooksApplied || !this.container) {
54
+ return;
55
+ }
56
+ const pageController = this.getPageComponent().getRootController();
57
+ if (!pageController) {
58
+ return;
59
+ }
60
+ for (const controllerExtensionOverrideName in this.override) {
61
+ const controllerExtensionOverride = this.override[controllerExtensionOverrideName];
62
+ const pageControllerExtension = pageController[controllerExtensionOverrideName];
63
+ if (!pageControllerExtension) {
64
+ Log.error(`The controller extension ${controllerExtensionOverrideName} does not exist in the page controller.`);
65
+ continue;
66
+ }
67
+ for (const hookName in controllerExtensionOverride) {
68
+ const attachHook = pageControllerExtension[`attach${String(hookName)}`];
69
+ if (!attachHook) {
70
+ Log.error(`The hook ${hookName} does not exist in the page controller extension ${controllerExtensionOverrideName}.`);
71
+ continue;
72
+ }
73
+ const handlerFunction = controllerExtensionOverride[hookName];
74
+ attachHook(handlerFunction);
75
+ pageController.getView().attachBeforeExit(() => {
76
+ this.hooksApplied = false;
77
+ pageControllerExtension[`detach${String(hookName)}`](handlerFunction);
78
+ });
79
+ }
80
+ }
81
+ this.hooksApplied = true;
82
+ this.fireEvent("initialized");
83
+ }
84
+
85
+ /**
86
+ * Creates the content of the component.
87
+ *
88
+ * This is being called by UI5. We override this method to implement our own template logic
89
+ * and to inform UI5 when the root control is being created.
90
+ *
91
+ * @returns A promise that resolves with the root control
92
+ */;
93
+ _proto.createContent = async function createContent() {
94
+ this.attachModelContextChange(this.applyHooks.bind(this));
95
+ return new Promise(resolve => {
96
+ this.rootControlCreated = resolve;
97
+ });
98
+ }
99
+
100
+ /**
101
+ * Sets an aggregation of the component.
102
+ *
103
+ * This is being called by UI5. We override this method to know when the rootControl is being set.
104
+ *
105
+ * @param aggregationName The name of the aggregation
106
+ * @param object The object to set
107
+ * @param suppressInvalidate Whether to suppress invalidation
108
+ * @returns The instance of the component
109
+ */;
110
+ _proto.setAggregation = function setAggregation(aggregationName, object, suppressInvalidate) {
111
+ if (aggregationName === "rootControl") {
112
+ const rootControl = object;
113
+ this.rootControlCreated(rootControl);
114
+ }
115
+ return _FPMComponent.prototype.setAggregation.call(this, aggregationName, object, suppressInvalidate);
116
+ }
117
+
118
+ /**
119
+ * Returns the view name of the reuse component.
120
+ * This is being called by the template service to create the view.
121
+ *
122
+ * @returns The view name
123
+ */;
124
+ _proto.getViewName = function getViewName() {
125
+ var _this$getManifestEntr;
126
+ const rootViewName = (_this$getManifestEntr = this.getManifestEntry("sap.ui5").rootView) === null || _this$getManifestEntr === void 0 ? void 0 : _this$getManifestEntr.viewName;
127
+ if (!rootViewName && !this.viewName) {
128
+ throw new Error("No root view defined in the manifest nor viewName set in the component");
129
+ }
130
+ return rootViewName || this.viewName;
131
+ }
132
+
133
+ /**
134
+ * Returns the page component that owns the reuse component.
135
+ *
136
+ * @returns The page component
137
+ */;
138
+ _proto.getPageComponent = function getPageComponent() {
139
+ var _this$container;
140
+ // the owner of the reuse component is not the page component but the app component.
141
+ // we rely on the parent of the container to be the owned by the page component
142
+ // and get the extensionAPI from there. If the parent is not a control, we throw an error
143
+ const parent = (_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.getParent();
144
+ if (!parent) {
145
+ throw new Error("The parent of the reuse component is not yet set. Thus, the page component cannot be retrieved.");
146
+ }
147
+ return Component.getOwnerComponentFor(parent);
148
+ }
149
+
150
+ /**
151
+ * Returns the extension API of the page component that owns the reuse component.
152
+ *
153
+ * @returns The extension API
154
+ */;
155
+ _proto.getExtensionAPI = function getExtensionAPI() {
156
+ return this.getPageComponent().getExtensionAPI();
157
+ };
158
+ return ReuseComponent;
159
+ }(FPMComponent), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "override", [_dec2], {
160
+ configurable: true,
161
+ enumerable: true,
162
+ writable: true,
163
+ initializer: null
164
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "initialized", [_dec3], {
165
+ configurable: true,
166
+ enumerable: true,
167
+ writable: true,
168
+ initializer: null
169
+ })), _class2)) || _class);
170
+ return ReuseComponent;
171
+ }, false);
172
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXVzZUNvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwiZXZlbnQiLCJob29rc0FwcGxpZWQiLCJzZXRDb250YWluZXIiLCJjb250YWluZXIiLCJyb3V0ZXIiLCJnZXRSb3V0ZXIiLCJpbml0aWFsaXplIiwiYXBwbHlIb29rcyIsInBhZ2VDb250cm9sbGVyIiwiZ2V0UGFnZUNvbXBvbmVudCIsImdldFJvb3RDb250cm9sbGVyIiwiY29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlTmFtZSIsIm92ZXJyaWRlIiwiY29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlIiwicGFnZUNvbnRyb2xsZXJFeHRlbnNpb24iLCJMb2ciLCJlcnJvciIsImhvb2tOYW1lIiwiYXR0YWNoSG9vayIsIlN0cmluZyIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwiZmlyZUV2ZW50IiwiY3JlYXRlQ29udGVudCIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsImJpbmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJvb3RDb250cm9sQ3JlYXRlZCIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25OYW1lIiwib2JqZWN0Iiwic3VwcHJlc3NJbnZhbGlkYXRlIiwicm9vdENvbnRyb2wiLCJnZXRWaWV3TmFtZSIsInJvb3RWaWV3TmFtZSIsImdldE1hbmlmZXN0RW50cnkiLCJyb290VmlldyIsInZpZXdOYW1lIiwiRXJyb3IiLCJwYXJlbnQiLCJnZXRQYXJlbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldEV4dGVuc2lvbkFQSSIsIkZQTUNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUmV1c2VDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEZQTUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvZnBtL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5SZXVzZUNvbXBvbmVudFwiKVxuY2xhc3MgUmV1c2VDb21wb25lbnQgZXh0ZW5kcyBGUE1Db21wb25lbnQge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiIH0pXG5cdG92ZXJyaWRlPzogUmVjb3JkPHN0cmluZywgb2JqZWN0PjtcblxuXHQvLyBldmVudCB0aGF0IGlzIGZpcmVkIG9uY2UgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZFxuXHRAZXZlbnQoKVxuXHRpbml0aWFsaXplZCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnRhaW5lciE6IENvbXBvbmVudENvbnRhaW5lcjtcblxuXHRob29rc0FwcGxpZWQgPSBmYWxzZTtcblxuXHRyb290Q29udHJvbENyZWF0ZWQhOiAoY29udHJvbDogQ29udHJvbCkgPT4gdm9pZDtcblxuXHQvKipcblx0ICogU2V0cyB0aGUgY29udGFpbmVyIG9mIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGJ5IFVJNS4gV2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29udGFpbmVyIGFuZCB0byBpbml0aWFsaXplIHRoZSByb3V0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250YWluZXIgVGhlIGNvbnRhaW5lclxuXHQgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0c2V0Q29udGFpbmVyKGNvbnRhaW5lcjogQ29tcG9uZW50Q29udGFpbmVyKTogdGhpcyB7XG5cdFx0c3VwZXIuc2V0Q29udGFpbmVyKGNvbnRhaW5lcik7XG5cdFx0dGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG5cblx0XHRjb25zdCByb3V0ZXIgPSB0aGlzLmdldFJvdXRlcigpO1xuXHRcdGlmIChyb3V0ZXIpIHtcblx0XHRcdC8vIG9uY2UgdGhlIGNvbnRhaW5lciBpcyBzZXQsIHdlIGNhbiBpbml0aWFsaXplIHRoZSByb3V0ZXJcblx0XHRcdHJvdXRlci5pbml0aWFsaXplKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhcHBseUhvb2tzKCk6IHZvaWQge1xuXHRcdHR5cGUgRnVuY3Rpb25NYXAgPSB7XG5cdFx0XHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcblx0XHR9O1xuXHRcdHR5cGUgRGVlcEZ1bmN0aW9uTWFwID0ge1xuXHRcdFx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmhvb2tzQXBwbGllZCB8fCAhdGhpcy5jb250YWluZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb21wb25lbnQoKS5nZXRSb290Q29udHJvbGxlcigpO1xuXG5cdFx0aWYgKCFwYWdlQ29udHJvbGxlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlTmFtZSBpbiB0aGlzLm92ZXJyaWRlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyRXh0ZW5zaW9uT3ZlcnJpZGUgPSB0aGlzLm92ZXJyaWRlW2NvbnRyb2xsZXJFeHRlbnNpb25PdmVycmlkZU5hbWVdO1xuXHRcdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXJFeHRlbnNpb24gPSAocGFnZUNvbnRyb2xsZXIgYXMgdW5rbm93biBhcyBEZWVwRnVuY3Rpb25NYXApW2NvbnRyb2xsZXJFeHRlbnNpb25PdmVycmlkZU5hbWVdO1xuXG5cdFx0XHRpZiAoIXBhZ2VDb250cm9sbGVyRXh0ZW5zaW9uKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uICR7Y29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIHBhZ2UgY29udHJvbGxlci5gKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IGhvb2tOYW1lIGluIGNvbnRyb2xsZXJFeHRlbnNpb25PdmVycmlkZSkge1xuXHRcdFx0XHRjb25zdCBhdHRhY2hIb29rID0gcGFnZUNvbnRyb2xsZXJFeHRlbnNpb25bYGF0dGFjaCR7U3RyaW5nKGhvb2tOYW1lKX1gXTtcblx0XHRcdFx0aWYgKCFhdHRhY2hIb29rKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBUaGUgaG9vayAke2hvb2tOYW1lfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcGFnZSBjb250cm9sbGVyIGV4dGVuc2lvbiAke2NvbnRyb2xsZXJFeHRlbnNpb25PdmVycmlkZU5hbWV9LmApO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJGdW5jdGlvbiA9IChjb250cm9sbGVyRXh0ZW5zaW9uT3ZlcnJpZGUgYXMgRnVuY3Rpb25NYXApW2hvb2tOYW1lXTtcblxuXHRcdFx0XHRhdHRhY2hIb29rKGhhbmRsZXJGdW5jdGlvbik7XG5cdFx0XHRcdHBhZ2VDb250cm9sbGVyLmdldFZpZXcoKS5hdHRhY2hCZWZvcmVFeGl0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmhvb2tzQXBwbGllZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHBhZ2VDb250cm9sbGVyRXh0ZW5zaW9uW2BkZXRhY2gke1N0cmluZyhob29rTmFtZSl9YF0oaGFuZGxlckZ1bmN0aW9uKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaG9va3NBcHBsaWVkID0gdHJ1ZTtcblx0XHR0aGlzLmZpcmVFdmVudChcImluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogVGhpcyBpcyBiZWluZyBjYWxsZWQgYnkgVUk1LiBXZSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBpbXBsZW1lbnQgb3VyIG93biB0ZW1wbGF0ZSBsb2dpY1xuXHQgKiBhbmQgdG8gaW5mb3JtIFVJNSB3aGVuIHRoZSByb290IGNvbnRyb2wgaXMgYmVpbmcgY3JlYXRlZC5cblx0ICpcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcm9vdCBjb250cm9sXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVDb250ZW50KCk6IFByb21pc2U8Q29udHJvbD4ge1xuXHRcdHRoaXMuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKHRoaXMuYXBwbHlIb29rcy5iaW5kKHRoaXMpKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5yb290Q29udHJvbENyZWF0ZWQgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYW4gYWdncmVnYXRpb24gb2YgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogVGhpcyBpcyBiZWluZyBjYWxsZWQgYnkgVUk1LiBXZSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBrbm93IHdoZW4gdGhlIHJvb3RDb250cm9sIGlzIGJlaW5nIHNldC5cblx0ICpcblx0ICogQHBhcmFtIGFnZ3JlZ2F0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWdncmVnYXRpb25cblx0ICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHNldFxuXHQgKiBAcGFyYW0gc3VwcHJlc3NJbnZhbGlkYXRlIFdoZXRoZXIgdG8gc3VwcHJlc3MgaW52YWxpZGF0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRzZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZywgb2JqZWN0OiBNYW5hZ2VkT2JqZWN0LCBzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdGhpcyB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uTmFtZSA9PT0gXCJyb290Q29udHJvbFwiKSB7XG5cdFx0XHRjb25zdCByb290Q29udHJvbCA9IG9iamVjdCBhcyBDb250cm9sO1xuXHRcdFx0dGhpcy5yb290Q29udHJvbENyZWF0ZWQocm9vdENvbnRyb2wpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3VwZXIuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lLCBvYmplY3QsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmlldyBuYW1lIG9mIHRoZSByZXVzZSBjb21wb25lbnQuXG5cdCAqIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSB0ZW1wbGF0ZSBzZXJ2aWNlIHRvIGNyZWF0ZSB0aGUgdmlldy5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHZpZXcgbmFtZVxuXHQgKi9cblx0Z2V0Vmlld05hbWUoKTogc3RyaW5nIHtcblx0XHRjb25zdCByb290Vmlld05hbWUgPSB0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvb3RWaWV3Py52aWV3TmFtZTtcblx0XHRpZiAoIXJvb3RWaWV3TmFtZSAmJiAhdGhpcy52aWV3TmFtZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm8gcm9vdCB2aWV3IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IG5vciB2aWV3TmFtZSBzZXQgaW4gdGhlIGNvbXBvbmVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb3RWaWV3TmFtZSB8fCB0aGlzLnZpZXdOYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhZ2UgY29tcG9uZW50IHRoYXQgb3ducyB0aGUgcmV1c2UgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcGFnZSBjb21wb25lbnRcblx0ICovXG5cdGdldFBhZ2VDb21wb25lbnQoKTogVGVtcGxhdGVDb21wb25lbnQge1xuXHRcdC8vIHRoZSBvd25lciBvZiB0aGUgcmV1c2UgY29tcG9uZW50IGlzIG5vdCB0aGUgcGFnZSBjb21wb25lbnQgYnV0IHRoZSBhcHAgY29tcG9uZW50LlxuXHRcdC8vIHdlIHJlbHkgb24gdGhlIHBhcmVudCBvZiB0aGUgY29udGFpbmVyIHRvIGJlIHRoZSBvd25lZCBieSB0aGUgcGFnZSBjb21wb25lbnRcblx0XHQvLyBhbmQgZ2V0IHRoZSBleHRlbnNpb25BUEkgZnJvbSB0aGVyZS4gSWYgdGhlIHBhcmVudCBpcyBub3QgYSBjb250cm9sLCB3ZSB0aHJvdyBhbiBlcnJvclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuY29udGFpbmVyPy5nZXRQYXJlbnQoKTtcblx0XHRpZiAoIXBhcmVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmVudCBvZiB0aGUgcmV1c2UgY29tcG9uZW50IGlzIG5vdCB5ZXQgc2V0LiBUaHVzLCB0aGUgcGFnZSBjb21wb25lbnQgY2Fubm90IGJlIHJldHJpZXZlZC5cIik7XG5cdFx0fVxuXHRcdHJldHVybiBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IocGFyZW50KSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gQVBJIG9mIHRoZSBwYWdlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIHJldXNlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUElcblx0ICovXG5cdGdldEV4dGVuc2lvbkFQSSgpOiBFeHRlbnNpb25BUEkge1xuXHRcdHJldHVybiB0aGlzLmdldFBhZ2VDb21wb25lbnQoKS5nZXRFeHRlbnNpb25BUEkoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXVzZUNvbXBvbmVudDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7TUFXTUEsY0FBYyxXQURuQkMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLFVBRTNDQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFVBSTVCQyxLQUFLLEVBQUU7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQSxNQUtSQyxZQUFZLEdBQUcsS0FBSztNQUFBO0lBQUE7SUFBQTtJQUlwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBUEMsT0FRQUMsWUFBWSxHQUFaLHNCQUFhQyxTQUE2QixFQUFRO01BQ2pELHdCQUFNRCxZQUFZLFlBQUNDLFNBQVM7TUFDNUIsSUFBSSxDQUFDQSxTQUFTLEdBQUdBLFNBQVM7TUFFMUIsTUFBTUMsTUFBTSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxFQUFFO01BQy9CLElBQUlELE1BQU0sRUFBRTtRQUNYO1FBQ0FBLE1BQU0sQ0FBQ0UsVUFBVSxFQUFFO01BQ3BCO01BRUEsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUFBLE9BRURDLFVBQVUsR0FBVixzQkFBbUI7TUFRbEIsSUFBSSxJQUFJLENBQUNOLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQ0UsU0FBUyxFQUFFO1FB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
@@ -0,0 +1,165 @@
1
+ import Log from "sap/base/Log";
2
+ import { defineUI5Class, event, property } from "sap/fe/base/ClassSupport";
3
+ import type ExtensionAPI from "sap/fe/core/ExtensionAPI";
4
+ import type TemplateComponent from "sap/fe/core/TemplateComponent";
5
+ import FPMComponent from "sap/fe/core/fpm/Component";
6
+ import type ManagedObject from "sap/ui/base/ManagedObject";
7
+ import Component from "sap/ui/core/Component";
8
+ import type ComponentContainer from "sap/ui/core/ComponentContainer";
9
+ import type Control from "sap/ui/core/Control";
10
+
11
+ @defineUI5Class("sap.fe.core.ReuseComponent")
12
+ class ReuseComponent extends FPMComponent {
13
+ @property({ type: "object" })
14
+ override?: Record<string, object>;
15
+
16
+ // event that is fired once the component is initialized
17
+ @event()
18
+ initialized!: Function;
19
+
20
+ container!: ComponentContainer;
21
+
22
+ hooksApplied = false;
23
+
24
+ rootControlCreated!: (control: Control) => void;
25
+
26
+ /**
27
+ * Sets the container of the component.
28
+ *
29
+ * This is being called by UI5. We override this method to keep track of the container and to initialize the router.
30
+ *
31
+ * @param container The container
32
+ * @returns The instance of the component
33
+ */
34
+ setContainer(container: ComponentContainer): this {
35
+ super.setContainer(container);
36
+ this.container = container;
37
+
38
+ const router = this.getRouter();
39
+ if (router) {
40
+ // once the container is set, we can initialize the router
41
+ router.initialize();
42
+ }
43
+
44
+ return this;
45
+ }
46
+
47
+ applyHooks(): void {
48
+ type FunctionMap = {
49
+ [key: string]: Function;
50
+ };
51
+ type DeepFunctionMap = {
52
+ [key: string]: FunctionMap;
53
+ };
54
+
55
+ if (this.hooksApplied || !this.container) {
56
+ return;
57
+ }
58
+ const pageController = this.getPageComponent().getRootController();
59
+
60
+ if (!pageController) {
61
+ return;
62
+ }
63
+
64
+ for (const controllerExtensionOverrideName in this.override) {
65
+ const controllerExtensionOverride = this.override[controllerExtensionOverrideName];
66
+ const pageControllerExtension = (pageController as unknown as DeepFunctionMap)[controllerExtensionOverrideName];
67
+
68
+ if (!pageControllerExtension) {
69
+ Log.error(`The controller extension ${controllerExtensionOverrideName} does not exist in the page controller.`);
70
+ continue;
71
+ }
72
+ for (const hookName in controllerExtensionOverride) {
73
+ const attachHook = pageControllerExtension[`attach${String(hookName)}`];
74
+ if (!attachHook) {
75
+ Log.error(`The hook ${hookName} does not exist in the page controller extension ${controllerExtensionOverrideName}.`);
76
+ continue;
77
+ }
78
+ const handlerFunction = (controllerExtensionOverride as FunctionMap)[hookName];
79
+
80
+ attachHook(handlerFunction);
81
+ pageController.getView().attachBeforeExit(() => {
82
+ this.hooksApplied = false;
83
+ pageControllerExtension[`detach${String(hookName)}`](handlerFunction);
84
+ });
85
+ }
86
+ }
87
+ this.hooksApplied = true;
88
+ this.fireEvent("initialized");
89
+ }
90
+
91
+ /**
92
+ * Creates the content of the component.
93
+ *
94
+ * This is being called by UI5. We override this method to implement our own template logic
95
+ * and to inform UI5 when the root control is being created.
96
+ *
97
+ * @returns A promise that resolves with the root control
98
+ */
99
+ async createContent(): Promise<Control> {
100
+ this.attachModelContextChange(this.applyHooks.bind(this));
101
+
102
+ return new Promise((resolve) => {
103
+ this.rootControlCreated = resolve;
104
+ });
105
+ }
106
+
107
+ /**
108
+ * Sets an aggregation of the component.
109
+ *
110
+ * This is being called by UI5. We override this method to know when the rootControl is being set.
111
+ *
112
+ * @param aggregationName The name of the aggregation
113
+ * @param object The object to set
114
+ * @param suppressInvalidate Whether to suppress invalidation
115
+ * @returns The instance of the component
116
+ */
117
+ setAggregation(aggregationName: string, object: ManagedObject, suppressInvalidate?: boolean): this {
118
+ if (aggregationName === "rootControl") {
119
+ const rootControl = object as Control;
120
+ this.rootControlCreated(rootControl);
121
+ }
122
+ return super.setAggregation(aggregationName, object, suppressInvalidate);
123
+ }
124
+
125
+ /**
126
+ * Returns the view name of the reuse component.
127
+ * This is being called by the template service to create the view.
128
+ *
129
+ * @returns The view name
130
+ */
131
+ getViewName(): string {
132
+ const rootViewName = this.getManifestEntry("sap.ui5").rootView?.viewName;
133
+ if (!rootViewName && !this.viewName) {
134
+ throw new Error("No root view defined in the manifest nor viewName set in the component");
135
+ }
136
+ return rootViewName || this.viewName;
137
+ }
138
+
139
+ /**
140
+ * Returns the page component that owns the reuse component.
141
+ *
142
+ * @returns The page component
143
+ */
144
+ getPageComponent(): TemplateComponent {
145
+ // the owner of the reuse component is not the page component but the app component.
146
+ // we rely on the parent of the container to be the owned by the page component
147
+ // and get the extensionAPI from there. If the parent is not a control, we throw an error
148
+ const parent = this.container?.getParent();
149
+ if (!parent) {
150
+ throw new Error("The parent of the reuse component is not yet set. Thus, the page component cannot be retrieved.");
151
+ }
152
+ return Component.getOwnerComponentFor(parent) as TemplateComponent;
153
+ }
154
+
155
+ /**
156
+ * Returns the extension API of the page component that owns the reuse component.
157
+ *
158
+ * @returns The extension API
159
+ */
160
+ getExtensionAPI(): ExtensionAPI {
161
+ return this.getPageComponent().getExtensionAPI();
162
+ }
163
+ }
164
+
165
+ export default ReuseComponent;