@sapui5/sap.fe.core 1.124.2 → 1.126.0

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 (300) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +5 -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/AppComponent.js +2 -2
  6. package/src/sap/fe/core/AppComponent.ts +1 -1
  7. package/src/sap/fe/core/AppStateHandler.js +2 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +1 -1
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/BaseController.ts +1 -1
  11. package/src/sap/fe/core/CommonUtils.js +3 -3
  12. package/src/sap/fe/core/CommonUtils.ts +12 -15
  13. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -3
  15. package/src/sap/fe/core/PageController.js +2 -2
  16. package/src/sap/fe/core/PageController.ts +1 -1
  17. package/src/sap/fe/core/ResourceModel.js +2 -2
  18. package/src/sap/fe/core/ResourceModel.ts +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +172 -0
  20. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  21. package/src/sap/fe/core/TemplateComponent.js +2 -2
  22. package/src/sap/fe/core/TemplateComponent.ts +5 -1
  23. package/src/sap/fe/core/TemplateModel.js +2 -2
  24. package/src/sap/fe/core/TemplateModel.ts +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
  27. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
  33. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  34. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
  39. package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
  43. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  44. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  56. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  57. package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
  58. package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
  59. package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
  60. package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
  61. package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
  62. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/Share.js +4 -4
  64. package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
  65. package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
  66. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
  67. package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
  68. package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
  70. package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
  71. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
  72. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  75. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
  76. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
  79. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
  84. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
  88. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
  89. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
  91. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
  92. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  93. package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
  94. package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
  95. package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
  97. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
  98. package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
  99. package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
  101. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
  102. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
  103. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
  104. package/src/sap/fe/core/converters/ConverterContext.js +4 -2
  105. package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
  106. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  107. package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
  108. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  109. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  110. package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
  111. package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
  113. package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
  114. package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
  115. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  117. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  118. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
  129. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  130. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  131. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  132. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  133. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  137. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  138. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  139. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  140. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  141. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
  142. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
  143. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  144. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  145. package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
  146. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
  147. package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  150. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  151. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  152. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  153. package/src/sap/fe/core/fpm/Component.js +3 -3
  154. package/src/sap/fe/core/fpm/Component.ts +3 -3
  155. package/src/sap/fe/core/fpm/manifest.json +1 -1
  156. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  157. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  158. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  159. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  160. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  161. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  162. package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
  163. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  166. package/src/sap/fe/core/helpers/MetaPath.js +9 -3
  167. package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
  168. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  169. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  170. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  171. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  172. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  173. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  174. package/src/sap/fe/core/library.js +4 -4
  175. package/src/sap/fe/core/library.ts +2 -1
  176. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  177. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  178. package/src/sap/fe/core/messagebundle.properties +8 -57
  179. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_cy.properties +4 -2
  185. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  187. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  188. package/src/sap/fe/core/messagebundle_en.properties +6 -57
  189. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  190. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
  191. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  197. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  199. package/src/sap/fe/core/messagebundle_hu.properties +3 -1
  200. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_iw.properties +3 -1
  203. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  206. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  207. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  211. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  216. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  217. package/src/sap/fe/core/messagebundle_sh.properties +64 -62
  218. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  219. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  220. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  221. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  223. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  224. package/src/sap/fe/core/messagebundle_uk.properties +3 -1
  225. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  226. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  227. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  228. package/src/sap/fe/core/operationsHelper.js +3 -3
  229. package/src/sap/fe/core/operationsHelper.ts +2 -2
  230. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
  231. package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
  232. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  233. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  234. package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
  235. package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
  236. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
  237. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
  238. package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
  239. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
  240. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  241. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  243. package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
  244. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  245. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  246. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
  247. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
  248. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
  249. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  251. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  252. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  253. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  254. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  255. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  256. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  257. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  258. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  259. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  260. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  261. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  262. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  263. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  264. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  265. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  266. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  267. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  268. package/src/sap/fe/core/templating/UIFormatters.js +7 -7
  269. package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
  270. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  271. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
  272. package/src/sap/fe/core/type/Email.js +2 -2
  273. package/src/sap/fe/core/type/Email.ts +1 -1
  274. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  275. package/src/sap/fe/core/type/FiscalDate.ts +1 -1
  276. package/src/sap/fe/core/type/InputMask.js +124 -0
  277. package/src/sap/fe/core/type/InputMask.ts +131 -0
  278. package/ui5.yaml +19 -0
  279. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  280. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
  281. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  282. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  283. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
  284. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
  285. package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
  286. package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
  287. package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
  288. package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
  289. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
  290. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
  291. package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
  292. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
  293. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
  294. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
  295. package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
  296. package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
  297. package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
  298. package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
  299. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
  300. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
@@ -810,4 +810,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
810
810
  }(ServiceFactory);
811
811
  return ShellServicesFactory;
812
812
  }, false);
813
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJnZXRVc2VySW5pdGlhbHMiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInNldEJhY2tOYXZpZ2F0aW9uIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJnZXRDb250ZW50RGVuc2l0eSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0UHJpbWFyeUludGVudCIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImdldFRpdGxlIiwiZ2V0UGVyc29uYWxpemVyIiwiX3BlcnNJZCIsIl9zY29wZSIsIl9jb21wb25lbnQiLCJnZXRQZXJzRGF0YSIsImhpc3RvcnlFbmFibGVkIiwic3VnZ2VzdGlvbnNFbmFibGVkIiwiYXBwcyIsInNldFBlcnNEYXRhIiwiZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyIiwiX2tleSIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsImdldEV4dGVuc2lvblNlcnZpY2UiLCJTZXJ2aWNlIiwiU2hlbGxTZXJ2aWNlcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9TaGVsbENvbnRhaW5lciIsInNldHRpbmdzIiwic2hlbGxDb250YWluZXIiLCJsaW5rc0NhY2hlIiwiZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSIsIm9BcmdzIiwiYUNhY2hlZFNlbWFudGljT2JqZWN0cyIsImFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMiLCJsaW5rRmlsdGVyIiwic2VtYW50aWNPYmplY3QiLCJwdXNoIiwibGlua3MiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwib2xkQXJncyIsIm5ld0FyZ3MiLCJjYWNoZWRMaW5rcyIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwibmF2aWdhdGlvblNlcnZpY2VQIiwiZ2V0U2VydmljZUFzeW5jIiwidXNlckluZm9TZXJ2aWNlUCIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSIsIm9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJuYXZpZ2F0aW9uU2VydmljZSIsInVzZXJJbmZvU2VydmljZSIsIm9VcmxQYXJzaW5nU2VydmljZSIsIm9TaGVsbE5hdmlnYXRpb24iLCJvU2hlbGxVSVNlcnZpY2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwib1NoZWxsUGx1Z2luTWFuYWdlciIsIm9TaGVsbEV4dGVuc2lvblNlcnZpY2UiLCJhcHBsaWNhdGlvbk5hdmlnYXRpb24iLCJ1cmxQYXJzaW5nU2VydmljZSIsInNoZWxsTmF2aWdhdGlvbiIsInNoZWxsVUlTZXJ2aWNlIiwic2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwic2hlbGxQbHVnaW5NYW5hZ2VyIiwiZXh0ZW5zaW9uU2VydmljZSIsImNhdGNoIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsImkiLCJhc3NpZ24iLCJhTWVyZ2VkTGlua3MiLCJqIiwiaXRlbSIsImdldFNoZWxsQ29udGFpbmVyIiwib05hdkFyZ3VtZW50c0FyciIsIm9UYXJnZXQiLCJzQXBwU3RhdGVLZXkiLCJhVGFyZ2V0cyIsInNIYXNoRnJhZ21lbnQiLCJnZXRTaGVsbEhhc2giLCJmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIiwiaGFzT3duUHJvcGVydHkiLCJNQU5BR0VfRkVfQ0FDSEVTIiwiZW5hYmxlZCIsIm9OZXdTaGVsbEhhc2giLCJiRGlydHkiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImdldEluaXRpYWxzIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwicHJpbWFyeUludGVudCIsIkFycmF5IiwiaXNBcnJheSIsImdldFBsdWdpbkxvYWRpbmdQcm9taXNlIiwiZmFpbCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInNlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwic2hlbGxTZXJ2aWNlIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInNlbWFudGljT2JqZWN0cyIsInNldFByb3BlcnR5IiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTGluaywgTGlua0ZpbHRlciwgVGFyZ2V0IH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uVjIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB7IHR5cGUgUGVyc0lkLCB0eXBlIFNjb3BlIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRIYXNoIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgVXNlckluZm8gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVXNlckluZm9cIjtcbmltcG9ydCB0eXBlIFNoZWxsVUlTZXJ2aWNlIGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBBcHBTdGF0ZSA9IHtcblx0Z2V0RGF0YSgpOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudD86IHtcblx0XHRcdFNlbGVjdE9wdGlvbnM/OiB7XG5cdFx0XHRcdFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRSYW5nZXM6IHtcblx0XHRcdFx0XHRPcHRpb246IHN0cmluZztcblx0XHRcdFx0XHRTaWduOiBzdHJpbmc7XG5cdFx0XHRcdFx0TG93OiBzdHJpbmc7XG5cdFx0XHRcdH1bXTtcblx0XHRcdH1bXTtcblx0XHR9O1xuXHR9O1xufTtcblxuLy8gc2VlOiBzYXBcXHVzaGVsbFxcc2VydmljZXNcXF9QZXJzb25hbGl6YXRpb25cXGNvbnN0YW50cy5qc1xuZXhwb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cyA9IFBlcnNvbmFsaXphdGlvblYyICYge1xuXHRjb25zdGFudHM6IHtcblx0XHRrZXlDYXRlZ29yeToge1xuXHRcdFx0RklYRURfS0VZOiBzdHJpbmc7XG5cdFx0XHRHRU5FUkFURURfS0VZOiBzdHJpbmc7XG5cdFx0fTtcblx0XHR3cml0ZUZyZXF1ZW5jeToge1xuXHRcdFx0SElHSDogc3RyaW5nO1xuXHRcdFx0TE9XOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFsaXplclR5cGUgPSB7XG5cdGdldFBlcnNEYXRhOiAoKSA9PiBQcm9taXNlPG9iamVjdD47XG5cdHNldFBlcnNEYXRhOiAocGVyc0RhdGE6IG9iamVjdCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsQ29uZmlnVHlwZSA9IHtcblx0YXBwczoge1xuXHRcdGlucHV0RmllbGRIaXN0b3J5OiB7XG5cdFx0XHRlbmFibGVkOiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBGTFBQbHVnaW4gPSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR1cmw6IHN0cmluZztcblx0Y29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlID0ge1xuXHRBcHBXYXJtdXA6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0UmVuZGVyZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJEZWZhdWx0czogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VySW1hZ2U6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcbn07XG5cbi8qKlxuICogQGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblxuXHRnZXRMaW5rcyhvQXJncz86IE9taXQ8TGlua0ZpbHRlciwgXCJ1aTVDb21wb25lbnRcIj5bXSk6IFByb21pc2U8TGlua1tdW10+O1xuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhyZWYob1RhcmdldDogb2JqZWN0LCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPjtcblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhhc2goKTogc3RyaW5nO1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoO1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPjtcblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nO1xuXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdDtcblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvO1xuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nO1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxMaW5rPjtcblxuXHR3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG5cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbjtcblxuXHRnZXRUaXRsZSgpOiBzdHJpbmc7XG5cblx0Z2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT47XG5cblx0ZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD47XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlO1xuXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInBhcnNlUGFyYW1ldGVyc1wiXT47XG5cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb247XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlIGZvciBPcGVuRkVcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzIGFzIElTaGVsbFNlcnZpY2VzKTtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwibW9ja1wiO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3MoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBfX2ZldGNoU2VtYW50aWNPYmplY3QoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHR0b0V4dGVybmFsKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPFN0YXJ0dXBBcHBTdGF0ZSB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbCgvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRIcmVmKC8qb0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QsIGJBc3luYz86IGJvb2xlYW4qLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGUoLypvVGFyZ2V0OiBUYXJnZXQsb0NvbXBvbmVudD86IENvbXBvbmVudCovKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHR9XG5cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdHBhcnNlU2hlbGxIYXNoKC8qc0hhc2g6IHN0cmluZyovKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHt9IGFzIHVua25vd24gYXMgUGFyc2VkSGFzaDtcblx0fVxuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPiB7XG5cdFx0LyoqXG5cdFx0ICogRm9yIGFuIEFwcGxpY2F0aW9uIHdpdGhvdXQgU2hlbGwsIHRoZSBoYXNoIGlzIHNpbWlsYXIgdG8gOiAjL1NhbGVzT3JkZXJNYW5hZ2UoMTExMTExMTEtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVxuXHRcdCAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA6XG5cdFx0ICoge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogXCJTYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcIlxuXHRcdH1cblx0XHQgKi9cblx0XHRjb25zdCByZWdleCA9IC8jW14vXSpcXC8oLiopLy5leGVjKHNIYXNoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogcmVnZXg/Lmxlbmd0aCA9PT0gMiA/IHJlZ2V4WzFdIDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2goLypvTmV3U2hlbGxIYXNoOiBvYmplY3QqLyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Qge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB7fSBhcyBVc2VySW5mbztcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKC8qZm5DYWxsQmFjaz86IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRUaXRsZSgvKnNUaXRsZTogc3RyaW5nKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudCgvKnNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCovKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBMaW5rKTtcblx0fVxuXG5cdGFzeW5jIHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihfcGVyc0lkOiBQZXJzSWQsIF9zY29wZTogU2NvcGUsIF9jb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PlxuXHRcdFx0XHRQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0XHRcdGhpc3RvcnlFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzdWdnZXN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGFwcHM6IHt9XG5cdFx0XHRcdH0pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgU2hlbGxTZXJ2aWNlc1NldHRpbmdzXG4gKi9cbmV4cG9ydCB0eXBlIFNoZWxsU2VydmljZXNTZXR0aW5ncyA9IHtcblx0c2hlbGxDb250YWluZXI/OiBDb250YWluZXI7XG59O1xuXG50eXBlIFNoZWxsUGx1Z2luTWFuYWdlciA9IHtcblx0Z2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoY2F0ZWdvcnk6IHN0cmluZyk6IGpRdWVyeS5Qcm9taXNlO1xuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG59O1xuXG50eXBlIFByaXZhdGVTaGVsbFVzZXIgPSB7XG5cdGdldEluaXRpYWxzKCk6IHN0cmluZztcblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbjtcblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFVJU2VydmljZSE6IFNoZWxsVUlTZXJ2aWNlO1xuXG5cdHNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSE6IFBlcnNvbmFsaXphdGlvbldpdGhDb25zdGFudHM7XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdGxpbmtzQ2FjaGUhOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT47XG5cblx0c2VtYW50aWNPYmplY3RzITogc3RyaW5nW107XG5cblx0Zm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSE6IEZ1bmN0aW9uO1xuXG5cdGV4dGVuc2lvblNlcnZpY2UhOiBFeHRlbnNpb247XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBDb21wb25lbnQ7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIgPSBvQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lcjtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwicmVhbFwiO1xuXHRcdHRoaXMubGlua3NDYWNoZSA9IHt9O1xuXHRcdHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSA9IGZ1bmN0aW9uIChvQXJnczogTGlua0ZpbHRlcltdKTogb2JqZWN0IHtcblx0XHRcdGNvbnN0IGFDYWNoZWRTZW1hbnRpY09iamVjdHM6IExpbmtbXVtdID0gW107XG5cdFx0XHRjb25zdCBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rRmlsdGVyW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgbGlua0ZpbHRlciBvZiBvQXJncykge1xuXHRcdFx0XHRpZiAoISFsaW5rRmlsdGVyICYmICEhbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRcdGFDYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaCh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpbmtGaWx0ZXIsIFwibGlua3NcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKGxpbmtGaWx0ZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgb2xkQXJnczogb0FyZ3MsIG5ld0FyZ3M6IGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMsIGNhY2hlZExpbmtzOiBhQ2FjaGVkU2VtYW50aWNPYmplY3RzIH07XG5cdFx0fTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IHVzZXJJbmZvU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJVc2VySW5mb1wiKTtcblx0XHRjb25zdCBvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVVJMUGFyc2luZ1wiKTtcblx0XHRjb25zdCBvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJTaGVsbE5hdmlnYXRpb25JbnRlcm5hbFwiKTtcblx0XHRjb25zdCBvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlBsdWdpbk1hbmFnZXJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQZXJzb25hbGl6YXRpb25WMlwiKTtcblx0XHRjb25zdCBvU2hlbGxVSVNlcnZpY2VQcm9taXNlID0gb0NvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFVJU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlLFxuXHRcdFx0b1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2Vcblx0XHRdKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdChbXG5cdFx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2UsXG5cdFx0XHRcdFx0dXNlckluZm9TZXJ2aWNlLFxuXHRcdFx0XHRcdG9VcmxQYXJzaW5nU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxOYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdG9TaGVsbFVJU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbFBsdWdpbk1hbmFnZXIsXG5cdFx0XHRcdFx0b1NoZWxsRXh0ZW5zaW9uU2VydmljZVxuXHRcdFx0XHRdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2VydmljZSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMudXNlckluZm9TZXJ2aWNlID0gdXNlckluZm9TZXJ2aWNlIGFzIFVzZXJJbmZvO1xuXHRcdFx0XHRcdHRoaXMudXJsUGFyc2luZ1NlcnZpY2UgPSBvVXJsUGFyc2luZ1NlcnZpY2UgYXMgVVJMUGFyc2luZztcblx0XHRcdFx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbiA9IG9TaGVsbE5hdmlnYXRpb24gYXMgU2hlbGxOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxVSVNlcnZpY2UgPSBvU2hlbGxVSVNlcnZpY2U7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgPSBvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIGFzIFBlcnNvbmFsaXphdGlvbldpdGhDb25zdGFudHM7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIgPSBvU2hlbGxQbHVnaW5NYW5hZ2VyIGFzIFNoZWxsUGx1Z2luTWFuYWdlcjtcblx0XHRcdFx0XHR0aGlzLmV4dGVuc2lvblNlcnZpY2UgPSBvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIGFzIEV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVGbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdFx0LmNhdGNoKHRoaXMucmVqZWN0Rm4pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byB0YXJnZXQgbGlua3MgYXJyYXlcblx0ICovXG5cdGFzeW5jIGdldExpbmtzKG9BcmdzPzogTGlua0ZpbHRlcltdKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRMaW5rcyhvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2Ygc2VtYW50aWMgb2JqZWN0cyBvZiB0aGUgaW50ZW50cyB0aGUgY3VycmVudCB1c2VyIGNhbiBuYXZpZ2F0ZSB0by5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmUgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgc2VtYW50aWMgb2JqZWN0cyBvZiB0aGUgaW50ZW50cyB0aGUgY3VycmVudCB1c2VyIGNhbiBuYXZpZ2F0ZSB0bywgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIG1lc3NhZ2Vcblx0ICovXG5cdGFzeW5jIF9fZmV0Y2hTZW1hbnRpY09iamVjdCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFNlbWFudGljT2JqZWN0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uIGluIGNhY2hlXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byB0YXJnZXQgbGlua3MgYXJyYXlcblx0ICovXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogTGlua0ZpbHRlcltdKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdGlmICgob0FyZ3MgYXMgT2JqZWN0W10pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ2FjaGVSZXN1bHRzID0gdGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlKG9BcmdzKTtcblxuXHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMubmV3QXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3M7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRMaW5rcyhvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MpO1xuXHRcdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNMaW5rczogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tpXS5sZW5ndGggPiAwICYmIG9DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5saW5rcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdHNMaW5rc1tvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdID0ge1xuXHRcdFx0XHRcdFx0XHRcdGxpbmtzOiBhTGlua3NbaV1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0dGhpcy5saW5rc0NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLmxpbmtzQ2FjaGUsIG9TZW1hbnRpY09iamVjdHNMaW5rcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFMaW5rcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhTWVyZ2VkTGlua3MgPSBbXTtcblx0XHRcdFx0XHRsZXQgaiA9IDA7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygb0NhY2hlUmVzdWx0cy5vbGRBcmdzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaiA8IGFMaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tqXS5sZW5ndGggPiAwICYmIGl0ZW1bMF0uc2VtYW50aWNPYmplY3QgPT09IG9DYWNoZVJlc3VsdHMubmV3QXJnc1tqXVswXS5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGFMaW5rc1tqXSk7XG5cdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChpdGVtWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGFNZXJnZWRMaW5rcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBTaGVsbENvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgT2JqZWN0IHdpdGggcHJlZGVmaW5lZCBzaGVsbENvbnRhaW5lciBtZXRob2RzXG5cdCAqL1xuXHRnZXRTaGVsbENvbnRhaW5lcigpOiBDb250YWluZXIge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdG9FeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdkFyZ3VtZW50c0FyciBBbmRcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+dG9FeHRlcm5hbCBhcmd1bWVudHNcblx0ICovXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5uYXZpZ2F0ZShvTmF2QXJndW1lbnRzQXJyLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBzdGFydHVwQXBwU3RhdGVcblx0ICogV2lsbCBjaGVjayB0aGUgZXhpc3RhbmNlIG9mIHRoZSBTaGVsbENvbnRhaW5lciBhbmQgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldFN0YXJ0dXBBcHBTdGF0ZSBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIE9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRTdGFydHVwQXBwU3RhdGUob0FyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBiYWNrVG9QcmV2aW91c0FwcCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU29tZXRoaW5nIHRoYXQgaW5kaWNhdGUgd2UndmUgbmF2aWdhdGVkXG5cdCAqL1xuXHRhc3luYyBiYWNrVG9QcmV2aW91c0FwcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogQHBhcmFtIG9Db21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbChvQXJnczogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0SHJlZihvQXJncywgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgVVJMIHRoYXQgbGF1bmNoZXMgYW4gYXBwIHdpdGggY2VydGFpbiBwYXJhbWV0ZXJzLlxuXHQgKiBUaGlzIEFQSSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCBzaGVsbCBoYXNoIGZvcm1hdCBpbnRvIHRoZSBVUkwgZm9ybWF0IGZvciB1c2UgaW4gbGluayB0YWdzLlxuXHQgKiBUaGUgcmVzdWx0aW5nIGhyZWYgaXMgZnVsbHkgZW5jb2RlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gb3RoZXIgQVBJcyB0aGF0IGV4cGVjdCB0aGUgaW50ZXJuYWwgZGVjb2RlZCBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gW29UYXJnZXRdIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB0byB0cmFuc2Zvcm0uIFdoZW4sIG9taXR0ZWQgdGhlIGN1cnJlbnQgaGFzaCBpcyB1c2VkIGFzIHRoZSBiYXNpcyBmb3IgdGhlIGNhbGN1bGF0aW9uLlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgZW5jb2RlZCBocmVmLlxuXHQgKi9cblx0YXN5bmMgZ2V0SHJlZihvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9UYXJnZXQsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQgYW5kIG9BcHBTdGF0ZUtleS5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHBhcmFtIHNBcHBTdGF0ZUtleSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVFbXB0eUFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Y3JlYXRlRW1wdHlBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGFyZ2V0c1xuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5pc05hdmlnYXRpb25TdXBwb3J0ZWQgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0czogVGFyZ2V0W10sIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0cywgb0NvbXBvbmVudCkgYXMgdW5rbm93biBhcyBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT47XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHRvIGEgc3BlY2lmaWVkIHRhcmdldCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9UYXJnZXQgVGhlIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQuIFRoZSBQcm9taXNlIG1pZ2h0IG5ldmVyIHJlamVjdCBvciByZXNvbHZlXG5cdCAqICAgICAgICAgICAgICAgICAgICB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZShvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldCwgb0NvbXBvbmVudCkpIGFzIHVua25vd24gYXMgUHJvbWlzZTx1bmRlZmluZWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBib29sZWFuXG5cdCAqL1xuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5pc0luaXRpYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGV4cGFuZENvbXBhY3RIYXNoIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2hGcmFnbWVudCBBbiAoaW50ZXJuYWwgZm9ybWF0KSBzaGVsbCBoYXNoXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGUgc3VjY2VzcyBoYW5kbGVyIG9mIHRoZSByZXNvbHZlIHByb21pc2UgZ2V0IGFuIGV4cGFuZGVkIHNoZWxsIGhhc2ggYXMgZmlyc3QgYXJndW1lbnRcblx0ICovXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHNIYXNoRnJhZ21lbnQ7IC8vdGhpcy5uYXZUYXJnZXRSZXNvbHV0aW9uLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgIyR7dGhpcy51cmxQYXJzaW5nU2VydmljZS5nZXRTaGVsbEhhc2god2luZG93LmxvY2F0aW9uLmhyZWYpfWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIHBsdWdpbnMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlciwgc29ydGVkIGJ5IHN1cHBvcnRlZCBwbHVnaW4gY2F0ZWdvcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgTWFwIG9mIHJlZ2lzdGVyZWQgcGx1Z2luc1xuXHQgKi9cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIHNldHVwIGluIHRoZSBGTFAuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIGlzIHNldCB1cCBhbmQgZW5hYmxlZC5cblx0ICovXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgPSB0aGlzLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCkuUmVuZGVyZXJFeHRlbnNpb25zO1xuXHRcdGlmIChcblx0XHRcdGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnM/Lmhhc093blByb3BlcnR5KFwiTUFOQUdFX0ZFX0NBQ0hFU1wiKSAmJlxuXHRcdFx0ISEoZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+PikuTUFOQUdFX0ZFX0NBQ0hFUy5lbmFibGVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcGFyc2VTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgVGhlIHBhcnNlZCB1cmxcblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnNwbGl0SGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiB7IHNoZWxsUGFydD86IHN0cmluZzsgYXBwU3BlY2lmaWNSb3V0ZT86IHN0cmluZyB9IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5zcGxpdEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjb25zdHJ1Y3RTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0RGlydHlGbGFnIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVSZW5kZXJlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZVJlbmRlcmVyKCk6IFByb21pc2U8Q29udHJvbCB8IENvbXBvbmVudENvbnRhaW5lcj4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIFVzZXIgb2JqZWN0XG5cdCAqL1xuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4gdGhpcy51c2VySW5mb1NlcnZpY2U7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmlzSmFtQWN0aXZlKCk7XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldEluaXRpYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjaGVjayBpZiB1c2hlbGwgY29udGFpbmVyIGlzIGF2YWlsYWJsZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcblx0ICovXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqL1xuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi51bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEJhY2tOYXZpZ2F0aW9uIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBiYWNrIGJ1dHRvbiBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsQmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqL1xuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICovXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBvYmplY3RbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICovXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxVSVNlcnZpY2UuZ2V0VGl0bGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbnRlbnQgZGVuc2l0eS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRlbnQgZGVuc2l0eSB2YWx1ZVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0LCB0aGlzIG1ldGhvZCBjb25zaWRlcnMgYWxsIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kXG5cdCAqIHJldHVybnMgdGhlIG9uZSB0YWdnZWQgYXMgYSBcInByaW1hcnlBY3Rpb25cIi4gSWYgbm8gaW5ib3VuZCB0YWdnZWQgYXMgXCJwcmltYXJ5QWN0aW9uXCIgZXhpc3RzLCB0aGVuIGl0IHJldHVybnNcblx0ICogdGhlIGludGVudCBvZiB0aGUgZmlyc3QgaW5ib3VuZCAoYWZ0ZXIgc29ydGluZyBoYXMgYmVlbiBhcHBsaWVkKSBtYXRjaGluZyB0aGUgYWN0aW9uIFwiZGlzcGxheUZhY3RTaGVldFwiLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogTGlua0ZpbHRlcik6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnQgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByaW1hcnlJbnRlbnQpKSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudFswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIHRoZSByZW5kZXIgZXh0ZW5zaW9ucyBwbHVnaW4gdG8gYmUgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHdlIGFyZSBhYmxlIHRvIHdhaXQgZm9yIGl0LCBvdGhlcndpc2Ugd2UgY291bGRuJ3QgYW5kIGNhbm5vdCByZWx5IG9uIGl0LlxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnNoZWxsUGx1Z2luTWFuYWdlcj8uZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXJcblx0XHRcdFx0XHQuZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoXCJSZW5kZXJlckV4dGVuc2lvbnNcIilcblx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZywgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzRmFjdG9yeS53YWl0Rm9yUGx1Z2luc0xvYWRcIik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcGVyc29uYWxpemVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqIFdlIHNldCBzb21lIGRlZmF1bHRzIGZvciB0aGUgc2NvcGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGVyc0lkIFBlcnNvbmFsaXphdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcGFyYW0gY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFBlcnNvbmFsaXplciBvYmplY3Qgd2hpY2ggaGFuZGxlcyBwZXJzb25hbGl6YXRpb25cblx0ICovXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRzY29wZSA9IHtcblx0XHRcdC8vIG1lcmdlIHNvbWUgZGVmYXVsdHNcblx0XHRcdGtleUNhdGVnb3J5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMua2V5Q2F0ZWdvcnkuRklYRURfS0VZLFxuXHRcdFx0d3JpdGVGcmVxdWVuY3k6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy53cml0ZUZyZXF1ZW5jeS5MT1csXG5cdFx0XHRjbGllbnRTdG9yYWdlQWxsb3dlZDogZmFsc2UsXG5cdFx0XHR2YWxpZGl0eTogSW5maW5pdHksXG5cdFx0XHQuLi5zY29wZVxuXHRcdH07XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5nZXRQZXJzb25hbGl6ZXIocGVyc0lkLCBzY29wZSwgY29tcG9uZW50KSkgYXMgUGVyc29uYWxpemVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29udGFpbmVyIGlkZW50aWZpZWQgYnkgc0NvbnRhaW5lcktleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBDb250YWluZXIga2V5XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVsZXRlZFxuXHQgKi9cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5kZWxldGVDb250YWluZXIoa2V5LCBzY29wZSBhcyB1bmtub3duIGFzIG9iamVjdCkgYXMgUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGNvbmZpZyBmcm9tIHRoZSB3aW5kb3dzIG9iamVjdC5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgY29uZmlnIG9iamVjdFxuXHQgKi9cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4gKHdpbmRvdyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4pW1wic2FwLXVzaGVsbC1jb25maWdcIl0gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHBhcmFtZXRlcnMgZnJvbSBhIFVSSSBxdWVyeSBzdHJpbmcgKHN0YXJ0aW5nIHdpdGggPykgaW50byBhIHBhcmFtZXRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB1cmwgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogUGFyYW1ldGVyIHN0cmluZ1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmcgc3RyaW5nIGFycmF5c1xuXHQgKi9cblx0cGFyc2VQYXJhbWV0ZXJzKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVBhcmFtZXRlcnModXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGV4dGVuc2lvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBTaGVsbCBleHRlbnNpb24gc2VydmljZVxuXHQgKi9cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb24ge1xuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvblNlcnZpY2U7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFNoZWxsU2VydmljZXNTZXR0aW5ncz4ge1xuXHQvKipcblx0ICogQ3JlYXRlcyBlaXRoZXIgYSBzdGFuZGFyZCBvciBhIG1vY2sgU2hlbGwgc2VydmljZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhIHNoZWxsIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cblx0ICogQHNlZSBTZXJ2aWNlRmFjdG9yeSNjcmVhdGVJbnN0YW5jZVxuXHQgKi9cblx0YXN5bmMgY3JlYXRlSW5zdGFuY2Uoc2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz4pOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPiB7XG5cdFx0c2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXIgPSBzYXAudWkucmVxdWlyZShcInNhcC91c2hlbGwvQ29udGFpbmVyXCIpO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyXG5cdFx0XHQ/IG5ldyBTaGVsbFNlcnZpY2VzKHNlcnZpY2VDb250ZXh0IGFzIFNlcnZpY2VDb250ZXh0PFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+KVxuXHRcdFx0OiBuZXcgU2hlbGxTZXJ2aWNlTW9jayhzZXJ2aWNlQ29udGV4dCk7XG5cdFx0YXdhaXQgc2hlbGxTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHRcdC8vIEVucmljaCB0aGUgYXBwQ29tcG9uZW50IHdpdGggdGhpcyBtZXRob2Rcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBzZXJ2aWNlQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcyA9ICgpOiBJU2hlbGxTZXJ2aWNlcyA9PiBzaGVsbFNlcnZpY2U7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRsZXQgc2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzID0gYXdhaXQgc2hlbGxTZXJ2aWNlLl9fZmV0Y2hTZW1hbnRpY09iamVjdCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FsbGluZyBnZXRTZW1hbnRpY09iamVjdHNcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIsIHNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaGVsbFNlcnZpY2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hlbGxTZXJ2aWNlc0ZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQXdLQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQSxPQU9yQkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBbUI7TUFDMUQsSUFBSSxDQUFDQyxZQUFZLEdBQUcsTUFBTTtJQUMzQixDQUFDO0lBQUEsT0FFS0MsUUFBUSxHQUFkLHlCQUFlO0lBQUEsRUFBc0M7TUFDcEQsT0FBT0gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLRyxxQkFBcUIsR0FBM0IsdUNBQWlEO01BQ2hELE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0ksaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQXNDO01B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
813
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJnZXRVc2VySW5pdGlhbHMiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInNldEJhY2tOYXZpZ2F0aW9uIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJnZXRDb250ZW50RGVuc2l0eSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0UHJpbWFyeUludGVudCIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImdldFRpdGxlIiwiZ2V0UGVyc29uYWxpemVyIiwiX3BlcnNJZCIsIl9zY29wZSIsIl9jb21wb25lbnQiLCJnZXRQZXJzRGF0YSIsImhpc3RvcnlFbmFibGVkIiwic3VnZ2VzdGlvbnNFbmFibGVkIiwiYXBwcyIsInNldFBlcnNEYXRhIiwiZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyIiwiX2tleSIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsImdldEV4dGVuc2lvblNlcnZpY2UiLCJTZXJ2aWNlIiwiU2hlbGxTZXJ2aWNlcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9TaGVsbENvbnRhaW5lciIsInNldHRpbmdzIiwic2hlbGxDb250YWluZXIiLCJsaW5rc0NhY2hlIiwiZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSIsIm9BcmdzIiwiYUNhY2hlZFNlbWFudGljT2JqZWN0cyIsImFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMiLCJsaW5rRmlsdGVyIiwic2VtYW50aWNPYmplY3QiLCJwdXNoIiwibGlua3MiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwib2xkQXJncyIsIm5ld0FyZ3MiLCJjYWNoZWRMaW5rcyIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwibmF2aWdhdGlvblNlcnZpY2VQIiwiZ2V0U2VydmljZUFzeW5jIiwidXNlckluZm9TZXJ2aWNlUCIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSIsIm9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJuYXZpZ2F0aW9uU2VydmljZSIsInVzZXJJbmZvU2VydmljZSIsIm9VcmxQYXJzaW5nU2VydmljZSIsIm9TaGVsbE5hdmlnYXRpb24iLCJvU2hlbGxVSVNlcnZpY2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwib1NoZWxsUGx1Z2luTWFuYWdlciIsIm9TaGVsbEV4dGVuc2lvblNlcnZpY2UiLCJhcHBsaWNhdGlvbk5hdmlnYXRpb24iLCJ1cmxQYXJzaW5nU2VydmljZSIsInNoZWxsTmF2aWdhdGlvbiIsInNoZWxsVUlTZXJ2aWNlIiwic2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwic2hlbGxQbHVnaW5NYW5hZ2VyIiwiZXh0ZW5zaW9uU2VydmljZSIsImNhdGNoIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsImkiLCJhc3NpZ24iLCJhTWVyZ2VkTGlua3MiLCJqIiwiaXRlbSIsImdldFNoZWxsQ29udGFpbmVyIiwib05hdkFyZ3VtZW50c0FyciIsIm9UYXJnZXQiLCJzQXBwU3RhdGVLZXkiLCJhVGFyZ2V0cyIsInNIYXNoRnJhZ21lbnQiLCJnZXRTaGVsbEhhc2giLCJmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIiwiaGFzT3duUHJvcGVydHkiLCJNQU5BR0VfRkVfQ0FDSEVTIiwiZW5hYmxlZCIsIm9OZXdTaGVsbEhhc2giLCJiRGlydHkiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImdldEluaXRpYWxzIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwicHJpbWFyeUludGVudCIsIkFycmF5IiwiaXNBcnJheSIsImdldFBsdWdpbkxvYWRpbmdQcm9taXNlIiwiZmFpbCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInNlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwic2hlbGxTZXJ2aWNlIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInNlbWFudGljT2JqZWN0cyIsInNldFByb3BlcnR5IiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTGluaywgTGlua0ZpbHRlciwgVGFyZ2V0IH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uVjIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB7IHR5cGUgUGVyc0lkLCB0eXBlIFNjb3BlIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRIYXNoIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgVXNlckluZm8gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVXNlckluZm9cIjtcbmltcG9ydCB0eXBlIFNoZWxsVUlTZXJ2aWNlIGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBBcHBTdGF0ZSA9IHtcblx0Z2V0RGF0YSgpOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudD86IHtcblx0XHRcdFNlbGVjdE9wdGlvbnM/OiB7XG5cdFx0XHRcdFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRSYW5nZXM6IHtcblx0XHRcdFx0XHRPcHRpb246IHN0cmluZztcblx0XHRcdFx0XHRTaWduOiBzdHJpbmc7XG5cdFx0XHRcdFx0TG93OiBzdHJpbmc7XG5cdFx0XHRcdH1bXTtcblx0XHRcdH1bXTtcblx0XHR9O1xuXHR9O1xufTtcblxuLy8gc2VlOiBzYXBcXHVzaGVsbFxcc2VydmljZXNcXF9QZXJzb25hbGl6YXRpb25cXGNvbnN0YW50cy5qc1xuZXhwb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cyA9IFBlcnNvbmFsaXphdGlvblYyICYge1xuXHRjb25zdGFudHM6IHtcblx0XHRrZXlDYXRlZ29yeToge1xuXHRcdFx0RklYRURfS0VZOiBzdHJpbmc7XG5cdFx0XHRHRU5FUkFURURfS0VZOiBzdHJpbmc7XG5cdFx0fTtcblx0XHR3cml0ZUZyZXF1ZW5jeToge1xuXHRcdFx0SElHSDogc3RyaW5nO1xuXHRcdFx0TE9XOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFsaXplclR5cGUgPSB7XG5cdGdldFBlcnNEYXRhOiAoKSA9PiBQcm9taXNlPG9iamVjdD47XG5cdHNldFBlcnNEYXRhOiAocGVyc0RhdGE6IG9iamVjdCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsQ29uZmlnVHlwZSA9IHtcblx0YXBwczoge1xuXHRcdGlucHV0RmllbGRIaXN0b3J5OiB7XG5cdFx0XHRlbmFibGVkOiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBGTFBQbHVnaW4gPSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR1cmw6IHN0cmluZztcblx0Y29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlID0ge1xuXHRBcHBXYXJtdXA6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0UmVuZGVyZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJEZWZhdWx0czogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VySW1hZ2U6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcbn07XG5cbi8qKlxuICogQGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblxuXHRnZXRMaW5rcyhvQXJncz86IE9taXQ8TGlua0ZpbHRlciwgXCJ1aTVDb21wb25lbnRcIj5bXSk6IFByb21pc2U8TGlua1tdW10+O1xuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhyZWYob1RhcmdldDogb2JqZWN0LCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPjtcblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhhc2goKTogc3RyaW5nO1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoO1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPjtcblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nO1xuXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdDtcblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvO1xuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nO1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxMaW5rPjtcblxuXHR3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG5cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbjtcblxuXHRnZXRUaXRsZSgpOiBzdHJpbmc7XG5cblx0Z2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT47XG5cblx0ZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD47XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlO1xuXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInBhcnNlUGFyYW1ldGVyc1wiXT47XG5cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb247XG59XG50eXBlIE5hdmlnYXRpb25FeHRlbnNpb24gPSBOYXZpZ2F0aW9uICYge1xuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FwcENvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+O1xuXHRnZXRBcHBTdGF0ZShvQXBwQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKFxuXHRcdG9BcHBDb21wb25lbnQ6IENvbXBvbmVudCxcblx0XHRiVHJhbnNpZW50RW5mb3JjZWQ/OiBib29sZWFuLFxuXHRcdHNQZXJzaXN0ZW5jeU1ldGhvZD86IHN0cmluZyxcblx0XHRvUGVyc2lzdGVuY3lTZXR0aW5ncz86IG9iamVjdFxuXHQpOiBQcm9taXNlPG9iamVjdD47XG59O1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZSBmb3IgT3BlbkZFXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VNb2NrIGV4dGVuZHMgU2VydmljZTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyBhcyBJU2hlbGxTZXJ2aWNlcyk7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcIm1vY2tcIjtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0dG9FeHRlcm5hbCgvKm9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0SHJlZigvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlKC8qb1RhcmdldDogVGFyZ2V0LG9Db21wb25lbnQ/OiBDb21wb25lbnQqLyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKC8qc0hhc2hGcmFnbWVudDogc3RyaW5nKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB7fSBhcyB1bmtub3duIGFzIFBhcnNlZEhhc2g7XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT4ge1xuXHRcdC8qKlxuXHRcdCAqIEZvciBhbiBBcHBsaWNhdGlvbiB3aXRob3V0IFNoZWxsLCB0aGUgaGFzaCBpcyBzaW1pbGFyIHRvIDogIy9TYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOlxuXHRcdCAqIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IFwiU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXCJcblx0XHR9XG5cdFx0ICovXG5cdFx0Y29uc3QgcmVnZXggPSAvI1teL10qXFwvKC4qKS8uZXhlYyhzSGFzaCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IHJlZ2V4Py5sZW5ndGggPT09IDIgPyByZWdleFsxXSA6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKC8qYkRpcnR5OiBib29sZWFuKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4ge30gYXMgVXNlckluZm87XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRCYWNrTmF2aWdhdGlvbigvKmZuQ2FsbEJhY2s/OiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0c2V0SGllcmFyY2h5KC8qYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0PiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0c2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHQvLyBpbiBjYXNlIHRoZXJlIGlzIG5vIHNoZWxsIHdlIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgY2xhc3NlcyBiZWluZyBkZWZpbmVkIG9uIHRoZSBib2R5XG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ296eVwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY296eVwiO1xuXHRcdH0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb21wYWN0XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb21wYWN0XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoLypzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QqLyk6IFByb21pc2U8TGluaz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkIGFzIHVua25vd24gYXMgTGluayk7XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxuXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKF9rZXk6IHN0cmluZywgX3Njb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4ge30gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0QXBwV2FybXVwOiB7fSxcblx0XHRcdFJlbmRlcmVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRVc2VyRGVmYXVsdHM6IHt9LFxuXHRcdFx0VXNlckltYWdlOiB7fVxuXHRcdH07XG5cdH1cblxuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwYXJzZVBhcmFtZXRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRnZXRFeHRlbnNpb25TZXJ2aWNlKCk6IEV4dGVuc2lvbiB7XG5cdFx0cmV0dXJuIHt9IGFzIEV4dGVuc2lvbjtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFNoZWxsU2VydmljZXNTZXR0aW5nc1xuICovXG5leHBvcnQgdHlwZSBTaGVsbFNlcnZpY2VzU2V0dGluZ3MgPSB7XG5cdHNoZWxsQ29udGFpbmVyPzogQ29udGFpbmVyO1xufTtcblxudHlwZSBTaGVsbFBsdWdpbk1hbmFnZXIgPSB7XG5cdGdldFBsdWdpbkxvYWRpbmdQcm9taXNlKGNhdGVnb3J5OiBzdHJpbmcpOiBqUXVlcnkuUHJvbWlzZTtcblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xufTtcblxudHlwZSBQcml2YXRlU2hlbGxVc2VyID0ge1xuXHRnZXRJbml0aWFscygpOiBzdHJpbmc7XG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcbn07XG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlcyBleHRlbmRzIFNlcnZpY2U8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdHJlc29sdmVGbiE6IEZ1bmN0aW9uO1xuXG5cdHJlamVjdEZuITogKCkgPT4gdm9pZDtcblxuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXG5cdGFwcGxpY2F0aW9uTmF2aWdhdGlvbiE6IE5hdmlnYXRpb25FeHRlbnNpb247XG5cblx0dXNlckluZm9TZXJ2aWNlITogVXNlckluZm87XG5cblx0dXJsUGFyc2luZ1NlcnZpY2UhOiBVUkxQYXJzaW5nO1xuXG5cdHNoZWxsTmF2aWdhdGlvbiE6IFNoZWxsTmF2aWdhdGlvbjtcblxuXHRzaGVsbFBsdWdpbk1hbmFnZXIhOiBTaGVsbFBsdWdpbk1hbmFnZXI7XG5cblx0b1NoZWxsQ29udGFpbmVyITogQ29udGFpbmVyICYgeyBnZXRVc2VyOiAoKSA9PiBQcml2YXRlU2hlbGxVc2VyIH07XG5cblx0c2hlbGxVSVNlcnZpY2UhOiBTaGVsbFVJU2VydmljZTtcblxuXHRzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UhOiBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRsaW5rc0NhY2hlITogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+O1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUhOiBGdW5jdGlvbjtcblxuXHRleHRlbnNpb25TZXJ2aWNlITogRXh0ZW5zaW9uO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgQ29tcG9uZW50O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IExpbmtGaWx0ZXJbXSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rW11bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua0ZpbHRlcltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtGaWx0ZXIgb2Ygb0FyZ3MpIHtcblx0XHRcdFx0aWYgKCEhbGlua0ZpbHRlciAmJiAhIWxpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzKTtcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaW5rRmlsdGVyLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaChsaW5rRmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uSW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQbHVnaW5NYW5hZ2VyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGVyc29uYWxpemF0aW9uVjJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSA9IG9Db21wb25lbnQuZ2V0U2VydmljZShcIlNoZWxsVUlTZXJ2aWNlXCIpO1xuXHRcdGNvbnN0IG9TaGVsbEV4dGVuc2lvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiRXh0ZW5zaW9uXCIpO1xuXG5cdFx0UHJvbWlzZS5hbGwoW1xuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2VQLFxuXHRcdFx0dXNlckluZm9TZXJ2aWNlUCxcblx0XHRcdG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxVSVNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSxcblx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2VQcm9taXNlXG5cdFx0XSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoW1xuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlLFxuXHRcdFx0XHRcdHVzZXJJbmZvU2VydmljZSxcblx0XHRcdFx0XHRvVXJsUGFyc2luZ1NlcnZpY2UsXG5cdFx0XHRcdFx0b1NoZWxsTmF2aWdhdGlvbixcblx0XHRcdFx0XHRvU2hlbGxVSVNlcnZpY2UsXG5cdFx0XHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyLFxuXHRcdFx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2Vcblx0XHRcdFx0XSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNlcnZpY2UgYXMgTmF2aWdhdGlvbkV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnVzZXJJbmZvU2VydmljZSA9IHVzZXJJbmZvU2VydmljZSBhcyBVc2VySW5mbztcblx0XHRcdFx0XHR0aGlzLnVybFBhcnNpbmdTZXJ2aWNlID0gb1VybFBhcnNpbmdTZXJ2aWNlIGFzIFVSTFBhcnNpbmc7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uIGFzIFNoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlID0gb1NoZWxsVUlTZXJ2aWNlO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlID0gb1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSBhcyBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyID0gb1NoZWxsUGx1Z2luTWFuYWdlciBhcyBTaGVsbFBsdWdpbk1hbmFnZXI7XG5cdFx0XHRcdFx0dGhpcy5leHRlbnNpb25TZXJ2aWNlID0gb1NoZWxsRXh0ZW5zaW9uU2VydmljZSBhcyBFeHRlbnNpb247XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRm4oKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHRcdC5jYXRjaCh0aGlzLnJlamVjdEZuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBsaW5rcyBjb25maWd1cmVkIGZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCAmIGFjdGlvblxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRMaW5rcyBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRhc3luYyBnZXRMaW5rcyhvQXJncz86IExpbmtGaWx0ZXJbXSk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0TGlua3Mob0FyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IG9mIHNlbWFudGljIG9iamVjdHMgb2YgdGhlIGludGVudHMgdGhlIGN1cnJlbnQgdXNlciBjYW4gbmF2aWdhdGUgdG8uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIHNlbWFudGljIG9iamVjdHMgb2YgdGhlIGludGVudHMgdGhlIGN1cnJlbnQgdXNlciBjYW4gbmF2aWdhdGUgdG8sIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRhc3luYyBfX2ZldGNoU2VtYW50aWNPYmplY3QoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRTZW1hbnRpY09iamVjdHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBsaW5rcyBjb25maWd1cmVkIGZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCAmIGFjdGlvbiBpbiBjYWNoZVxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRMaW5rcyBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRhc3luYyBnZXRMaW5rc1dpdGhDYWNoZShvQXJncz86IExpbmtGaWx0ZXJbXSk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRpZiAoKG9BcmdzIGFzIE9iamVjdFtdKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NhY2hlUmVzdWx0cyA9IHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZShvQXJncyk7XG5cblx0XHRcdGlmIChvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FjaGVSZXN1bHRzLmNhY2hlZExpbmtzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0TGlua3Mob0NhY2hlUmVzdWx0cy5uZXdBcmdzKTtcblx0XHRcdFx0aWYgKGFMaW5rcy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3RzTGlua3M6IFJlY29yZDxzdHJpbmcsIHsgbGlua3M6IExpbmtbXSB9PiA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmIChhTGlua3NbaV0ubGVuZ3RoID4gMCAmJiBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0ubGlua3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RzTGlua3Nbb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0XSA9IHtcblx0XHRcdFx0XHRcdFx0XHRsaW5rczogYUxpbmtzW2ldXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHRoaXMubGlua3NDYWNoZSA9IE9iamVjdC5hc3NpZ24odGhpcy5saW5rc0NhY2hlLCBvU2VtYW50aWNPYmplY3RzTGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvQ2FjaGVSZXN1bHRzLmNhY2hlZExpbmtzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJldHVybiBhTGlua3M7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgYU1lcmdlZExpbmtzID0gW107XG5cdFx0XHRcdFx0bGV0IGogPSAwO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIG9DYWNoZVJlc3VsdHMub2xkQXJncykge1xuXHRcdFx0XHRcdFx0aWYgKGogPCBhTGlua3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhTGlua3Nbal0ubGVuZ3RoID4gMCAmJiBpdGVtWzBdLnNlbWFudGljT2JqZWN0ID09PSBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3Nbal1bMF0uc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChhTGlua3Nbal0pO1xuXHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChpdGVtWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBhTWVyZ2VkTGlua3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHRvRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqL1xuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IHZvaWQge1xuXHRcdHRoaXMubmF2aWdhdGUob05hdkFyZ3VtZW50c0Fyciwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgc3RhcnR1cEFwcFN0YXRlXG5cdCAqIFdpbGwgY2hlY2sgdGhlIGV4aXN0YW5jZSBvZiB0aGUgU2hlbGxDb250YWluZXIgYW5kIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRTdGFydHVwQXBwU3RhdGUgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRTdGFydHVwQXBwU3RhdGUgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBPYmplY3Rcblx0ICovXG5cdGFzeW5jIGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgYmFja1RvUHJldmlvdXNBcHAgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFNvbWV0aGluZyB0aGF0IGluZGljYXRlIHdlJ3ZlIG5hdmlnYXRlZFxuXHQgKi9cblx0YXN5bmMgYmFja1RvUHJldmlvdXNBcHAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmJhY2tUb1ByZXZpb3VzQXBwKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGhyZWZGb3JFeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aHJlZkZvckV4dGVybmFsIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gc3RyaW5nXG5cdCAqL1xuXHRhc3luYyBocmVmRm9yRXh0ZXJuYWwob0FyZ3M6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEhyZWYob0FyZ3MsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byBhIFVSTCB0aGF0IGxhdW5jaGVzIGFuIGFwcCB3aXRoIGNlcnRhaW4gcGFyYW1ldGVycy5cblx0ICogVGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gY29udmVydCB0aGUgaW50ZXJuYWwgc2hlbGwgaGFzaCBmb3JtYXQgaW50byB0aGUgVVJMIGZvcm1hdCBmb3IgdXNlIGluIGxpbmsgdGFncy5cblx0ICogVGhlIHJlc3VsdGluZyBocmVmIGlzIGZ1bGx5IGVuY29kZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGluIG90aGVyIEFQSXMgdGhhdCBleHBlY3QgdGhlIGludGVybmFsIGRlY29kZWQgaGFzaC5cblx0ICpcblx0ICogQHBhcmFtIFtvVGFyZ2V0XSBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgdG8gdHJhbnNmb3JtLiBXaGVuLCBvbWl0dGVkIHRoZSBjdXJyZW50IGhhc2ggaXMgdXNlZCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjYWxjdWxhdGlvbi5cblx0ICogQHBhcmFtIFtvQ29tcG9uZW50XSBBIFVJNSBjb21wb25lbnQsIHVzZWQgdG8gbG9naWNhbGx5IGF0dGFjaCBhbnkgcmVsYXRlZCBhcHAgc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIGVuY29kZWQgaHJlZi5cblx0ICovXG5cdGFzeW5jIGdldEhyZWYob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0SHJlZihvVGFyZ2V0LCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50IGFuZCBvQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50XG5cdCAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0QXBwU3RhdGUgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGdldEFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0QXBwU3RhdGUob0NvbXBvbmVudCwgc0FwcFN0YXRlS2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmNyZWF0ZUVtcHR5QXBwU3RhdGUgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzTmF2aWdhdGlvblN1cHBvcnRlZCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVRhcmdldHNcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aXNOYXZpZ2F0aW9uU3VwcG9ydGVkIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoYVRhcmdldHM6IFRhcmdldFtdLCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5pc05hdmlnYXRpb25TdXBwb3J0ZWQoYVRhcmdldHMsIG9Db21wb25lbnQpIGFzIHVua25vd24gYXMgUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmllZCB0YXJnZXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgYXBwbGljYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFyZ2V0IFRoZSBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICogQHBhcmFtIFtvQ29tcG9uZW50XSBBIFVJNSBjb21wb25lbnQsIHVzZWQgdG8gbG9naWNhbGx5IGF0dGFjaCBhbnkgcmVsYXRlZCBhcHAgc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgb25jZSB0aGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkLiBUaGUgUHJvbWlzZSBtaWdodCBuZXZlciByZWplY3Qgb3IgcmVzb2x2ZVxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXQsIG9Db21wb25lbnQpKSBhcyB1bmtub3duIGFzIFByb21pc2U8dW5kZWZpbmVkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gYm9vbGVhblxuXHQgKi9cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNJbml0aWFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBleHBhbmRDb21wYWN0SGFzaCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoRnJhZ21lbnQgQW4gKGludGVybmFsIGZvcm1hdCkgc2hlbGwgaGFzaFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVzb2x2ZSBwcm9taXNlIGdldCBhbiBleHBhbmRlZCBzaGVsbCBoYXNoIGFzIGZpcnN0IGFyZ3VtZW50XG5cdCAqL1xuXHRhc3luYyBleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBzSGFzaEZyYWdtZW50OyAvL3RoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbi5leHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50KTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCMke3RoaXMudXJsUGFyc2luZ1NlcnZpY2UuZ2V0U2hlbGxIYXNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWxsIHRoZSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIFBsdWdpbk1hbmFnZXIsIHNvcnRlZCBieSBzdXBwb3J0ZWQgcGx1Z2luIGNhdGVnb3JpZXMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIE1hcCBvZiByZWdpc3RlcmVkIHBsdWdpbnNcblx0ICovXG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBzZXR1cCBpbiB0aGUgRkxQLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBpcyBzZXQgdXAgYW5kIGVuYWJsZWQuXG5cdCAqL1xuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zID0gdGhpcy5nZXRSZWdpc3RlcmVkUGx1Z2lucygpLlJlbmRlcmVyRXh0ZW5zaW9ucztcblx0XHRpZiAoXG5cdFx0XHRmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zPy5oYXNPd25Qcm9wZXJ0eShcIk1BTkFHRV9GRV9DQUNIRVNcIikgJiZcblx0XHRcdCEhKGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgb2JqZWN0Pj4pLk1BTkFHRV9GRV9DQUNIRVMuZW5hYmxlZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHBhcnNlU2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+cGFyc2VTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdXJsXG5cdCAqL1xuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VTaGVsbEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzcGxpdEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogeyBzaGVsbFBhcnQ/OiBzdHJpbmc7IGFwcFNwZWNpZmljUm91dGU/OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2Uuc3BsaXRIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY29uc3RydWN0U2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICpcblx0ICogQHBhcmFtIG9OZXdTaGVsbEhhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5jb25zdHJ1Y3RTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFNoZWxsIEhhc2ggc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICpcblx0ICogQHBhcmFtIGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICpcblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlUmVuZGVyZXIgbWV0aG9kIG9mIHVzaGVsbCBjb250YWluZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgcmVuZGVyZXIgb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVSZW5kZXJlcigpOiBQcm9taXNlPENvbnRyb2wgfCBDb21wb25lbnRDb250YWluZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuY3JlYXRlUmVuZGVyZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VXNlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHRoaXMudXNlckluZm9TZXJ2aWNlO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5pc0phbUFjdGl2ZSgpO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWVcblx0ICovXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24ucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdW5yZWdpc3RlclxuXHQgKi9cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24udW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRCYWNrTmF2aWdhdGlvbiBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgYmFjayBidXR0b24gaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIGZuQ2FsbEJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgaW4gdGhlIFVJLlxuXHQgKi9cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjazogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRIaWVyYXJjaHkgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIGhpZXJhcmNoeSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gW2FIaWVyYXJjaHlMZXZlbHNdIEFuIGFycmF5IHJlcHJlc2VudGluZyBoaWVyYXJjaGllcyBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBhcHAuXG5cdCAqL1xuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogb2JqZWN0W10pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBbc1RpdGxlXSBUaGUgbmV3IHRpdGxlLiBUaGUgZGVmYXVsdCB0aXRsZSBpcyBzZXQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZ2l2ZW4uXG5cdCAqL1xuXHRzZXRUaXRsZShzVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqL1xuXHRnZXRUaXRsZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsVUlTZXJ2aWNlLmdldFRpdGxlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBjb250ZW50IGRlbnNpdHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZW50IGRlbnNpdHkgdmFsdWVcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCwgdGhpcyBtZXRob2QgY29uc2lkZXJzIGFsbCBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZFxuXHQgKiByZXR1cm5zIHRoZSBvbmUgdGFnZ2VkIGFzIGEgXCJwcmltYXJ5QWN0aW9uXCIuIElmIG5vIGluYm91bmQgdGFnZ2VkIGFzIFwicHJpbWFyeUFjdGlvblwiIGV4aXN0cywgdGhlbiBpdCByZXR1cm5zXG5cdCAqIHRoZSBpbnRlbnQgb2YgdGhlIGZpcnN0IGluYm91bmQgKGFmdGVyIHNvcnRpbmcgaGFzIGJlZW4gYXBwbGllZCkgbWF0Y2hpbmcgdGhlIGFjdGlvbiBcImRpc3BsYXlGYWN0U2hlZXRcIi5cblx0ICpcblx0ICogQHBhcmFtIHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBTZWUgI0Nyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uI2dldExpbmtzIGZvciBkZXNjcmlwdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVudCBpZiBpdCBleGlzdHMuXG5cdCAqL1xuXHRhc3luYyBnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IExpbmtGaWx0ZXIpOiBQcm9taXNlPExpbms+IHtcblx0XHRjb25zdCBwcmltYXJ5SW50ZW50ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3QsIG1QYXJhbWV0ZXJzKTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShwcmltYXJ5SW50ZW50KSkge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnRbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcmVuZGVyIGV4dGVuc2lvbnMgcGx1Z2luIHRvIGJlIGxvYWRlZC5cblx0ICpcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB3ZSBhcmUgYWJsZSB0byB3YWl0IGZvciBpdCwgb3RoZXJ3aXNlIHdlIGNvdWxkbid0IGFuZCBjYW5ub3QgcmVseSBvbiBpdC5cblx0ICovXG5cdGFzeW5jIHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGlmICghdGhpcy5zaGVsbFBsdWdpbk1hbmFnZXI/LmdldFBsdWdpbkxvYWRpbmdQcm9taXNlKSB7XG5cdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRcdHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyXG5cdFx0XHRcdFx0LmdldFBsdWdpbkxvYWRpbmdQcm9taXNlKFwiUmVuZGVyZXJFeHRlbnNpb25zXCIpXG5cdFx0XHRcdFx0LmZhaWwoKG9FcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKG9FcnJvciBhcyBzdHJpbmcsIFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2hlbGxTZXJ2aWNlc0ZhY3Rvcnkud2FpdEZvclBsdWdpbnNMb2FkXCIpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHBlcnNvbmFsaXplciBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlLlxuXHQgKiBXZSBzZXQgc29tZSBkZWZhdWx0cyBmb3IgdGhlIHNjb3BlIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHBlcnNJZCBQZXJzb25hbGl6YXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHBhcmFtIGNvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBQZXJzb25hbGl6ZXIgb2JqZWN0IHdoaWNoIGhhbmRsZXMgcGVyc29uYWxpemF0aW9uXG5cdCAqL1xuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIocGVyc0lkOiBQZXJzSWQsIHNjb3BlOiBTY29wZSwgY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0c2NvcGUgPSB7XG5cdFx0XHQvLyBtZXJnZSBzb21lIGRlZmF1bHRzXG5cdFx0XHRrZXlDYXRlZ29yeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLmtleUNhdGVnb3J5LkZJWEVEX0tFWSxcblx0XHRcdHdyaXRlRnJlcXVlbmN5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMud3JpdGVGcmVxdWVuY3kuTE9XLFxuXHRcdFx0Y2xpZW50U3RvcmFnZUFsbG93ZWQ6IGZhbHNlLFxuXHRcdFx0dmFsaWRpdHk6IEluZmluaXR5LFxuXHRcdFx0Li4uc2NvcGVcblx0XHR9O1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuZ2V0UGVyc29uYWxpemVyKHBlcnNJZCwgc2NvcGUsIGNvbXBvbmVudCkpIGFzIFBlcnNvbmFsaXplclR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIGNvbnRhaW5lciBpZGVudGlmaWVkIGJ5IHNDb250YWluZXJLZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgQ29udGFpbmVyIGtleVxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgY29udGFpbmVyIGlzIGRlbGV0ZWRcblx0ICovXG5cdGFzeW5jIGRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lcihrZXk6IHN0cmluZywgc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuZGVsZXRlQ29udGFpbmVyKGtleSwgc2NvcGUgYXMgdW5rbm93biBhcyBvYmplY3QpIGFzIFByb21pc2U8dm9pZD47XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBjb25maWcgZnJvbSB0aGUgd2luZG93cyBvYmplY3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFNoZWxsIGNvbmZpZyBvYmplY3Rcblx0ICovXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZSB7XG5cdFx0cmV0dXJuICh3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KVtcInNhcC11c2hlbGwtY29uZmlnXCJdIGFzIFNoZWxsQ29uZmlnVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBwYXJhbWV0ZXJzIGZyb20gYSBVUkkgcXVlcnkgc3RyaW5nIChzdGFydGluZyB3aXRoID8pIGludG8gYSBwYXJhbWV0ZXIgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdXJsIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIFBhcmFtZXRlciBzdHJpbmdcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5nIHN0cmluZyBhcnJheXNcblx0ICovXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VQYXJhbWV0ZXJzKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBleHRlbnNpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2Vcblx0ICovXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKHNlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiKTtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhzZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2soc2VydmljZUNvbnRleHQpO1xuXHRcdGF3YWl0IHNoZWxsU2VydmljZS5pbml0UHJvbWlzZTtcblx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2VydmljZUNvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gc2hlbGxTZXJ2aWNlO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0bGV0IHNlbWFudGljT2JqZWN0czogc3RyaW5nW10gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cyA9IGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbGxpbmcgZ2V0U2VtYW50aWNPYmplY3RzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiLCBzZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2hlbGxTZXJ2aWNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUFrTEE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUlNQSxnQkFBZ0I7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQUEsT0FPckJDLElBQUksR0FBSixnQkFBYTtNQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQW1CO01BQzFELElBQUksQ0FBQ0MsWUFBWSxHQUFHLE1BQU07SUFDM0IsQ0FBQztJQUFBLE9BRUtDLFFBQVEsR0FBZCx5QkFBZTtJQUFBLEVBQXNDO01BQ3BELE9BQU9ILE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0cscUJBQXFCLEdBQTNCLHVDQUFpRDtNQUNoRCxPQUFPSixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRUtJLGlCQUFpQixHQUF2QixrQ0FBd0I7SUFBQSxFQUFzQztNQUM3RCxPQUFPTCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRURLLFVBQVUsR0FBVixxQkFBVztJQUFBLEVBQStEO01BQ3pFO0lBQUEsQ0FDQTtJQUFBLE9BRUtDLGtCQUFrQixHQUF4QixtQ0FBeUI7SUFBQSxFQUF5RDtNQUNqRixPQUFPUCxPQUFPLENBQUNDLE9BQU8sQ0FBQ08sU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFBQSxPQUVEQyxXQUFXLEdBQVgsdUJBQXVCO01BQ3RCLE9BQU8sS0FBSztJQUNiLENBQUM7SUFBQSxPQUVEQyxpQkFBaUIsR0FBakIsNkJBQTBCO01BQ3pCO0lBQUEsQ0FDQTtJQUFBLE9BRUtDLGVBQWUsR0FBckIsZ0NBQXNCO0lBQUEsRUFBNEU7TUFDakcsT0FBT1gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLVyxPQUFPLEdBQWIsd0JBQWM7SUFBQSxFQUE0RTtNQUN6RixPQUFPWixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRURZLE9BQU8sR0FBUCxtQkFBa0I7TUFDakIsT0FBT0MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUk7SUFDNUIsQ0FBQztJQUFBLE9BRUtDLFdBQVcsR0FBakIsNEJBQWtCO0lBQUEsRUFBZ0U7TUFDakYsT0FBT2pCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLaUIsbUJBQW1CLEdBQXpCLG9DQUEwQjtJQUFBLEVBQTBDO01BQ25FLE9BQU9sQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS2tCLHdCQUF3QixHQUE5Qix5Q0FBK0I7SUFBQSxFQUEwQztNQUN4RSxPQUFPbkIsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRUttQixRQUFRLEdBQWQseUJBQWU7SUFBQSxFQUFnRTtNQUM5RSxPQUFPcEIsT0FBTyxDQUFDQyxPQUFPLENBQUNPLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBQUEsT0FFS2EscUJBQXFCLEdBQTNCLHNDQUE0QjtJQUFBLEVBQTRGO01BQ3ZILE9BQU9yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRUtxQixtQkFBbUIsR0FBekIscUNBQThDO01BQzdDLE9BQU90QixPQUFPLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUFBLE9BRUtzQixpQkFBaUIsR0FBdkIsa0NBQXdCO0lBQUEsRUFBNEM7TUFDbkUsT0FBT3ZCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFRHVCLGNBQWMsR0FBZCx5QkFBZTtJQUFBLEVBQStCO01BQzdDLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLE9BRURDLFNBQVMsR0FBVCxtQkFBVUMsS0FBYSxFQUF1QztNQUM3RDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ0UsTUFBTUMsS0FBSyxHQUFHLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDRixLQUFLLENBQUM7TUFDeEMsT0FBTztRQUNORyxTQUFTLEVBQUUsRUFBRTtRQUNiQyxnQkFBZ0IsRUFBRSxDQUFBSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUksTUFBTSxNQUFLLENBQUMsR0FBR0osS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHO01BQ3BELENBQUM7SUFDRixDQUFDO0lBQUEsT0FFREssa0JBQWtCLEdBQWxCLDZCQUFtQjtJQUFBLEVBQW1DO01BQ3JELE9BQU8sRUFBRTtJQUNWLENBQUM7SUFBQSxPQUVEQyxZQUFZLEdBQVosdUJBQWE7SUFBQSxFQUEyQjtNQUN2QztJQUFBLENBQ0E7SUFBQSxPQUVEQywwQkFBMEIsR0FBMUIscUNBQTJCO0lBQUEsRUFBMEM7TUFDcEU7SUFBQSxDQUNBO0lBQUEsT0FFREMsNEJBQTRCLEdBQTVCLHVDQUE2QjtJQUFBLEVBQTBDO01BQ3RFO0lBQUEsQ0FDQTtJQUFBLE9BRURDLGNBQWMsR0FBZCwwQkFBeUI7TUFDeEIsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUEsT0FFREMsT0FBTyxHQUFQLG1CQUFvQjtNQUNuQixPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQSxPQUVEQyxlQUFlLEdBQWYsMkJBQTBCO01BQ3pCLE9BQU8sRUFBRTtJQUNWLENBQUM7SUFBQSxPQUVEQyxTQUFTLEdBQVQscUJBQXFCO01BQ3BCLE9BQU8sS0FBSztJQUNiLENBQUM7SUFBQSxPQUVEQyx3QkFBd0IsR0FBeEIsbUNBQXlCO0lBQUEsRUFBaUM7TUFDekQ7SUFBQSxDQUNBO0lBQUEsT0FFREMsMEJBQTBCLEdBQTFCLHFDQUEyQjtJQUFBLEVBQWlDO01BQzNEO0lBQUEsQ0FDQTtJQUFBLE9BRURDLGlCQUFpQixHQUFqQiw0QkFBa0I7SUFBQSxFQUFpQztNQUNsRDtJQUFBLENBQ0E7SUFBQSxPQUVEQyxZQUFZLEdBQVosdUJBQWE7SUFBQSxFQUEyQztNQUN2RDtJQUFBLENBQ0E7SUFBQSxPQUVEQyxRQUFRLEdBQVIsbUJBQVM7SUFBQSxFQUEwQjtNQUNsQztJQUFBLENBQ0E7SUFBQSxPQUVEQyxpQkFBaUIsR0FBakIsNkJBQTRCO01BQzNCO01BQ0EsSUFBSUMsUUFBUSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ3RELE9BQU8sTUFBTTtNQUNkLENBQUMsTUFBTSxJQUFJSCxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUNoRSxPQUFPLFNBQVM7TUFDakIsQ0FBQyxNQUFNO1FBQ04sT0FBTyxFQUFFO01BQ1Y7SUFDRCxDQUFDO0lBQUEsT0FFS0MsZ0JBQWdCLEdBQXRCLGlDQUF1QjtJQUFBLEVBQWtFO01BQ3hGLE9BQU9sRCxPQUFPLENBQUNDLE9BQU8sQ0FBQ08sU0FBUyxDQUFvQjtJQUNyRCxDQUFDO0lBQUEsT0FFSzJDLGtCQUFrQixHQUF4QixvQ0FBNkM7TUFDNUMsT0FBT25ELE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQUEsT0FFRG1ELFFBQVEsR0FBUixvQkFBbUI7TUFDbEIsT0FBTyxFQUFFO0lBQ1YsQ0FBQztJQUFBLE9BRUtDLGVBQWUsR0FBckIsK0JBQXNCQyxPQUFlLEVBQUVDLE1BQWEsRUFBRUMsVUFBc0IsRUFBNkI7TUFDeEcsT0FBT3hELE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO1FBQ3RCd0QsV0FBVyxFQUFFLFlBQ1p6RCxPQUFPLENBQUNDLE9BQU8sQ0FBQztVQUNmeUQsY0FBYyxFQUFFLEtBQUs7VUFDckJDLGtCQUFrQixFQUFFLEtBQUs7VUFDekJDLElBQUksRUFBRSxDQUFDO1FBQ1IsQ0FBQyxDQUFDO1FBQ0hDLFdBQVcsRUFBRSxNQUFNLENBQUM7TUFDckIsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBLE9BRUtDLDhCQUE4QixHQUFwQyw4Q0FBcUNDLElBQVksRUFBRVIsTUFBZSxFQUFpQjtNQUNsRixPQUFPdkQsT0FBTyxDQUFDQyxPQUFPLEVBQUU7SUFDekIsQ0FBQztJQUFBLE9BRUQrRCxjQUFjLEdBQWQsMEJBQWtDO01BQ2pDLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLE9BRURDLG9CQUFvQixHQUFwQixnQ0FBaUQ7TUFDaEQsT0FBTztRQUNOQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2JDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN0QkMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoQkMsU0FBUyxFQUFFLENBQUM7TUFDYixDQUFDO0lBQ0YsQ0FBQztJQUFBLE9BRURDLGdDQUFnQyxHQUFoQyw0Q0FBNEM7TUFDM0MsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUFBLE9BRURDLGVBQWUsR0FBZiwyQkFBNEM7TUFDM0MsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUEsT0FFREMsbUJBQW1CLEdBQW5CLCtCQUFpQztNQUNoQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQTtFQUFBLEVBdE42QkMsT0FBTztFQXlOdEM7QUFDQTtBQUNBO0VBZ0JBO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFJTUMsYUFBYTtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQSxRQWlDbEI1RSxJQUFJLEdBQUosZ0JBQWE7TUFDWixNQUFNNkUsUUFBUSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxFQUFFO01BQ2xDLE1BQU1DLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxXQUF3QjtNQUNwRCxJQUFJLENBQUNDLGVBQWUsR0FBR0osUUFBUSxDQUFDSyxRQUFRLENBQUNDLGNBQWM7TUFDdkQsSUFBSSxDQUFDL0UsWUFBWSxHQUFHLE1BQU07TUFDMUIsSUFBSSxDQUFDZ0YsVUFBVSxHQUFHLENBQUMsQ0FBQztNQUNwQixJQUFJLENBQUNDLDRCQUE0QixHQUFHLFVBQVVDLEtBQW1CLEVBQVU7UUFDMUUsTUFBTUMsc0JBQWdDLEdBQUcsRUFBRTtRQUMzQyxNQUFNQyx5QkFBdUMsR0FBRyxFQUFFO1FBQ2xELEtBQUssTUFBTUMsVUFBVSxJQUFJSCxLQUFLLEVBQUU7VUFDL0IsSUFBSSxDQUFDLENBQUNHLFVBQVUsSUFBSSxDQUFDLENBQUNBLFVBQVUsQ0FBQ0MsY0FBYyxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDTixVQUFVLENBQUNLLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDLEVBQUU7Y0FDL0NILHNCQUFzQixDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDUCxVQUFVLENBQUNLLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDLENBQUNFLEtBQUssQ0FBQztjQUM3RUMsTUFBTSxDQUFDQyxjQUFjLENBQUNMLFVBQVUsRUFBRSxPQUFPLEVBQUU7Z0JBQzFDTSxLQUFLLEVBQUUsSUFBSSxDQUFDWCxVQUFVLENBQUNLLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDLENBQUNFO2NBQ25ELENBQUMsQ0FBQztZQUNILENBQUMsTUFBTTtjQUNOSix5QkFBeUIsQ0FBQ0csSUFBSSxDQUFDRixVQUFVLENBQUM7WUFDM0M7VUFDRDtRQUNEO1FBQ0EsT0FBTztVQUFFTyxPQUFPLEVBQUVWLEtBQUs7VUFBRVcsT0FBTyxFQUFFVCx5QkFBeUI7VUFBRVUsV0FBVyxFQUFFWDtRQUF1QixDQUFDO01BQ25HLENBQUM7TUFDRCxJQUFJLENBQUN0RixXQUFXLEdBQUcsSUFBSUMsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRWdHLE1BQU0sS0FBSztRQUNuRCxJQUFJLENBQUNDLFNBQVMsR0FBR2pHLE9BQU87UUFDeEIsSUFBSSxDQUFDa0csUUFBUSxHQUFHRixNQUFNO01BQ3ZCLENBQUMsQ0FBQztNQUNGLE1BQU1HLGtCQUFrQixHQUFHLElBQUksQ0FBQ3JCLGVBQWUsQ0FBQ3NCLGVBQWUsQ0FBQyxZQUFZLENBQUM7TUFDN0UsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDdkIsZUFBZSxDQUFDc0IsZUFBZSxDQUFDLFVBQVUsQ0FBQztNQUN6RSxNQUFNRSx5QkFBeUIsR0FBRyxJQUFJLENBQUN4QixlQUFlLENBQUNzQixlQUFlLENBQUMsWUFBWSxDQUFDO01BQ3BGLE1BQU1HLDhCQUE4QixHQUFHLElBQUksQ0FBQ3pCLGVBQWUsQ0FBQ3NCLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQztNQUN0RyxNQUFNSSwwQkFBMEIsR0FBRyxJQUFJLENBQUMxQixlQUFlLENBQUNzQixlQUFlLENBQUMsZUFBZSxDQUFDO01BQ3hGLE1BQU1LLG1DQUFtQyxHQUFHLElBQUksQ0FBQzNCLGVBQWUsQ0FBQ3NCLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQztNQUNyRyxNQUFNTSxzQkFBc0IsR0FBRzlCLFVBQVUsQ0FBQytCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztNQUN0RSxNQUFNQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM5QixlQUFlLENBQUNzQixlQUFlLENBQUMsV0FBVyxDQUFDO01BRXZGckcsT0FBTyxDQUFDOEcsR0FBRyxDQUFDLENBQ1hWLGtCQUFrQixFQUNsQkUsZ0JBQWdCLEVBQ2hCQyx5QkFBeUIsRUFDekJDLDhCQUE4QixFQUM5Qkcsc0JBQXNCLEVBQ3RCRCxtQ0FBbUMsRUFDbkNELDBCQUEwQixFQUMxQkksNkJBQTZCLENBQzdCLENBQUMsQ0FDQUUsSUFBSSxDQUNKLFFBU007UUFBQSxJQVRMLENBQ0FDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyw0QkFBNEIsRUFDNUJDLG1CQUFtQixFQUNuQkMsc0JBQXNCLENBQ3RCO1FBQ0EsSUFBSSxDQUFDQyxxQkFBcUIsR0FBR1IsaUJBQXdDO1FBQ3JFLElBQUksQ0FBQ0MsZUFBZSxHQUFHQSxlQUEyQjtRQUNsRCxJQUFJLENBQUNRLGlCQUFpQixHQUFHUCxrQkFBZ0M7UUFDekQsSUFBSSxDQUFDUSxlQUFlLEdBQUdQLGdCQUFtQztRQUMxRCxJQUFJLENBQUNRLGNBQWMsR0FBR1AsZUFBZTtRQUNyQyxJQUFJLENBQUNRLDJCQUEyQixHQUFHUCw0QkFBNEQ7UUFDL0YsSUFBSSxDQUFDUSxrQkFBa0IsR0FBR1AsbUJBQXlDO1FBQ25FLElBQUksQ0FBQ1EsZ0JBQWdCLEdBQUdQLHNCQUFtQztRQUMzRCxJQUFJLENBQUNyQixTQUFTLEVBQUU7UUFDaEI7TUFDRCxDQUFDLENBQ0QsQ0FDQTZCLEtBQUssQ0FBQyxJQUFJLENBQUM1QixRQUFRLENBQUM7SUFDdkI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBLFFBVU1oRyxRQUFRLEdBQWQsd0JBQWVpRixLQUFvQixFQUFxQjtNQUN2RCxPQUFPLElBQUksQ0FBQ29DLHFCQUFxQixDQUFDckgsUUFBUSxDQUFDaUYsS0FBSyxDQUFDO0lBQ2xEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS01oRixxQkFBcUIsR0FBM0IsdUNBQWlEO01BQ2hELE9BQU8sSUFBSSxDQUFDb0gscUJBQXFCLENBQUNRLGtCQUFrQixFQUFFO0lBQ3ZEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxRQVVNM0gsaUJBQWlCLEdBQXZCLGlDQUF3QitFLEtBQW9CLEVBQXFCO01BQ2hFLElBQUtBLEtBQUssQ0FBY3JELE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckMsT0FBTyxFQUFFO01BQ1YsQ0FBQyxNQUFNO1FBQ04sTUFBTWtHLGFBQWEsR0FBRyxJQUFJLENBQUM5Qyw0QkFBNEIsQ0FBQ0MsS0FBSyxDQUFDO1FBRTlELElBQUk2QyxhQUFhLENBQUNsQyxPQUFPLENBQUNoRSxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ3ZDLE9BQU9rRyxhQUFhLENBQUNqQyxXQUFXO1FBQ2pDLENBQUMsTUFBTTtVQUNOLE1BQU1rQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNWLHFCQUFxQixDQUFDckgsUUFBUSxDQUFDOEgsYUFBYSxDQUFDbEMsT0FBTyxDQUFDO1VBQy9FLElBQUltQyxNQUFNLENBQUNuRyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU1vRyxxQkFBd0QsR0FBRyxDQUFDLENBQUM7WUFFbkUsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ25HLE1BQU0sRUFBRXFHLENBQUMsRUFBRSxFQUFFO2NBQ3ZDLElBQUlGLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDLENBQUNyRyxNQUFNLEdBQUcsQ0FBQyxJQUFJa0csYUFBYSxDQUFDbEMsT0FBTyxDQUFDcUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxQyxLQUFLLEtBQUtsRixTQUFTLEVBQUU7Z0JBQzVFMkgscUJBQXFCLENBQUNGLGFBQWEsQ0FBQ2xDLE9BQU8sQ0FBQ3FDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNUMsY0FBYyxDQUFDLEdBQUc7a0JBQ25FRSxLQUFLLEVBQUV3QyxNQUFNLENBQUNFLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDbEQsVUFBVSxHQUFHUyxNQUFNLENBQUMwQyxNQUFNLENBQUMsSUFBSSxDQUFDbkQsVUFBVSxFQUFFaUQscUJBQXFCLENBQUM7Y0FDeEU7WUFDRDtVQUNEO1VBRUEsSUFBSUYsYUFBYSxDQUFDakMsV0FBVyxDQUFDakUsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPbUcsTUFBTTtVQUNkLENBQUMsTUFBTTtZQUNOLE1BQU1JLFlBQVksR0FBRyxFQUFFO1lBQ3ZCLElBQUlDLENBQUMsR0FBRyxDQUFDO1lBRVQsS0FBSyxNQUFNQyxJQUFJLElBQUlQLGFBQWEsQ0FBQ25DLE9BQU8sRUFBRTtjQUN6QyxJQUFJeUMsQ0FBQyxHQUFHTCxNQUFNLENBQUNuRyxNQUFNLEVBQUU7Z0JBQ3RCLElBQUltRyxNQUFNLENBQUNLLENBQUMsQ0FBQyxDQUFDeEcsTUFBTSxHQUFHLENBQUMsSUFBSXlHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2hELGNBQWMsS0FBS3lDLGFBQWEsQ0FBQ2xDLE9BQU8sQ0FBQ3dDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL0MsY0FBYyxFQUFFO2tCQUNsRzhDLFlBQVksQ0FBQzdDLElBQUksQ0FBQ3lDLE1BQU0sQ0FBQ0ssQ0FBQyxDQUFDLENBQUM7a0JBQzVCQSxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxNQUFNO2tCQUNORCxZQUFZLENBQUM3QyxJQUFJLENBQUMrQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM5QyxLQUFLLENBQUM7Z0JBQ2pDO2NBQ0QsQ0FBQyxNQUFNO2dCQUNONEMsWUFBWSxDQUFDN0MsSUFBSSxDQUFDK0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOUMsS0FBSyxDQUFDO2NBQ2pDO1lBQ0Q7WUFDQSxPQUFPNEMsWUFBWTtVQUNwQjtRQUNEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxRQUtBRyxpQkFBaUIsR0FBakIsNkJBQStCO01BQzlCLE9BQU8sSUFBSSxDQUFDMUQsZUFBZTtJQUM1Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQXpFLFVBQVUsR0FBVixvQkFBV29JLGdCQUF3QixFQUFFN0QsVUFBc0IsRUFBUTtNQUNsRSxJQUFJLENBQUN6RCxRQUFRLENBQUNzSCxnQkFBZ0IsRUFBRTdELFVBQVUsQ0FBQztJQUM1Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUEsUUFVTXRFLGtCQUFrQixHQUF4QixrQ0FBeUI2RSxLQUFnQixFQUF3QztNQUNoRixPQUFPLElBQUksQ0FBQ29DLHFCQUFxQixDQUFDakgsa0JBQWtCLENBQUM2RSxLQUFLLENBQUM7SUFDNUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLTTFFLGlCQUFpQixHQUF2QixtQ0FBeUM7TUFDeEMsT0FBTyxJQUFJLENBQUM4RyxxQkFBcUIsQ0FBQzlHLGlCQUFpQixFQUFFO0lBQ3REOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLFFBUU1DLGVBQWUsR0FBckIsK0JBQXNCeUUsS0FBYSxFQUFFUCxVQUFzQixFQUFtQjtNQUM3RSxPQUFPLElBQUksQ0FBQzJDLHFCQUFxQixDQUFDNUcsT0FBTyxDQUFDd0UsS0FBSyxFQUFFUCxVQUFVLENBQUM7SUFDN0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQSxRQVNNakUsT0FBTyxHQUFiLHVCQUFjK0gsT0FBZSxFQUFFOUQsVUFBc0IsRUFBbUI7TUFDdkUsT0FBTyxJQUFJLENBQUMyQyxxQkFBcUIsQ0FBQzVHLE9BQU8sQ0FBQytILE9BQU8sRUFBRTlELFVBQVUsQ0FBQztJQUMvRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQSxRQVFNNUQsV0FBVyxHQUFqQiwyQkFBa0I0RCxVQUFxQixFQUFFK0QsWUFBb0IsRUFBb0I7TUFDaEYsT0FBTyxJQUFJLENBQUNwQixxQkFBcUIsQ0FBQ3ZHLFdBQVcsQ0FBQzRELFVBQVUsRUFBRStELFlBQVksQ0FBQztJQUN4RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPTTFILG1CQUFtQixHQUF6QixtQ0FBMEIyRCxVQUFxQixFQUFvQjtNQUNsRSxPQUFPLElBQUksQ0FBQzJDLHFCQUFxQixDQUFDdEcsbUJBQW1CLENBQUMyRCxVQUFVLENBQUM7SUFDbEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUEsUUFRTXhELHFCQUFxQixHQUEzQixxQ0FBNEJ3SCxRQUFrQixFQUFFaEUsVUFBcUIsRUFBcUM7TUFDekcsT0FBTyxJQUFJLENBQUMyQyxxQkFBcUIsQ0FBQ25HLHFCQUFxQixDQUFDd0gsUUFBUSxFQUFFaEUsVUFBVSxDQUFDO0lBQzlFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLFFBUU16RCxRQUFRLEdBQWQsd0JBQWV1SCxPQUFlLEVBQUU5RCxVQUFzQixFQUFzQjtNQUMzRSxPQUFRLE1BQU0sSUFBSSxDQUFDMkMscUJBQXFCLENBQUNwRyxRQUFRLENBQUN1SCxPQUFPLEVBQUU5RCxVQUFVLENBQUM7SUFDdkU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLTXZELG1CQUFtQixHQUF6QixxQ0FBOEM7TUFDN0MsT0FBTyxJQUFJLENBQUNrRyxxQkFBcUIsQ0FBQ2xHLG1CQUFtQixFQUFFO0lBQ3hEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsUUFNTUMsaUJBQWlCLEdBQXZCLGlDQUF3QnVILGFBQXFCLEVBQW1CO01BQy9ELE9BQU9BLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxRQUVEakksT0FBTyxHQUFQLG1CQUFrQjtNQUNqQixPQUFRLElBQUcsSUFBSSxDQUFDNEcsaUJBQWlCLENBQUNzQixZQUFZLENBQUNqSSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFFLEVBQUM7SUFDdkU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQWlELG9CQUFvQixHQUFwQixnQ0FBaUQ7TUFDaEQsT0FBTyxJQUFJLENBQUM0RCxrQkFBa0IsQ0FBQzVELG9CQUFvQixFQUFFO0lBQ3REOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FLLGdDQUFnQyxHQUFoQyw0Q0FBNEM7TUFDM0MsTUFBTTBFLDRCQUE0QixHQUFHLElBQUksQ0FBQy9FLG9CQUFvQixFQUFFLENBQUNFLGtCQUFrQjtNQUNuRixJQUNDNkUsNEJBQTRCLGFBQTVCQSw0QkFBNEIsZUFBNUJBLDRCQUE0QixDQUFFQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFDaEUsQ0FBQyxDQUFFRCw0QkFBNEIsQ0FBNENFLGdCQUFnQixDQUFDQyxPQUFPLEVBQ2xHO1FBQ0QsT0FBTyxJQUFJO01BQ1osQ0FBQyxNQUFNO1FBQ04sT0FBTyxLQUFLO01BQ2I7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQTNILGNBQWMsR0FBZCx3QkFBZUUsS0FBYSxFQUFjO01BQ3pDLE9BQU8sSUFBSSxDQUFDK0YsaUJBQWlCLENBQUNqRyxjQUFjLENBQUNFLEtBQUssQ0FBQztJQUNwRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQUQsU0FBUyxHQUFULG1CQUFVQyxLQUFhLEVBQXFEO01BQzNFLE9BQU8sSUFBSSxDQUFDK0YsaUJBQWlCLENBQUNoRyxTQUFTLENBQUNDLEtBQUssQ0FBQztJQUMvQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQU0sa0JBQWtCLEdBQWxCLDRCQUFtQm9ILGFBQXFCLEVBQVU7TUFDakQsT0FBTyxJQUFJLENBQUMzQixpQkFBaUIsQ0FBQ3pGLGtCQUFrQixDQUFDb0gsYUFBYSxDQUFDO0lBQ2hFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FuSCxZQUFZLEdBQVosc0JBQWFvSCxNQUFlLEVBQVE7TUFDbkMsSUFBSSxDQUFDdEUsZUFBZSxDQUFDOUMsWUFBWSxDQUFDb0gsTUFBTSxDQUFDO0lBQzFDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FuSCwwQkFBMEIsR0FBMUIsb0NBQTJCb0gsb0JBQW1DLEVBQVE7TUFDckUsSUFBSSxDQUFDdkUsZUFBZSxDQUFDN0MsMEJBQTBCLENBQUNvSCxvQkFBb0IsQ0FBQztJQUN0RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxRQUtBbkgsNEJBQTRCLEdBQTVCLHNDQUE2Qm1ILG9CQUFtQyxFQUFRO01BQ3ZFLElBQUksQ0FBQ3ZFLGVBQWUsQ0FBQzVDLDRCQUE0QixDQUFDbUgsb0JBQW9CLENBQUM7SUFDeEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLTWxILGNBQWMsR0FBcEIsZ0NBQThEO01BQzdELE9BQU8sSUFBSSxDQUFDMkMsZUFBZSxDQUFDM0MsY0FBYyxFQUFFO0lBQzdDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FDLE9BQU8sR0FBUCxtQkFBb0I7TUFDbkIsT0FBTyxJQUFJLENBQUM0RSxlQUFlO0lBQzVCLENBQUM7SUFBQSxRQUVEeEcsV0FBVyxHQUFYLHVCQUF1QjtNQUN0QixPQUFPLElBQUksQ0FBQ3NFLGVBQWUsQ0FBQzFDLE9BQU8sRUFBRSxDQUFDNUIsV0FBVyxFQUFFO0lBQ3BELENBQUM7SUFBQSxRQUVENkIsZUFBZSxHQUFmLDJCQUEwQjtNQUN6QixPQUFPLElBQUksQ0FBQ3lDLGVBQWUsQ0FBQzFDLE9BQU8sRUFBRSxDQUFDa0gsV0FBVyxFQUFFO0lBQ3BEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FoSCxTQUFTLEdBQVQscUJBQXFCO01BQ3BCLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FDLHdCQUF3QixHQUF4QixrQ0FBeUJnSCxXQUFxQixFQUFRO01BQ3JELElBQUksQ0FBQzlCLGVBQWUsQ0FBQ2xGLHdCQUF3QixDQUFDZ0gsV0FBVyxDQUFDO0lBQzNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0EvRywwQkFBMEIsR0FBMUIsb0NBQTJCK0csV0FBcUIsRUFBUTtNQUN2RCxJQUFJLENBQUM5QixlQUFlLENBQUNqRiwwQkFBMEIsQ0FBQytHLFdBQVcsQ0FBQztJQUM3RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUE5RyxpQkFBaUIsR0FBakIsMkJBQWtCK0csVUFBb0IsRUFBUTtNQUM3QyxJQUFJLENBQUM5QixjQUFjLENBQUNqRixpQkFBaUIsQ0FBQytHLFVBQVUsQ0FBQztJQUNsRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUE5RyxZQUFZLEdBQVosc0JBQWErRyxnQkFBMEIsRUFBUTtNQUM5QyxJQUFJLENBQUMvQixjQUFjLENBQUNoRixZQUFZLENBQUMrRyxnQkFBZ0IsQ0FBQztJQUNuRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUE5RyxRQUFRLEdBQVIsa0JBQVMrRyxNQUFjLEVBQVE7TUFDOUIsSUFBSSxDQUFDaEMsY0FBYyxDQUFDL0UsUUFBUSxDQUFDK0csTUFBTSxDQUFDO0lBQ3JDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsUUFNQXZHLFFBQVEsR0FBUixvQkFBbUI7TUFDbEIsT0FBTyxJQUFJLENBQUN1RSxjQUFjLENBQUN2RSxRQUFRLEVBQUU7SUFDdEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQVAsaUJBQWlCLEdBQWpCLDZCQUE0QjtNQUMzQixPQUFPLElBQUksQ0FBQ2tDLGVBQWUsQ0FBQzFDLE9BQU8sRUFBRSxDQUFDUSxpQkFBaUIsRUFBRTtJQUMxRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLFFBU01LLGdCQUFnQixHQUF0QixnQ0FBdUIwRyxlQUF1QixFQUFFQyxXQUF3QixFQUFpQjtNQUN4RixNQUFNQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUN0QyxxQkFBcUIsQ0FBQ3RFLGdCQUFnQixDQUFDMEcsZUFBZSxFQUFFQyxXQUFXLENBQUM7TUFDckcsSUFBSUUsS0FBSyxDQUFDQyxPQUFPLENBQUNGLGFBQWEsQ0FBQyxFQUFFO1FBQ2pDLE9BQU9BLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDeEIsQ0FBQyxNQUFNO1FBQ04sT0FBT0EsYUFBYTtNQUNyQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS00zRyxrQkFBa0IsR0FBeEIsb0NBQTZDO01BQzVDLE9BQU8sSUFBSW5ELE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQUE7UUFDL0IsSUFBSSwyQkFBQyxJQUFJLENBQUM0SCxrQkFBa0Isa0RBQXZCLHNCQUF5Qm9DLHVCQUF1QixHQUFFO1VBQ3REaEssT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUMsTUFBTTtVQUNOO1VBQ0EsSUFBSSxDQUFDNEgsa0JBQWtCLENBQ3JCb0MsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FDN0NDLElBQUksQ0FBRUMsTUFBZSxJQUFLO1lBQzFCQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsTUFBTSxFQUFZLDhEQUE4RCxDQUFDO1lBQzNGbEssT0FBTyxDQUFDLEtBQUssQ0FBQztVQUNmLENBQUMsQ0FBQyxDQUNEOEcsSUFBSSxDQUFDLE1BQU05RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUI7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLFFBU01vRCxlQUFlLEdBQXJCLCtCQUFzQmlILE1BQWMsRUFBRUMsS0FBWSxFQUFFQyxTQUFxQixFQUE2QjtNQUNyR0QsS0FBSyxHQUFHO1FBQ1A7UUFDQUUsV0FBVyxFQUFFLElBQUksQ0FBQzdDLDJCQUEyQixDQUFDOEMsU0FBUyxDQUFDRCxXQUFXLENBQUNFLFNBQVM7UUFDN0VDLGNBQWMsRUFBRSxJQUFJLENBQUNoRCwyQkFBMkIsQ0FBQzhDLFNBQVMsQ0FBQ0UsY0FBYyxDQUFDQyxHQUFHO1FBQzdFQyxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCQyxRQUFRLEVBQUVDLFFBQVE7UUFDbEIsR0FBR1Q7TUFDSixDQUFDO01BQ0QsT0FBUSxNQUFNLElBQUksQ0FBQzNDLDJCQUEyQixDQUFDdkUsZUFBZSxDQUFDaUgsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsQ0FBQztJQUN6Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPTTFHLDhCQUE4QixHQUFwQyw4Q0FBcUNtSCxHQUFXLEVBQUVWLEtBQWMsRUFBaUI7TUFDaEYsT0FBTyxJQUFJLENBQUMzQywyQkFBMkIsQ0FBQ3NELGVBQWUsQ0FBQ0QsR0FBRyxFQUFFVixLQUFLLENBQXNCO0lBQ3pGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0F2RyxjQUFjLEdBQWQsMEJBQWtDO01BQ2pDLE9BQVFsRCxNQUFNLENBQXVDLG1CQUFtQixDQUFDO0lBQzFFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQSxRQU9BeUQsZUFBZSxHQUFmLHlCQUFnQjRHLEdBQVcsRUFBNEI7TUFDdEQsT0FBTyxJQUFJLENBQUMxRCxpQkFBaUIsQ0FBQ2xELGVBQWUsQ0FBQzRHLEdBQUcsQ0FBQztJQUNuRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxRQUtBM0csbUJBQW1CLEdBQW5CLCtCQUFpQztNQUNoQyxPQUFPLElBQUksQ0FBQ3NELGdCQUFnQjtJQUM3QixDQUFDO0lBQUE7RUFBQSxFQWxtQjBCckQsT0FBTztFQXFtQm5DO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFJTTJHLG9CQUFvQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFDekI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFOQyxRQU9NQyxjQUFjLEdBQXBCLDhCQUFxQkMsY0FBcUQsRUFBMkI7TUFDcEdBLGNBQWMsQ0FBQ3RHLFFBQVEsQ0FBQ0MsY0FBYyxHQUFHc0csR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztNQUMvRSxNQUFNQyxZQUFZLEdBQUdKLGNBQWMsQ0FBQ3RHLFFBQVEsQ0FBQ0MsY0FBYyxHQUN4RCxJQUFJUCxhQUFhLENBQUM0RyxjQUFjLENBQW9ELEdBQ3BGLElBQUl6TCxnQkFBZ0IsQ0FBQ3lMLGNBQWMsQ0FBQztNQUN2QyxNQUFNSSxZQUFZLENBQUMzTCxXQUFXO01BQzlCO01BQ0EsTUFBTTRMLFlBQVksR0FBR0wsY0FBYyxDQUFDeEcsV0FBVztNQUMvQzZHLFlBQVksQ0FBQ0MsZ0JBQWdCLEdBQUcsTUFBc0JGLFlBQVk7TUFDbEUsTUFBTUcsYUFBYSxHQUFHRixZQUFZLENBQUNHLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFDdkQsSUFBSUQsYUFBYSxFQUFFO1FBQ2xCLElBQUlFLGVBQXlCLEdBQUcsRUFBRTtRQUNsQyxJQUFJO1VBQ0hBLGVBQWUsR0FBRyxNQUFNTCxZQUFZLENBQUN0TCxxQkFBcUIsRUFBRTtRQUM3RCxDQUFDLENBQUMsT0FBT2lLLEtBQWMsRUFBRTtVQUN4QkQsR0FBRyxDQUFDQyxLQUFLLENBQUMsd0NBQXdDLEVBQUVBLEtBQUssQ0FBVztRQUNyRSxDQUFDLFNBQVM7VUFDUndCLGFBQWEsQ0FBZUcsV0FBVyxDQUFDLGtCQUFrQixFQUFFRCxlQUFlLENBQUM7UUFDOUU7TUFDRDtNQUNBLE9BQU9MLFlBQVk7SUFDcEIsQ0FBQztJQUFBO0VBQUEsRUE3QmlDTyxjQUFjO0VBQUEsT0FnQ2xDYixvQkFBb0I7QUFBQSJ9
@@ -165,6 +165,16 @@ export interface IShellServices {
165
165
 
166
166
  getExtensionService(): Extension;
167
167
  }
168
+ type NavigationExtension = Navigation & {
169
+ getStartupAppState(oAppComponent: Component): Promise<StartupAppState | undefined>;
170
+ getAppState(oAppComponent: Component, sAppStateKey: string): Promise<object>;
171
+ createEmptyAppState(
172
+ oAppComponent: Component,
173
+ bTransientEnforced?: boolean,
174
+ sPersistencyMethod?: string,
175
+ oPersistencySettings?: object
176
+ ): Promise<object>;
177
+ };
168
178
 
169
179
  /**
170
180
  * Mock implementation of the ShellService for OpenFE
@@ -416,7 +426,7 @@ class ShellServices extends Service<Required<ShellServicesSettings>> implements
416
426
 
417
427
  initPromise!: Promise<IShellServices>;
418
428
 
419
- applicationNavigation!: Navigation;
429
+ applicationNavigation!: NavigationExtension;
420
430
 
421
431
  userInfoService!: UserInfo;
422
432
 
@@ -499,7 +509,7 @@ class ShellServices extends Service<Required<ShellServicesSettings>> implements
499
509
  oShellPluginManager,
500
510
  oShellExtensionService
501
511
  ]) => {
502
- this.applicationNavigation = navigationService as Navigation;
512
+ this.applicationNavigation = navigationService as NavigationExtension;
503
513
  this.userInfoService = userInfoService as UserInfo;
504
514
  this.urlParsingService = oUrlParsingService as URLParsing;
505
515
  this.shellNavigation = oShellNavigation as ShellNavigation;
@@ -96,6 +96,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
96
96
  this.appId = fioriDefinition === null || fioriDefinition === void 0 ? void 0 : (_fioriDefinition$regi = fioriDefinition.registrationIds) === null || _fioriDefinition$regi === void 0 ? void 0 : _fioriDefinition$regi.join("-");
97
97
  };
98
98
  _proto.initialize = async function initialize() {
99
+ var _urlParams$get;
99
100
  // const environmentCapabilitiesService = (await this.appComponent.getService(
100
101
  // "environmentCapabilities"
101
102
  // )) as EnvironmentCapabilitiesService;
@@ -108,6 +109,11 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
108
109
  // ) {
109
110
  // this.isEnabled = true;
110
111
  // }
112
+
113
+ const urlParams = new URLSearchParams(window.location.search);
114
+ if (((_urlParams$get = urlParams.get("sap-ui-xx-feEnableGSM")) === null || _urlParams$get === void 0 ? void 0 : _urlParams$get.toLowerCase()) === "true") {
115
+ this.isEnabled = true;
116
+ }
111
117
  return Promise.resolve(this);
112
118
  }
113
119
 
@@ -324,7 +330,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
324
330
  _exports.TelemetryService = TelemetryService;
325
331
  TelemetryService.CountBeforeFlush = 50;
326
332
  TelemetryService.EndpointRetryPeriod = 1000 * 60 * 60 * 24;
327
- TelemetryService.targetUrl = "/sap/bc/http/sap/gsm_metrics";
333
+ TelemetryService.targetUrl = "/sap/bc/ui2/flp;sap-metrics-only";
328
334
  TelemetryService.EventStoreKey = "EventStore";
329
335
  TelemetryService.EndpointStoreKey = "EndpointStore";
330
336
  TelemetryService.EventCountStoreKey = "EventCountStore";
@@ -344,4 +350,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
344
350
  _exports = TelemetryServiceFactory;
345
351
  return _exports;
346
352
  }, false);
347
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJhbWV0ZXJNYXAiLCJuYW1lIiwidHlwZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJpc0VuYWJsZWQiLCJpbml0IiwiY29udGV4dCIsImdldENvbnRleHQiLCJhcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsImZpb3JpRGVmaW5pdGlvbiIsImdldE1hbmlmZXN0RW50cnkiLCJhcHBJZCIsInJlZ2lzdHJhdGlvbklkcyIsImpvaW4iLCJpbml0aWFsaXplIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzdG9yZUFjdGlvbiIsImFjdGlvbiIsInNvdXJjZVRlbXBsYXRlIiwidGVsZW1ldHJ5RXZlbnQiLCJ0ZW1wbGF0ZSIsInN0b3JlQW5kRmx1c2giLCJlIiwiTG9nIiwiZGVidWciLCJfdGVsZW1ldHJ5RXZlbnQiLCJ2YWxpZGF0ZUV2ZW50Q291bnRQb2xpY3kiLCJ2YWxpZGF0ZUVuZHBvaW50UG9saWN5IiwiZXZlbnRzQXNTdHIiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiRXZlbnRTdG9yZUtleSIsImV2ZW50cyIsIkpTT04iLCJwYXJzZSIsInB1c2giLCJsZW5ndGgiLCJDb3VudEJlZm9yZUZsdXNoIiwiZmx1c2giLCJpbmNyZW1lbnRFdmVudENvdW50U3RvcmUiLCJjbGVhckVuZHBvaW50U3RvcmUiLCJ1cGRhdGVFbmRwb2ludFN0b3JlIiwidGVsZW1ldHJ5RXZlbnRTdHIiLCJzdHJpbmdpZnkiLCJzZXRJdGVtIiwiYm9keSIsImJ1aWxkUmVxdWVzdEJvZHkiLCJmZXRjaCIsInRhcmdldFVybCIsIm1ldGhvZCIsIm1hcCIsImV2ZW50IiwicGFyYW1ldGVyUGVyVHlwZSIsInBhcmFtUGFydCIsInBhcmFtTmFtZSIsInBhcmFtVHlwZSIsInBhcmFtZXRlcnMiLCJ1cGRhdGVFdmVudENvdW50U3RvcmUiLCJ2YWx1ZSIsIkV2ZW50Q291bnRTdG9yZUtleSIsImV2ZW50Q291bnRTdHIiLCJldmVudENvdW50IiwicGFyc2VJbnQiLCJpc05hTiIsIk1heFRlbGVtZXRyeSIsIkVuZHBvaW50U3RvcmVLZXkiLCJEYXRlIiwibm93IiwicmVtb3ZlSXRlbSIsInRpbWVzdGFtcCIsImxhc3RDaGVja1RpbWUiLCJFbmRwb2ludFJldHJ5UGVyaW9kIiwiU2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2VGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJpbnN0YW5jZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxudHlwZSBUZWxlbWV0cnlTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUZpdGVyQmFyU2VhcmNoRXZlbnRUeXBlID0gXCJGRS5GaWx0ZXJCYXJTZWFyY2hcIjtcbmV4cG9ydCB0eXBlIFRlbGVtZXRyeVJlY29tbWVuZGF0aW9uVHlwZSA9IFwiRkUuUmVjb21tZW5kYXRpb25zXCI7XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUV2ZW50ID0ge1xuXHR0eXBlOiBUZWxlbWV0cnlGaXRlckJhclNlYXJjaEV2ZW50VHlwZSB8IFRlbGVtZXRyeVJlY29tbWVuZGF0aW9uVHlwZTtcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeSA9IHtcblx0Ly8gSG93IG1hbnkgdGltZXMgZG8gd2UgcmUtcmVhZCB0aGUgZGF0YT9cblx0Ly8gbnVtYmVyIG9mIHRpbWVzIHJlY29tbWVuZGF0aW9ucyB3ZXJlIGZldGNoZWQgaW4gdGhlIGN1cnJlbnQgdmlldyAoaXJyZXNwZWN0aXZlIG9mIHBhZ2UvdGFibGUgY29udGV4dClcblx0bnVtYmVyT2ZUaW1lc1JlY29tbWVuZGF0aW9uc0ZldGNoZWQ6IG51bWJlcjtcblx0Ly8gSG93IGxvbmcgZGlkIHRoZSByZWNvbW1lbmRhdGlvbiBjYWxsIHRha2U/XG5cdC8vIG1heGltdW0gdGltZSB0YWtlbiB0byByZWNlaXZlIHJlY29tbWVuZGF0aW9uc1xuXHRtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IG51bWJlcjtcblx0Ly8gbWFuaW11bSB0aW1lIHRha2VuIHRvIHJlY2VpdmUgcmVjb21tZW5kYXRpb25zXG5cdG1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uczogbnVtYmVyO1xuXHQvLyBhdmVyYWdlIHRpbWUgdGFrZW4gdG8gcmVjZWl2ZSByZWNvbW1lbmRhdGlvbnNcblx0YXZlcmFnZVRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uczogbnVtYmVyO1xuXHQvL251bWJlciBvZiB0aW1lcywgcGxhY2Vob2xkZXIgaXMgbm90IHNlZW4gb24gVUlcblx0bnVtYmVyT2ZUaW1lc05vUGxhY2Vob2xkZXJJc1Nob3duT25VSTogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgRmllbGQgaGF2aW5nIHJlY29tbWVuZGF0aW9uc1xuXHRudW1iZXJPZlJlY29tbWVuZGVkRmllbGRzOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiBGaWVsZHMgZGlyZWN0bHkgYWNjZXB0ZWQgdGhyb3VnaCBBY2NlcHQgYnV0dG9uXG5cdG51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiBGaWVsZHMgaWdub3JlZCB0aHJvdWdoIEFjY2VwdCBidXR0b25cblx0bnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvbjogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgdGltZXMgdG9wIHJlY29tbWVuZGF0aW9uIHdhcyBzZWxlY3RlZFxuXHRudW1iZXJPZlRpbWVzVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IG51bWJlcjtcblx0Ly8gbnVtYmVyIG9mIHRpbWVzIG5vbi10b3AgcmVjb21tZW5kYXRpb24gd2FzIHNlbGVjdGVkXG5cdG51bWJlck9mVGltZXNOb25Ub3BSZWNvbW1lbmRhdGlvbnNTZWxlY3RlZDogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgdGltZXMgbm9uLXJlY29tbWVuZGVkIHZhbHVlIHdhcyBzZWxlY3RlZFxuXHRudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiB0aW1lcyBlbXB0eSByZWNvbW1lbmRhdGlvbnMgd2VyZSByZWNlaXZlZCBmcm9tIGJhY2tlbmRcblx0bnVtYmVyT2ZUaW1lc0VtcHR5UmVjb21tZW5kYXRpb25zOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiB0aW1lcyBmb3JtYXR0ZXIgd2FzIGNhbGxlZCB0byBzaG93IHJlY29tbWVuZGVkIHN0YXRlXG5cdG51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWQ6IG51bWJlcjtcblx0Ly8gdG90YWwgbnVtYmVyT2ZSZWNvbW1lbmRhdGlvbnNSZWNlaXZlZFxuXHR0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWQ6IG51bWJlcjtcblx0Ly8gbnVtYmVyIG9mIHRpbWVzIGZvcm1hdHRlciBub3QgY2FsbGVkXG5cdG51bWJlck9mVGltZXNGb3JtYXR0ZXJOb3RDYWxsZWQ6IG51bWJlcjtcblx0Ly8gdG90YWwgdGltZSB0YWtlblxuXHR0b3RhbFRpbWVUYWtlbjogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5RmlsdGVyQmFyU2VhcmNoRXZlbnQgPSBUZWxlbWV0cnlFdmVudCAmIHtcblx0dHlwZTogXCJGRS5GaWx0ZXJCYXJTZWFyY2hcIjtcblx0cGFyYW1ldGVyczoge1xuXHRcdGNvdW50RmlsdGVyQWN0aW9uczogbnVtYmVyOyAvLyAgSG93IG1hbnkgZmlsdGVyQ2hhbmdlZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWRcblx0XHRjb3VudEZpbHRlcnM6IG51bWJlcjsgLy8gSG93IG1hbnkgZGlmZmVyZW50IGZpbHRlcnMgYXJlIGFwcGxpZWRcblx0XHRjb3VudFZhcmlhbnRGaWx0ZXJzOiBudW1iZXI7IC8vIEhvdyBtYW55IGZpbHRlciBiZWxvbmcgdG8gYSB2YXJpYW50XG5cdFx0dmFyaWFudExheWVyOiBzdHJpbmc7IC8vIFR5cGUgb2YgdmFyaWFudFxuXHRcdGF1dG9Mb2FkOiBib29sZWFuOyAvLyBJcyB0aGUgYXBwIHVzaW5nIGF1dG8gbG9hZCBvZiB0YWJsZSBkYXRhXG5cdH07XG5cdHRlbXBsYXRlPzogVGVtcGxhdGVUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5UmVjb21tZW5kYXRpb25zID0gVGVsZW1ldHJ5RXZlbnQgJiB7XG5cdHR5cGU6IFwiRkUuUmVjb21tZW5kYXRpb25zXCI7XG5cdHBhcmFtZXRlcnM6IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5O1xuXHR0ZW1wbGF0ZT86IFRlbXBsYXRlVHlwZTtcbn07XG5cbmNvbnN0IFBhcmFtZXRlck1hcCA9IHtcblx0XCJGRS5GaWx0ZXJCYXJTZWFyY2hcIjogW1xuXHRcdHsgbmFtZTogXCJjb3VudEZpbHRlckFjdGlvbnNcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxuXHRcdHsgbmFtZTogXCJjb3VudEZpbHRlcnNcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxuXHRcdHsgbmFtZTogXCJjb3VudFZhcmlhbnRGaWx0ZXJzXCIsIHR5cGU6IFwibnVtYmVyXCIgfSxcblx0XHR7IG5hbWU6IFwidmFyaWFudExheWVyXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHR7IG5hbWU6IFwiYXV0b0xvYWRcIiwgdHlwZTogXCJib29sZWFuXCIgfVxuXHRdLFxuXHRcIkZFLlJlY29tbWVuZGF0aW9uc1wiOiBbXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzUmVjb21tZW5kYXRpb25zRmV0Y2hlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJtYXhUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnNcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibWluVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcImF2ZXJhZ2VUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnNcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZGaWVsZHNBY2NlcHRlZFRocm91Z2hBY2NlcHRCdXR0b25cIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvblwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzTm9QbGFjZWhvbGRlcklzU2hvd25PblVJXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mUmVjb21tZW5kZWRGaWVsZHNcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mVGltZXNOb25Ub3BSZWNvbW1lbmRhdGlvbnNTZWxlY3RlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzTm9uUmVjb21tZW5kZWRWYWx1ZVdhc1NlbGVjdGVkXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9uc1wiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJvZlRpbWVzRm9ybWF0dGVyQ2FsbGVkXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcInRvdGFsTnVtYmVyT2ZSZWNvbW1lbmRhdGlvbnNSZWNlaXZlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzRm9ybWF0dGVyTm90Q2FsbGVkXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcInRvdGFsVGltZVRha2VuXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fVxuXHRdXG59O1xuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlFdmVudHMgPSBUZWxlbWV0cnlGaWx0ZXJCYXJTZWFyY2hFdmVudCB8IFRlbGVtZXRyeVJlY29tbWVuZGF0aW9ucztcblxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFRlbGVtZXRyeVNlcnZpY2VTZXR0aW5ncz4ge1xuXHRhcHBJZD86IHN0cmluZztcblxuXHRhcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0aXNFbmFibGVkID0gZmFsc2U7XG5cblx0c3RhdGljIE1heFRlbGVtZXRyeSA9IDUwMDtcblxuXHRzdGF0aWMgQ291bnRCZWZvcmVGbHVzaCA9IDUwO1xuXG5cdHN0YXRpYyBFbmRwb2ludFJldHJ5UGVyaW9kID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gMSBkYXlcblxuXHRzdGF0aWMgdGFyZ2V0VXJsID0gXCIvc2FwL2JjL2h0dHAvc2FwL2dzbV9tZXRyaWNzXCI7XG5cblx0c3RhdGljIEV2ZW50U3RvcmVLZXkgPSBcIkV2ZW50U3RvcmVcIjtcblxuXHRzdGF0aWMgRW5kcG9pbnRTdG9yZUtleSA9IFwiRW5kcG9pbnRTdG9yZVwiO1xuXG5cdHN0YXRpYyBFdmVudENvdW50U3RvcmVLZXkgPSBcIkV2ZW50Q291bnRTdG9yZVwiO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gY29udGV4dD8uc2NvcGVPYmplY3QgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IGZpb3JpRGVmaW5pdGlvbiA9IHRoaXMuYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmlvcmlcIik7XG5cblx0XHR0aGlzLmFwcElkID0gZmlvcmlEZWZpbml0aW9uPy5yZWdpc3RyYXRpb25JZHM/LmpvaW4oXCItXCIpO1xuXHR9XG5cblx0YXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHRoaXM+IHtcblx0XHQvLyBjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgPSAoYXdhaXQgdGhpcy5hcHBDb21wb25lbnQuZ2V0U2VydmljZShcblx0XHQvLyBcdFwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcIlxuXHRcdC8vICkpIGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0XHQvLyBjb25zdCBmZURlZmluaXRpb24gPSB0aGlzLmFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRcdC8vIGlmIChcblx0XHQvLyBcdHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiZcblx0XHQvLyBcdGZlRGVmaW5pdGlvbj8uYXBwPy5lbmFibGVUZWxlbWV0cnkgPT09IHRydWUgJiZcblx0XHQvLyBcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZS5nZXRDYXBhYmlsaXRpZXMoKS5JbnNpZ2h0c1N1cHBvcnRlZCAmJlxuXHRcdC8vIFx0dGhpcy5hcHBJZCAhPT0gdW5kZWZpbmVkXG5cdFx0Ly8gKSB7XG5cdFx0Ly8gXHR0aGlzLmlzRW5hYmxlZCA9IHRydWU7XG5cdFx0Ly8gfVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIEZFIHRlbGVtZXRyeSBkYXRhIHJlcG9ydGluZy4gSXQgY2F0Y2hlcyBhbGwgZXhjZXB0aW9ucyBzbyB0aGF0XG5cdCAqIGFueSB1bmhhbmRsZWQgZXJyb3JzIGRvIG5vdCBhZmZlY3QgcmVndWxhciBGRSBhcHAgZnVuY3Rpb25hbGl0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aW9uIEEgdGVsZW1ldHJ5IGV2ZW50IHRoYXQgY29udGFpbiBtZXRyaWNzIHRvIGJlIHJlcG9ydGVkIHRvIEdTTS5cblx0ICogQHBhcmFtIHNvdXJjZVRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLlxuXHQgKi9cblx0YXN5bmMgc3RvcmVBY3Rpb24oYWN0aW9uOiBUZWxlbWV0cnlFdmVudHMsIHNvdXJjZVRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5pc0VuYWJsZWQpIHtcblx0XHRcdGNvbnN0IHRlbGVtZXRyeUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5hY3Rpb24sXG5cdFx0XHRcdHRlbXBsYXRlOiBzb3VyY2VUZW1wbGF0ZVxuXHRcdFx0fTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5zdG9yZUFuZEZsdXNoKHRlbGVtZXRyeUV2ZW50KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLmRlYnVnKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5zdGVhZCBvZiBkaXJlY3RseSBzZW5kaW5nIGluZGl2aWR1YWwgdGVsZW1ldHJ5XG5cdCAqIGV2ZW50cyB0byBiYWNrZW5kLCB0aGlzIEFQSSBpbXBsZW1lbnRzIG11bHRpcGxlIHN0cmF0ZWdpZXMgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2Ygc2VuZGluZ1xuXHQgKiB0ZWxlbWV0cnkgZXZlbnRzLCBhbmQgYXV0b21hdGljYWxseSB0dXJuIG9mZiBzZW5kaW5nIHRlbGVtZXRyeSBhZnRlciBjb2xsZWN0aW5nIGFkZXF1YXRlIGRhdGFcblx0ICogc2FtcGxlcy5cblx0ICpcblx0ICogQHBhcmFtIF90ZWxlbWV0cnlFdmVudCBBIHRlbGVtZXRyeSBldmVudCB0aGF0IGNvbnRhaW4gbWV0cmljcyB0byBiZSByZXBvcnRlZCB0byBHU00uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHN0b3JlQW5kRmx1c2goX3RlbGVtZXRyeUV2ZW50OiBUZWxlbWV0cnlFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIFNraXAgaWYgcmVhY2ggbWF4IGNvdW50IHdlIHNob3VsZCBjb2xsZWN0XG5cdFx0aWYgKCF0aGlzLnZhbGlkYXRlRXZlbnRDb3VudFBvbGljeSgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIFNraXAgaWYgdGhlIGVuZHBvaW50IGRpZG4ndCB3b3JrIHJlY2VudGx5XG5cdFx0aWYgKCF0aGlzLnZhbGlkYXRlRW5kcG9pbnRQb2xpY3koKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIHRlbGVtZXRyeSBldmVudHMgZnJvbSBzdG9yZVxuXHRcdGNvbnN0IGV2ZW50c0FzU3RyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFRlbGVtZXRyeVNlcnZpY2UuRXZlbnRTdG9yZUtleSk7XG5cdFx0bGV0IGV2ZW50czogVGVsZW1ldHJ5RXZlbnRbXTtcblx0XHRpZiAoIWV2ZW50c0FzU3RyKSB7XG5cdFx0XHRldmVudHMgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXZlbnRzID0gSlNPTi5wYXJzZShldmVudHNBc1N0cik7XG5cdFx0fVxuXHRcdGV2ZW50cy5wdXNoKF90ZWxlbWV0cnlFdmVudCk7XG5cblx0XHQvLyBPbmNlIHdlIGhhdmUgQ291bnRCZWZvcmVGbHVzaCBlbnRyaWVzIGZsdXNoIHRoZW1cblx0XHRpZiAoZXZlbnRzLmxlbmd0aCA+PSBUZWxlbWV0cnlTZXJ2aWNlLkNvdW50QmVmb3JlRmx1c2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZmx1c2goZXZlbnRzKTtcblx0XHRcdFx0Ly8gS2VlcCBjb3VudCBvZiBob3cgbWFueSBiYXRjaGVzIHdlIGhhdmUgc3VibWl0dGVkIGluIHRvdGFsXG5cdFx0XHRcdHRoaXMuaW5jcmVtZW50RXZlbnRDb3VudFN0b3JlKGV2ZW50cy5sZW5ndGgpO1xuXHRcdFx0XHR0aGlzLmNsZWFyRW5kcG9pbnRTdG9yZSgpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGVuZHBvaW50IHdhcyBub3QgcmVhY2hhYmxlXG5cdFx0XHRcdHRoaXMudXBkYXRlRW5kcG9pbnRTdG9yZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBObyBtYXR0ZXIgZW5kcG9pbnQgaXMgcmVhY2hhYmxlIG9yIG5vdCwgd2UgY2xlYW4gdGhlIHN0b3JhZ2UgYW55d2F5LlxuXHRcdFx0Ly8gVG8gYXZvaWQgcmlzayBvZiBhY2N1bXVsYXRpbmcgbGFyZ2UgYW1vdW50IG9mIHRlbGVtZXRyeSBkYXRhLlxuXHRcdFx0Ly8gSG9wZSB3ZSB3aWxsIGNvbGxlY3QgdXNlZnVsIGRhdGEgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdGV2ZW50cyA9IFtdO1xuXHRcdH1cblxuXHRcdC8vIFNhdmUgdGVsZW1ldHJ5IGV2ZW50cyBiYWNrIHRvIHN0b3JlXG5cdFx0Y29uc3QgdGVsZW1ldHJ5RXZlbnRTdHIgPSBKU09OLnN0cmluZ2lmeShldmVudHMpO1xuXHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShUZWxlbWV0cnlTZXJ2aWNlLkV2ZW50U3RvcmVLZXksIHRlbGVtZXRyeUV2ZW50U3RyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZW5kIGEgYmF0Y2ggb2YgdGVsZW1ldHJ5IGV2ZW50cyB0byBHU00gZW5kcG9pbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudHMgQW4gYXJyYXkgb2YgdGVsZW1ldHJ5IGV2ZW50c1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgR1NNIGVuZHBvaW50XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGZsdXNoKGV2ZW50czogVGVsZW1ldHJ5RXZlbnRbXSk6IFByb21pc2U8UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBib2R5ID0gdGhpcy5idWlsZFJlcXVlc3RCb2R5KGV2ZW50cyk7XG5cblx0XHQvLyBTZW5kIGEgYmF0Y2ggb2YgNTAgZXZlbnRzIHRvIGJhY2tlbmQuXG5cdFx0cmV0dXJuIGZldGNoKFRlbGVtZXRyeVNlcnZpY2UudGFyZ2V0VXJsLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0Ym9keVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2VyaWFsaXplIHRlbGVtZXRyeSBldmVudCB0byBzdHJpbmcgZm9ybWF0IGFjY2VwdGVkIGJ5IEdTTSBlbmRwb2ludC5cblx0ICogRXhhbXBsZSBvdXRwdXQgb2YgYSBiYXRjaCBvZiAyIHRlbGVtZXRyeSBldmVudHMgbG9va3MgbGlrZTpcblx0ICogXHR1aTVfYWN0aW9ueyB0eXBlPVwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsIGNvdW50RmlsdGVyQWN0aW9ucz0yLCBjb3VudEZpbHRlcnM9MSwgY291bnRWYXJpYW50RmlsdGVycz0xLCB2YXJpYW50TGF5ZXI9XCJ2YXJpYW50MFwiLCBhdXRvTG9hZD10cnVlIH0gMVxuXHQgKiAgdWk1X2FjdGlvbnsgdHlwZT1cIkZFLkZpbHRlckJhclNlYXJjaFwiLCBjb3VudEZpbHRlckFjdGlvbnM9MywgY291bnRGaWx0ZXJzPTEsIGNvdW50VmFyaWFudEZpbHRlcnM9MCwgdmFyaWFudExheWVyPVwidmFyaWFudDFcIiwgYXV0b0xvYWQ9ZmFsc2UgfSAxXG5cdCAqIFRoaXMgd2lsbCB0aGVuIGJlIHVzZWQgd2l0aCB0aGUgZ3NtIGVuZHBvaW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnRzIEFuIGFycmF5IG9mIHRlbGVtZXRyeSBldmVudHNcblx0ICogQHJldHVybnMgU2VyaWFsaXplZCBkYXRhIHRvIGJlIHBvc3RlZCB0byBHU00gZW5kcG9pbnRcblx0ICovXG5cdHByaXZhdGUgYnVpbGRSZXF1ZXN0Qm9keShldmVudHM6IFRlbGVtZXRyeUV2ZW50W10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCB3aGVuIGV2ZW50IHNpemUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIFRlbGVtZXRyeVNlcnZpY2UuTWF4VGVsZW1ldHJ5XG5cdFx0Ly8gSW5wdXQgaXMgYWx3YXlzIGFuIGFycmF5IGxpc3Qgb2YgZXZlbnRzID49IDBcblxuXHRcdHJldHVybiBldmVudHNcblx0XHRcdC5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclBlclR5cGUgPSBQYXJhbWV0ZXJNYXBbZXZlbnQudHlwZV07XG5cdFx0XHRcdGNvbnN0IHBhcmFtUGFydDogc3RyaW5nW10gPSBwYXJhbWV0ZXJQZXJUeXBlLm1hcCgoeyBuYW1lOiBwYXJhbU5hbWUsIHR5cGU6IHBhcmFtVHlwZSB9KSA9PiB7XG5cdFx0XHRcdFx0c3dpdGNoIChwYXJhbVR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBgJHtwYXJhbU5hbWV9PSR7ZXZlbnQucGFyYW1ldGVyc1twYXJhbU5hbWVdfWA7XG5cdFx0XHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYCR7cGFyYW1OYW1lfT1cIiR7ZXZlbnQucGFyYW1ldGVyc1twYXJhbU5hbWVdfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGB1aTVfYWN0aW9ueyB0eXBlPVwiJHtldmVudC50eXBlfVwiLCAke3BhcmFtUGFydC5qb2luKFwiLCBcIil9IH0gMVxcbmA7XG5cdFx0XHR9KVxuXHRcdFx0LmpvaW4oXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHZhbHVlIHRvIGFuIGVudHJ5IGluIGxvY2FsU3RvcmFnZS5cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSBpbiBsb2NhbFN0b3JhZ2Vcblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRXZlbnRDb3VudFN0b3JlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXksIGAke3ZhbHVlfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgaW5wdXQgdmFsdWUgdG8gdGhlIGV4aXN0aW5nIHZhbHVlIGluIGFuIGVudHJ5IGluIGxvY2FsU3RvcmFnZS5cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIEFtb3VudCBpbmNyZW1lbnRlZCB0byBhbiBleGlzdGluZyB2YWx1ZVxuXHQgKi9cblx0cHJpdmF0ZSBpbmNyZW1lbnRFdmVudENvdW50U3RvcmUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGV2ZW50Q291bnRTdHIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXkpO1xuXG5cdFx0Ly8gSWYgc3RvcmUgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGhhdmluZyB2YWx1ZSAwLiBJbmNyZW1lbnQgZnJvbSAwIGJ5IGFtb3VudCAndmFsdWUnLlxuXHRcdGlmICghZXZlbnRDb3VudFN0cikge1xuXHRcdFx0dGhpcy51cGRhdGVFdmVudENvdW50U3RvcmUodmFsdWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIHZhbGlkYXRlRXZlbnRDb3VudFBvbGljeSBhbHJlYWR5IHNhbml0aXplcyBpbnZhbGlkIGV2ZW50c1xuXHRcdGNvbnN0IGV2ZW50Q291bnQgPSBwYXJzZUludChldmVudENvdW50U3RyLCAxMCk7XG5cdFx0dGhpcy51cGRhdGVFdmVudENvdW50U3RvcmUoZXZlbnRDb3VudCArIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBhdm9pZCByaXNrIG9mIGZpbGxpbmcgYmFja2VuZCBzdG9yYWdlIHdpdGggdGVsZW1ldHJ5IGRhdGEsIHRoaXMgcG9saWN5XG5cdCAqIHRyYWNrcyB0b3RhbCBhbW91bnQgb2YgdGVsZW1ldHJ5IGV2ZW50cyBzZW50IHRvIGJhY2tlbmQgZnJvbSBhIGNsaWVudCwgYW5kXG5cdCAqIHRlcm1pbmF0ZXMgc2VuZGluZyB0ZWxlbWV0cnkgZXZlbnRzIGlmIG1heCB0aHJlc2hvbGQgcmVhY2hlZC5cblx0ICpcblx0ICogVGhpcyBpcyBhIGJlc3QgZWZmb3J0IGltcGxlbWVudGF0aW9uLiBJZiBsb2NhbFN0b3JhZ2UgaXMgY2xlYXJlZCBieSBGRSBlbmQgdXNlcixcblx0ICogdGVsZW1ldHJ5IGV2ZW50cyB3aWxsIGJlIHNlbnQgYWdhaW4uXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCAtIHN1Ym1pdHRlZCB0ZWxlbWV0cnkgZXZlbnQgY291bnQgZG9lc24ndCBleGNlZWQgbGltaXRcblx0ICogIGB0cnVlYCAtIG5vIHZhbGlkIGNvdW50IHdhcyBmb3VuZCwgcmVzdGFydCBmcm9tIDBcblx0ICogIGBmYWxzZWAgLSBzdWJtaXR0ZWQgdGVsZWVtdHJ5IGV2ZW50IGNvdW50IGV4Y2VlZHMgbGltaXRcblx0ICovXG5cdHByaXZhdGUgdmFsaWRhdGVFdmVudENvdW50UG9saWN5KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGV2ZW50Q291bnRTdHIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXkpO1xuXG5cdFx0aWYgKCFldmVudENvdW50U3RyKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBldmVudENvdW50ID0gcGFyc2VJbnQoZXZlbnRDb3VudFN0ciwgMTApO1xuXHRcdGlmIChpc05hTihldmVudENvdW50KSkge1xuXHRcdFx0Ly8gSWYgaW52YWxpZCBzdG9yZWQgdmFsdWUgZm91bmQsIHJlc2V0IGl0XG5cdFx0XHR0aGlzLnVwZGF0ZUV2ZW50Q291bnRTdG9yZSgwKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXZlbnRDb3VudCA8IFRlbGVtZXRyeVNlcnZpY2UuTWF4VGVsZW1ldHJ5O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRW5kcG9pbnRTdG9yZSgpOiB2b2lkIHtcblx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFN0b3JlS2V5LCBgJHtEYXRlLm5vdygpfWApO1xuXHR9XG5cblx0cHJpdmF0ZSBjbGVhckVuZHBvaW50U3RvcmUoKTogdm9pZCB7XG5cdFx0d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFRlbGVtZXRyeVNlcnZpY2UuRW5kcG9pbnRTdG9yZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZSBjdXJyZW50IHRpbWVJbk1pbGxpc2Vjb25kcyB3aXRoIHRoZSB0aW1lSW5NaWxsaXNlY29uZHMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cblx0ICogVXNhZ2U6IElmIGNvbm5lY3Rpb24gdG8gZW5kcG9pbnQgZmFpbGVkLCBpdCBpcyBsaWtlbHkgdGhlIGVuZHBvaW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIHRhcmdldFxuXHQgKiBzeXN0ZW0sIHN0b3AgY29sbGVjdGluZyBhbmQgc2VuZCB0ZWxlbWV0cnkgZm9yIHBlcmlvZCBvZiB0aW1lIGRlZmluZWQgaW4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgLSBpZiB0aGVyZSBpcyBubyB0aW1lc3RhbXAgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cblx0ICogXHRgdHJ1ZWAgLSBpZiB0aGUgZWxhcHNlZCB0aW1lIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgZGVmaW5lZCBpbiBUZWxlbWV0cnlTZXJ2aWNlLkVuZHBvaW50UmV0cnlQZXJpb2QuXG5cdCAqICBgZmFsc2VgIC0gaWYgdGhlIGVsYXBzZWQgdGltZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIGRlZmluZWQgaW4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kLlxuXHQgKi9cblx0cHJpdmF0ZSB2YWxpZGF0ZUVuZHBvaW50UG9saWN5KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRpbWVzdGFtcCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUZWxlbWV0cnlTZXJ2aWNlLkVuZHBvaW50U3RvcmVLZXkpO1xuXG5cdFx0aWYgKCF0aW1lc3RhbXApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG5cdFx0Y29uc3QgbGFzdENoZWNrVGltZSA9IHBhcnNlSW50KHRpbWVzdGFtcCwgMTApO1xuXHRcdGlmIChpc05hTihsYXN0Q2hlY2tUaW1lKSkge1xuXHRcdFx0Ly8gdGltZSBzdGFtcCBvZiBsYXN0IGZhaWxlZCBlbmRwb2ludCBjb25uZWN0aW9uIGlzIGNvcnJ1cHRlZFxuXHRcdFx0dGhpcy51cGRhdGVFbmRwb2ludFN0b3JlKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBub3cgLSBsYXN0Q2hlY2tUaW1lID4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbGVtZXRyeVNlcnZpY2VTZXR0aW5ncz4ge1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbGVtZXRyeVNlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFRlbGVtZXRyeVNlcnZpY2U+IHtcblx0XHRjb25zdCBpbnN0YW5jZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGluc3RhbmNlLmluaXRpYWxpemUoKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O0VBdUVBLE1BQU1BLFlBQVksR0FBRztJQUNwQixvQkFBb0IsRUFBRSxDQUNyQjtNQUFFQyxJQUFJLEVBQUUsb0JBQW9CO01BQUVDLElBQUksRUFBRTtJQUFTLENBQUMsRUFDOUM7TUFBRUQsSUFBSSxFQUFFLGNBQWM7TUFBRUMsSUFBSSxFQUFFO0lBQVMsQ0FBQyxFQUN4QztNQUFFRCxJQUFJLEVBQUUscUJBQXFCO01BQUVDLElBQUksRUFBRTtJQUFTLENBQUMsRUFDL0M7TUFBRUQsSUFBSSxFQUFFLGNBQWM7TUFBRUMs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
353
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJhbWV0ZXJNYXAiLCJuYW1lIiwidHlwZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJpc0VuYWJsZWQiLCJpbml0IiwiY29udGV4dCIsImdldENvbnRleHQiLCJhcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsImZpb3JpRGVmaW5pdGlvbiIsImdldE1hbmlmZXN0RW50cnkiLCJhcHBJZCIsInJlZ2lzdHJhdGlvbklkcyIsImpvaW4iLCJpbml0aWFsaXplIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJ0b0xvd2VyQ2FzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic3RvcmVBY3Rpb24iLCJhY3Rpb24iLCJzb3VyY2VUZW1wbGF0ZSIsInRlbGVtZXRyeUV2ZW50IiwidGVtcGxhdGUiLCJzdG9yZUFuZEZsdXNoIiwiZSIsIkxvZyIsImRlYnVnIiwiX3RlbGVtZXRyeUV2ZW50IiwidmFsaWRhdGVFdmVudENvdW50UG9saWN5IiwidmFsaWRhdGVFbmRwb2ludFBvbGljeSIsImV2ZW50c0FzU3RyIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkV2ZW50U3RvcmVLZXkiLCJldmVudHMiLCJKU09OIiwicGFyc2UiLCJwdXNoIiwibGVuZ3RoIiwiQ291bnRCZWZvcmVGbHVzaCIsImZsdXNoIiwiaW5jcmVtZW50RXZlbnRDb3VudFN0b3JlIiwiY2xlYXJFbmRwb2ludFN0b3JlIiwidXBkYXRlRW5kcG9pbnRTdG9yZSIsInRlbGVtZXRyeUV2ZW50U3RyIiwic3RyaW5naWZ5Iiwic2V0SXRlbSIsImJvZHkiLCJidWlsZFJlcXVlc3RCb2R5IiwiZmV0Y2giLCJ0YXJnZXRVcmwiLCJtZXRob2QiLCJtYXAiLCJldmVudCIsInBhcmFtZXRlclBlclR5cGUiLCJwYXJhbVBhcnQiLCJwYXJhbU5hbWUiLCJwYXJhbVR5cGUiLCJwYXJhbWV0ZXJzIiwidXBkYXRlRXZlbnRDb3VudFN0b3JlIiwidmFsdWUiLCJFdmVudENvdW50U3RvcmVLZXkiLCJldmVudENvdW50U3RyIiwiZXZlbnRDb3VudCIsInBhcnNlSW50IiwiaXNOYU4iLCJNYXhUZWxlbWV0cnkiLCJFbmRwb2ludFN0b3JlS2V5IiwiRGF0ZSIsIm5vdyIsInJlbW92ZUl0ZW0iLCJ0aW1lc3RhbXAiLCJsYXN0Q2hlY2tUaW1lIiwiRW5kcG9pbnRSZXRyeVBlcmlvZCIsIlNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0IiwiaW5zdGFuY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGVsZW1ldHJ5U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgVGVsZW1ldHJ5U2VydmljZVNldHRpbmdzID0ge307XG5leHBvcnQgdHlwZSBUZWxlbWV0cnlGaXRlckJhclNlYXJjaEV2ZW50VHlwZSA9IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCI7XG5leHBvcnQgdHlwZSBUZWxlbWV0cnlSZWNvbW1lbmRhdGlvblR5cGUgPSBcIkZFLlJlY29tbWVuZGF0aW9uc1wiO1xuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlFdmVudCA9IHtcblx0dHlwZTogVGVsZW1ldHJ5Rml0ZXJCYXJTZWFyY2hFdmVudFR5cGUgfCBUZWxlbWV0cnlSZWNvbW1lbmRhdGlvblR5cGU7XG5cdHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVjb21tZW5kYXRpb25UZWxlbWV0cnkgPSB7XG5cdC8vIEhvdyBtYW55IHRpbWVzIGRvIHdlIHJlLXJlYWQgdGhlIGRhdGE/XG5cdC8vIG51bWJlciBvZiB0aW1lcyByZWNvbW1lbmRhdGlvbnMgd2VyZSBmZXRjaGVkIGluIHRoZSBjdXJyZW50IHZpZXcgKGlycmVzcGVjdGl2ZSBvZiBwYWdlL3RhYmxlIGNvbnRleHQpXG5cdG51bWJlck9mVGltZXNSZWNvbW1lbmRhdGlvbnNGZXRjaGVkOiBudW1iZXI7XG5cdC8vIEhvdyBsb25nIGRpZCB0aGUgcmVjb21tZW5kYXRpb24gY2FsbCB0YWtlP1xuXHQvLyBtYXhpbXVtIHRpbWUgdGFrZW4gdG8gcmVjZWl2ZSByZWNvbW1lbmRhdGlvbnNcblx0bWF4VGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zOiBudW1iZXI7XG5cdC8vIG1hbmltdW0gdGltZSB0YWtlbiB0byByZWNlaXZlIHJlY29tbWVuZGF0aW9uc1xuXHRtaW5UaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IG51bWJlcjtcblx0Ly8gYXZlcmFnZSB0aW1lIHRha2VuIHRvIHJlY2VpdmUgcmVjb21tZW5kYXRpb25zXG5cdGF2ZXJhZ2VUaW1lVGFrZW5Ub1JlY2VpdmVSZWNvbW1lbmRhdGlvbnM6IG51bWJlcjtcblx0Ly9udW1iZXIgb2YgdGltZXMsIHBsYWNlaG9sZGVyIGlzIG5vdCBzZWVuIG9uIFVJXG5cdG51bWJlck9mVGltZXNOb1BsYWNlaG9sZGVySXNTaG93bk9uVUk6IG51bWJlcjtcblx0Ly8gbnVtYmVyIG9mIEZpZWxkIGhhdmluZyByZWNvbW1lbmRhdGlvbnNcblx0bnVtYmVyT2ZSZWNvbW1lbmRlZEZpZWxkczogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgRmllbGRzIGRpcmVjdGx5IGFjY2VwdGVkIHRocm91Z2ggQWNjZXB0IGJ1dHRvblxuXHRudW1iZXJPZkZpZWxkc0FjY2VwdGVkVGhyb3VnaEFjY2VwdEJ1dHRvbjogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgRmllbGRzIGlnbm9yZWQgdGhyb3VnaCBBY2NlcHQgYnV0dG9uXG5cdG51bWJlck9mRmllbGRzSWdub3JlZFRocm91Z2hJZ25vcmVCdXR0b246IG51bWJlcjtcblx0Ly8gbnVtYmVyIG9mIHRpbWVzIHRvcCByZWNvbW1lbmRhdGlvbiB3YXMgc2VsZWN0ZWRcblx0bnVtYmVyT2ZUaW1lc1RvcFJlY29tbWVuZGF0aW9uc1NlbGVjdGVkOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiB0aW1lcyBub24tdG9wIHJlY29tbWVuZGF0aW9uIHdhcyBzZWxlY3RlZFxuXHRudW1iZXJPZlRpbWVzTm9uVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWQ6IG51bWJlcjtcblx0Ly8gbnVtYmVyIG9mIHRpbWVzIG5vbi1yZWNvbW1lbmRlZCB2YWx1ZSB3YXMgc2VsZWN0ZWRcblx0bnVtYmVyT2ZUaW1lc05vblJlY29tbWVuZGVkVmFsdWVXYXNTZWxlY3RlZDogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgdGltZXMgZW1wdHkgcmVjb21tZW5kYXRpb25zIHdlcmUgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kXG5cdG51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9uczogbnVtYmVyO1xuXHQvLyBudW1iZXIgb2YgdGltZXMgZm9ybWF0dGVyIHdhcyBjYWxsZWQgdG8gc2hvdyByZWNvbW1lbmRlZCBzdGF0ZVxuXHRudW1iZXJvZlRpbWVzRm9ybWF0dGVyQ2FsbGVkOiBudW1iZXI7XG5cdC8vIHRvdGFsIG51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWRcblx0dG90YWxOdW1iZXJPZlJlY29tbWVuZGF0aW9uc1JlY2VpdmVkOiBudW1iZXI7XG5cdC8vIG51bWJlciBvZiB0aW1lcyBmb3JtYXR0ZXIgbm90IGNhbGxlZFxuXHRudW1iZXJPZlRpbWVzRm9ybWF0dGVyTm90Q2FsbGVkOiBudW1iZXI7XG5cdC8vIHRvdGFsIHRpbWUgdGFrZW5cblx0dG90YWxUaW1lVGFrZW46IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUZpbHRlckJhclNlYXJjaEV2ZW50ID0gVGVsZW1ldHJ5RXZlbnQgJiB7XG5cdHR5cGU6IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCI7XG5cdHBhcmFtZXRlcnM6IHtcblx0XHRjb3VudEZpbHRlckFjdGlvbnM6IG51bWJlcjsgLy8gIEhvdyBtYW55IGZpbHRlckNoYW5nZWQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkXG5cdFx0Y291bnRGaWx0ZXJzOiBudW1iZXI7IC8vIEhvdyBtYW55IGRpZmZlcmVudCBmaWx0ZXJzIGFyZSBhcHBsaWVkXG5cdFx0Y291bnRWYXJpYW50RmlsdGVyczogbnVtYmVyOyAvLyBIb3cgbWFueSBmaWx0ZXIgYmVsb25nIHRvIGEgdmFyaWFudFxuXHRcdHZhcmlhbnRMYXllcjogc3RyaW5nOyAvLyBUeXBlIG9mIHZhcmlhbnRcblx0XHRhdXRvTG9hZDogYm9vbGVhbjsgLy8gSXMgdGhlIGFwcCB1c2luZyBhdXRvIGxvYWQgb2YgdGFibGUgZGF0YVxuXHR9O1xuXHR0ZW1wbGF0ZT86IFRlbXBsYXRlVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeVJlY29tbWVuZGF0aW9ucyA9IFRlbGVtZXRyeUV2ZW50ICYge1xuXHR0eXBlOiBcIkZFLlJlY29tbWVuZGF0aW9uc1wiO1xuXHRwYXJhbWV0ZXJzOiBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeTtcblx0dGVtcGxhdGU/OiBUZW1wbGF0ZVR5cGU7XG59O1xuXG5jb25zdCBQYXJhbWV0ZXJNYXAgPSB7XG5cdFwiRkUuRmlsdGVyQmFyU2VhcmNoXCI6IFtcblx0XHR7IG5hbWU6IFwiY291bnRGaWx0ZXJBY3Rpb25zXCIsIHR5cGU6IFwibnVtYmVyXCIgfSxcblx0XHR7IG5hbWU6IFwiY291bnRGaWx0ZXJzXCIsIHR5cGU6IFwibnVtYmVyXCIgfSxcblx0XHR7IG5hbWU6IFwiY291bnRWYXJpYW50RmlsdGVyc1wiLCB0eXBlOiBcIm51bWJlclwiIH0sXG5cdFx0eyBuYW1lOiBcInZhcmlhbnRMYXllclwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0eyBuYW1lOiBcImF1dG9Mb2FkXCIsIHR5cGU6IFwiYm9vbGVhblwiIH1cblx0XSxcblx0XCJGRS5SZWNvbW1lbmRhdGlvbnNcIjogW1xuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZUaW1lc1JlY29tbWVuZGF0aW9uc0ZldGNoZWRcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibWF4VGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm1pblRpbWVUYWtlblRvUmVjZWl2ZVJlY29tbWVuZGF0aW9uc1wiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJhdmVyYWdlVGltZVRha2VuVG9SZWNlaXZlUmVjb21tZW5kYXRpb25zXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mRmllbGRzSWdub3JlZFRocm91Z2hJZ25vcmVCdXR0b25cIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZUaW1lc05vUGxhY2Vob2xkZXJJc1Nob3duT25VSVwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlJlY29tbWVuZGVkRmllbGRzXCIsXG5cdFx0XHR0eXBlOiBcIm51bWJlclwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIm51bWJlck9mVGltZXNUb3BSZWNvbW1lbmRhdGlvbnNTZWxlY3RlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzTm9uVG9wUmVjb21tZW5kYXRpb25zU2VsZWN0ZWRcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZUaW1lc05vblJlY29tbWVuZGVkVmFsdWVXYXNTZWxlY3RlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJudW1iZXJPZlRpbWVzRW1wdHlSZWNvbW1lbmRhdGlvbnNcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyb2ZUaW1lc0Zvcm1hdHRlckNhbGxlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJ0b3RhbE51bWJlck9mUmVjb21tZW5kYXRpb25zUmVjZWl2ZWRcIixcblx0XHRcdHR5cGU6IFwibnVtYmVyXCJcblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwibnVtYmVyT2ZUaW1lc0Zvcm1hdHRlck5vdENhbGxlZFwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJ0b3RhbFRpbWVUYWtlblwiLFxuXHRcdFx0dHlwZTogXCJudW1iZXJcIlxuXHRcdH1cblx0XVxufTtcblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5RXZlbnRzID0gVGVsZW1ldHJ5RmlsdGVyQmFyU2VhcmNoRXZlbnQgfCBUZWxlbWV0cnlSZWNvbW1lbmRhdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZWxlbWV0cnlTZXJ2aWNlU2V0dGluZ3M+IHtcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0YXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdGlzRW5hYmxlZCA9IGZhbHNlO1xuXG5cdHN0YXRpYyBNYXhUZWxlbWV0cnkgPSA1MDA7XG5cblx0c3RhdGljIENvdW50QmVmb3JlRmx1c2ggPSA1MDtcblxuXHRzdGF0aWMgRW5kcG9pbnRSZXRyeVBlcmlvZCA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIDEgZGF5XG5cblx0c3RhdGljIHRhcmdldFVybCA9IFwiL3NhcC9iYy91aTIvZmxwO3NhcC1tZXRyaWNzLW9ubHlcIjtcblxuXHRzdGF0aWMgRXZlbnRTdG9yZUtleSA9IFwiRXZlbnRTdG9yZVwiO1xuXG5cdHN0YXRpYyBFbmRwb2ludFN0b3JlS2V5ID0gXCJFbmRwb2ludFN0b3JlXCI7XG5cblx0c3RhdGljIEV2ZW50Q291bnRTdG9yZUtleSA9IFwiRXZlbnRDb3VudFN0b3JlXCI7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0dGhpcy5hcHBDb21wb25lbnQgPSBjb250ZXh0Py5zY29wZU9iamVjdCBhcyBBcHBDb21wb25lbnQ7XG5cdFx0Y29uc3QgZmlvcmlEZWZpbml0aW9uID0gdGhpcy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5maW9yaVwiKTtcblxuXHRcdHRoaXMuYXBwSWQgPSBmaW9yaURlZmluaXRpb24/LnJlZ2lzdHJhdGlvbklkcz8uam9pbihcIi1cIik7XG5cdH1cblxuXHRhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dGhpcz4ge1xuXHRcdC8vIGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSA9IChhd2FpdCB0aGlzLmFwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFxuXHRcdC8vIFx0XCJlbnZpcm9ubWVudENhcGFiaWxpdGllc1wiXG5cdFx0Ly8gKSkgYXMgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlO1xuXHRcdC8vIGNvbnN0IGZlRGVmaW5pdGlvbiA9IHRoaXMuYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik7XG5cdFx0Ly8gaWYgKFxuXHRcdC8vIFx0d2luZG93LmxvY2FsU3RvcmFnZSAmJlxuXHRcdC8vIFx0ZmVEZWZpbml0aW9uPy5hcHA/LmVuYWJsZVRlbGVtZXRyeSA9PT0gdHJ1ZSAmJlxuXHRcdC8vIFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlLmdldENhcGFiaWxpdGllcygpLkluc2lnaHRzU3VwcG9ydGVkICYmXG5cdFx0Ly8gXHR0aGlzLmFwcElkICE9PSB1bmRlZmluZWRcblx0XHQvLyApIHtcblx0XHQvLyBcdHRoaXMuaXNFbmFibGVkID0gdHJ1ZTtcblx0XHQvLyB9XG5cblx0XHRjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXHRcdGlmICh1cmxQYXJhbXMuZ2V0KFwic2FwLXVpLXh4LWZlRW5hYmxlR1NNXCIpPy50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIikge1xuXHRcdFx0dGhpcy5pc0VuYWJsZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIEZFIHRlbGVtZXRyeSBkYXRhIHJlcG9ydGluZy4gSXQgY2F0Y2hlcyBhbGwgZXhjZXB0aW9ucyBzbyB0aGF0XG5cdCAqIGFueSB1bmhhbmRsZWQgZXJyb3JzIGRvIG5vdCBhZmZlY3QgcmVndWxhciBGRSBhcHAgZnVuY3Rpb25hbGl0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aW9uIEEgdGVsZW1ldHJ5IGV2ZW50IHRoYXQgY29udGFpbiBtZXRyaWNzIHRvIGJlIHJlcG9ydGVkIHRvIEdTTS5cblx0ICogQHBhcmFtIHNvdXJjZVRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLlxuXHQgKi9cblx0YXN5bmMgc3RvcmVBY3Rpb24oYWN0aW9uOiBUZWxlbWV0cnlFdmVudHMsIHNvdXJjZVRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5pc0VuYWJsZWQpIHtcblx0XHRcdGNvbnN0IHRlbGVtZXRyeUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5hY3Rpb24sXG5cdFx0XHRcdHRlbXBsYXRlOiBzb3VyY2VUZW1wbGF0ZVxuXHRcdFx0fTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5zdG9yZUFuZEZsdXNoKHRlbGVtZXRyeUV2ZW50KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLmRlYnVnKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5zdGVhZCBvZiBkaXJlY3RseSBzZW5kaW5nIGluZGl2aWR1YWwgdGVsZW1ldHJ5XG5cdCAqIGV2ZW50cyB0byBiYWNrZW5kLCB0aGlzIEFQSSBpbXBsZW1lbnRzIG11bHRpcGxlIHN0cmF0ZWdpZXMgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2Ygc2VuZGluZ1xuXHQgKiB0ZWxlbWV0cnkgZXZlbnRzLCBhbmQgYXV0b21hdGljYWxseSB0dXJuIG9mZiBzZW5kaW5nIHRlbGVtZXRyeSBhZnRlciBjb2xsZWN0aW5nIGFkZXF1YXRlIGRhdGFcblx0ICogc2FtcGxlcy5cblx0ICpcblx0ICogQHBhcmFtIF90ZWxlbWV0cnlFdmVudCBBIHRlbGVtZXRyeSBldmVudCB0aGF0IGNvbnRhaW4gbWV0cmljcyB0byBiZSByZXBvcnRlZCB0byBHU00uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHN0b3JlQW5kRmx1c2goX3RlbGVtZXRyeUV2ZW50OiBUZWxlbWV0cnlFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIFNraXAgaWYgcmVhY2ggbWF4IGNvdW50IHdlIHNob3VsZCBjb2xsZWN0XG5cdFx0aWYgKCF0aGlzLnZhbGlkYXRlRXZlbnRDb3VudFBvbGljeSgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIFNraXAgaWYgdGhlIGVuZHBvaW50IGRpZG4ndCB3b3JrIHJlY2VudGx5XG5cdFx0aWYgKCF0aGlzLnZhbGlkYXRlRW5kcG9pbnRQb2xpY3koKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIHRlbGVtZXRyeSBldmVudHMgZnJvbSBzdG9yZVxuXHRcdGNvbnN0IGV2ZW50c0FzU3RyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFRlbGVtZXRyeVNlcnZpY2UuRXZlbnRTdG9yZUtleSk7XG5cdFx0bGV0IGV2ZW50czogVGVsZW1ldHJ5RXZlbnRbXTtcblx0XHRpZiAoIWV2ZW50c0FzU3RyKSB7XG5cdFx0XHRldmVudHMgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXZlbnRzID0gSlNPTi5wYXJzZShldmVudHNBc1N0cik7XG5cdFx0fVxuXHRcdGV2ZW50cy5wdXNoKF90ZWxlbWV0cnlFdmVudCk7XG5cblx0XHQvLyBPbmNlIHdlIGhhdmUgQ291bnRCZWZvcmVGbHVzaCBlbnRyaWVzIGZsdXNoIHRoZW1cblx0XHRpZiAoZXZlbnRzLmxlbmd0aCA+PSBUZWxlbWV0cnlTZXJ2aWNlLkNvdW50QmVmb3JlRmx1c2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZmx1c2goZXZlbnRzKTtcblx0XHRcdFx0Ly8gS2VlcCBjb3VudCBvZiBob3cgbWFueSBiYXRjaGVzIHdlIGhhdmUgc3VibWl0dGVkIGluIHRvdGFsXG5cdFx0XHRcdHRoaXMuaW5jcmVtZW50RXZlbnRDb3VudFN0b3JlKGV2ZW50cy5sZW5ndGgpO1xuXHRcdFx0XHR0aGlzLmNsZWFyRW5kcG9pbnRTdG9yZSgpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGVuZHBvaW50IHdhcyBub3QgcmVhY2hhYmxlXG5cdFx0XHRcdHRoaXMudXBkYXRlRW5kcG9pbnRTdG9yZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBObyBtYXR0ZXIgZW5kcG9pbnQgaXMgcmVhY2hhYmxlIG9yIG5vdCwgd2UgY2xlYW4gdGhlIHN0b3JhZ2UgYW55d2F5LlxuXHRcdFx0Ly8gVG8gYXZvaWQgcmlzayBvZiBhY2N1bXVsYXRpbmcgbGFyZ2UgYW1vdW50IG9mIHRlbGVtZXRyeSBkYXRhLlxuXHRcdFx0Ly8gSG9wZSB3ZSB3aWxsIGNvbGxlY3QgdXNlZnVsIGRhdGEgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdGV2ZW50cyA9IFtdO1xuXHRcdH1cblxuXHRcdC8vIFNhdmUgdGVsZW1ldHJ5IGV2ZW50cyBiYWNrIHRvIHN0b3JlXG5cdFx0Y29uc3QgdGVsZW1ldHJ5RXZlbnRTdHIgPSBKU09OLnN0cmluZ2lmeShldmVudHMpO1xuXHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShUZWxlbWV0cnlTZXJ2aWNlLkV2ZW50U3RvcmVLZXksIHRlbGVtZXRyeUV2ZW50U3RyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZW5kIGEgYmF0Y2ggb2YgdGVsZW1ldHJ5IGV2ZW50cyB0byBHU00gZW5kcG9pbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudHMgQW4gYXJyYXkgb2YgdGVsZW1ldHJ5IGV2ZW50c1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgR1NNIGVuZHBvaW50XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGZsdXNoKGV2ZW50czogVGVsZW1ldHJ5RXZlbnRbXSk6IFByb21pc2U8UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBib2R5ID0gdGhpcy5idWlsZFJlcXVlc3RCb2R5KGV2ZW50cyk7XG5cblx0XHQvLyBTZW5kIGEgYmF0Y2ggb2YgNTAgZXZlbnRzIHRvIGJhY2tlbmQuXG5cdFx0cmV0dXJuIGZldGNoKFRlbGVtZXRyeVNlcnZpY2UudGFyZ2V0VXJsLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0Ym9keVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2VyaWFsaXplIHRlbGVtZXRyeSBldmVudCB0byBzdHJpbmcgZm9ybWF0IGFjY2VwdGVkIGJ5IEdTTSBlbmRwb2ludC5cblx0ICogRXhhbXBsZSBvdXRwdXQgb2YgYSBiYXRjaCBvZiAyIHRlbGVtZXRyeSBldmVudHMgbG9va3MgbGlrZTpcblx0ICogXHR1aTVfYWN0aW9ueyB0eXBlPVwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsIGNvdW50RmlsdGVyQWN0aW9ucz0yLCBjb3VudEZpbHRlcnM9MSwgY291bnRWYXJpYW50RmlsdGVycz0xLCB2YXJpYW50TGF5ZXI9XCJ2YXJpYW50MFwiLCBhdXRvTG9hZD10cnVlIH0gMVxuXHQgKiAgdWk1X2FjdGlvbnsgdHlwZT1cIkZFLkZpbHRlckJhclNlYXJjaFwiLCBjb3VudEZpbHRlckFjdGlvbnM9MywgY291bnRGaWx0ZXJzPTEsIGNvdW50VmFyaWFudEZpbHRlcnM9MCwgdmFyaWFudExheWVyPVwidmFyaWFudDFcIiwgYXV0b0xvYWQ9ZmFsc2UgfSAxXG5cdCAqIFRoaXMgd2lsbCB0aGVuIGJlIHVzZWQgd2l0aCB0aGUgZ3NtIGVuZHBvaW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnRzIEFuIGFycmF5IG9mIHRlbGVtZXRyeSBldmVudHNcblx0ICogQHJldHVybnMgU2VyaWFsaXplZCBkYXRhIHRvIGJlIHBvc3RlZCB0byBHU00gZW5kcG9pbnRcblx0ICovXG5cdHByaXZhdGUgYnVpbGRSZXF1ZXN0Qm9keShldmVudHM6IFRlbGVtZXRyeUV2ZW50W10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCB3aGVuIGV2ZW50IHNpemUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIFRlbGVtZXRyeVNlcnZpY2UuTWF4VGVsZW1ldHJ5XG5cdFx0Ly8gSW5wdXQgaXMgYWx3YXlzIGFuIGFycmF5IGxpc3Qgb2YgZXZlbnRzID49IDBcblxuXHRcdHJldHVybiBldmVudHNcblx0XHRcdC5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclBlclR5cGUgPSBQYXJhbWV0ZXJNYXBbZXZlbnQudHlwZV07XG5cdFx0XHRcdGNvbnN0IHBhcmFtUGFydDogc3RyaW5nW10gPSBwYXJhbWV0ZXJQZXJUeXBlLm1hcCgoeyBuYW1lOiBwYXJhbU5hbWUsIHR5cGU6IHBhcmFtVHlwZSB9KSA9PiB7XG5cdFx0XHRcdFx0c3dpdGNoIChwYXJhbVR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBgJHtwYXJhbU5hbWV9PSR7ZXZlbnQucGFyYW1ldGVyc1twYXJhbU5hbWVdfWA7XG5cdFx0XHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYCR7cGFyYW1OYW1lfT1cIiR7ZXZlbnQucGFyYW1ldGVyc1twYXJhbU5hbWVdfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGB1aTVfYWN0aW9ueyB0eXBlPVwiJHtldmVudC50eXBlfVwiLCAke3BhcmFtUGFydC5qb2luKFwiLCBcIil9IH0gMVxcbmA7XG5cdFx0XHR9KVxuXHRcdFx0LmpvaW4oXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHZhbHVlIHRvIGFuIGVudHJ5IGluIGxvY2FsU3RvcmFnZS5cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSBpbiBsb2NhbFN0b3JhZ2Vcblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRXZlbnRDb3VudFN0b3JlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXksIGAke3ZhbHVlfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgaW5wdXQgdmFsdWUgdG8gdGhlIGV4aXN0aW5nIHZhbHVlIGluIGFuIGVudHJ5IGluIGxvY2FsU3RvcmFnZS5cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIEFtb3VudCBpbmNyZW1lbnRlZCB0byBhbiBleGlzdGluZyB2YWx1ZVxuXHQgKi9cblx0cHJpdmF0ZSBpbmNyZW1lbnRFdmVudENvdW50U3RvcmUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGV2ZW50Q291bnRTdHIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXkpO1xuXG5cdFx0Ly8gSWYgc3RvcmUgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGhhdmluZyB2YWx1ZSAwLiBJbmNyZW1lbnQgZnJvbSAwIGJ5IGFtb3VudCAndmFsdWUnLlxuXHRcdGlmICghZXZlbnRDb3VudFN0cikge1xuXHRcdFx0dGhpcy51cGRhdGVFdmVudENvdW50U3RvcmUodmFsdWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIHZhbGlkYXRlRXZlbnRDb3VudFBvbGljeSBhbHJlYWR5IHNhbml0aXplcyBpbnZhbGlkIGV2ZW50c1xuXHRcdGNvbnN0IGV2ZW50Q291bnQgPSBwYXJzZUludChldmVudENvdW50U3RyLCAxMCk7XG5cdFx0dGhpcy51cGRhdGVFdmVudENvdW50U3RvcmUoZXZlbnRDb3VudCArIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBhdm9pZCByaXNrIG9mIGZpbGxpbmcgYmFja2VuZCBzdG9yYWdlIHdpdGggdGVsZW1ldHJ5IGRhdGEsIHRoaXMgcG9saWN5XG5cdCAqIHRyYWNrcyB0b3RhbCBhbW91bnQgb2YgdGVsZW1ldHJ5IGV2ZW50cyBzZW50IHRvIGJhY2tlbmQgZnJvbSBhIGNsaWVudCwgYW5kXG5cdCAqIHRlcm1pbmF0ZXMgc2VuZGluZyB0ZWxlbWV0cnkgZXZlbnRzIGlmIG1heCB0aHJlc2hvbGQgcmVhY2hlZC5cblx0ICpcblx0ICogVGhpcyBpcyBhIGJlc3QgZWZmb3J0IGltcGxlbWVudGF0aW9uLiBJZiBsb2NhbFN0b3JhZ2UgaXMgY2xlYXJlZCBieSBGRSBlbmQgdXNlcixcblx0ICogdGVsZW1ldHJ5IGV2ZW50cyB3aWxsIGJlIHNlbnQgYWdhaW4uXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCAtIHN1Ym1pdHRlZCB0ZWxlbWV0cnkgZXZlbnQgY291bnQgZG9lc24ndCBleGNlZWQgbGltaXRcblx0ICogIGB0cnVlYCAtIG5vIHZhbGlkIGNvdW50IHdhcyBmb3VuZCwgcmVzdGFydCBmcm9tIDBcblx0ICogIGBmYWxzZWAgLSBzdWJtaXR0ZWQgdGVsZWVtdHJ5IGV2ZW50IGNvdW50IGV4Y2VlZHMgbGltaXRcblx0ICovXG5cdHByaXZhdGUgdmFsaWRhdGVFdmVudENvdW50UG9saWN5KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGV2ZW50Q291bnRTdHIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FdmVudENvdW50U3RvcmVLZXkpO1xuXG5cdFx0aWYgKCFldmVudENvdW50U3RyKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBldmVudENvdW50ID0gcGFyc2VJbnQoZXZlbnRDb3VudFN0ciwgMTApO1xuXHRcdGlmIChpc05hTihldmVudENvdW50KSkge1xuXHRcdFx0Ly8gSWYgaW52YWxpZCBzdG9yZWQgdmFsdWUgZm91bmQsIHJlc2V0IGl0XG5cdFx0XHR0aGlzLnVwZGF0ZUV2ZW50Q291bnRTdG9yZSgwKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXZlbnRDb3VudCA8IFRlbGVtZXRyeVNlcnZpY2UuTWF4VGVsZW1ldHJ5O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRW5kcG9pbnRTdG9yZSgpOiB2b2lkIHtcblx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFN0b3JlS2V5LCBgJHtEYXRlLm5vdygpfWApO1xuXHR9XG5cblx0cHJpdmF0ZSBjbGVhckVuZHBvaW50U3RvcmUoKTogdm9pZCB7XG5cdFx0d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFRlbGVtZXRyeVNlcnZpY2UuRW5kcG9pbnRTdG9yZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZSBjdXJyZW50IHRpbWVJbk1pbGxpc2Vjb25kcyB3aXRoIHRoZSB0aW1lSW5NaWxsaXNlY29uZHMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cblx0ICogVXNhZ2U6IElmIGNvbm5lY3Rpb24gdG8gZW5kcG9pbnQgZmFpbGVkLCBpdCBpcyBsaWtlbHkgdGhlIGVuZHBvaW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIHRhcmdldFxuXHQgKiBzeXN0ZW0sIHN0b3AgY29sbGVjdGluZyBhbmQgc2VuZCB0ZWxlbWV0cnkgZm9yIHBlcmlvZCBvZiB0aW1lIGRlZmluZWQgaW4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgLSBpZiB0aGVyZSBpcyBubyB0aW1lc3RhbXAgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cblx0ICogXHRgdHJ1ZWAgLSBpZiB0aGUgZWxhcHNlZCB0aW1lIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgZGVmaW5lZCBpbiBUZWxlbWV0cnlTZXJ2aWNlLkVuZHBvaW50UmV0cnlQZXJpb2QuXG5cdCAqICBgZmFsc2VgIC0gaWYgdGhlIGVsYXBzZWQgdGltZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIGRlZmluZWQgaW4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kLlxuXHQgKi9cblx0cHJpdmF0ZSB2YWxpZGF0ZUVuZHBvaW50UG9saWN5KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRpbWVzdGFtcCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUZWxlbWV0cnlTZXJ2aWNlLkVuZHBvaW50U3RvcmVLZXkpO1xuXG5cdFx0aWYgKCF0aW1lc3RhbXApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG5cdFx0Y29uc3QgbGFzdENoZWNrVGltZSA9IHBhcnNlSW50KHRpbWVzdGFtcCwgMTApO1xuXHRcdGlmIChpc05hTihsYXN0Q2hlY2tUaW1lKSkge1xuXHRcdFx0Ly8gdGltZSBzdGFtcCBvZiBsYXN0IGZhaWxlZCBlbmRwb2ludCBjb25uZWN0aW9uIGlzIGNvcnJ1cHRlZFxuXHRcdFx0dGhpcy51cGRhdGVFbmRwb2ludFN0b3JlKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBub3cgLSBsYXN0Q2hlY2tUaW1lID4gVGVsZW1ldHJ5U2VydmljZS5FbmRwb2ludFJldHJ5UGVyaW9kO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbGVtZXRyeVNlcnZpY2VTZXR0aW5ncz4ge1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbGVtZXRyeVNlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFRlbGVtZXRyeVNlcnZpY2U+IHtcblx0XHRjb25zdCBpbnN0YW5jZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGluc3RhbmNlLmluaXRpYWxpemUoKTtcblx0fVxufVxuIl0sIm1hcHBp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
@@ -160,7 +160,7 @@ export class TelemetryService extends Service<TelemetryServiceSettings> {
160
160
 
161
161
  static EndpointRetryPeriod = 1000 * 60 * 60 * 24; // 1 day
162
162
 
163
- static targetUrl = "/sap/bc/http/sap/gsm_metrics";
163
+ static targetUrl = "/sap/bc/ui2/flp;sap-metrics-only";
164
164
 
165
165
  static EventStoreKey = "EventStore";
166
166
 
@@ -189,6 +189,12 @@ export class TelemetryService extends Service<TelemetryServiceSettings> {
189
189
  // ) {
190
190
  // this.isEnabled = true;
191
191
  // }
192
+
193
+ const urlParams = new URLSearchParams(window.location.search);
194
+ if (urlParams.get("sap-ui-xx-feEnableGSM")?.toLowerCase() === "true") {
195
+ this.isEnabled = true;
196
+ }
197
+
192
198
  return Promise.resolve(this);
193
199
  }
194
200