@sapui5/sap.fe.core 1.131.0 → 1.133.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 (317) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +17 -23
  4. package/src/sap/fe/core/AppComponent.js +74 -36
  5. package/src/sap/fe/core/AppComponent.ts +70 -3
  6. package/src/sap/fe/core/AppStateHandler.js +44 -13
  7. package/src/sap/fe/core/AppStateHandler.ts +38 -0
  8. package/src/sap/fe/core/BaseController.js +3 -3
  9. package/src/sap/fe/core/CommonUtils.js +30 -37
  10. package/src/sap/fe/core/CommonUtils.ts +15 -13
  11. package/src/sap/fe/core/ExtensionAPI.js +29 -34
  12. package/src/sap/fe/core/ExtensionAPI.ts +3 -0
  13. package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
  14. package/src/sap/fe/core/PageController.js +40 -31
  15. package/src/sap/fe/core/PageController.ts +14 -1
  16. package/src/sap/fe/core/ResourceModel.js +4 -4
  17. package/src/sap/fe/core/ReuseComponent.js +27 -13
  18. package/src/sap/fe/core/ReuseComponent.ts +18 -0
  19. package/src/sap/fe/core/TemplateComponent.js +102 -89
  20. package/src/sap/fe/core/TemplateComponent.ts +20 -1
  21. package/src/sap/fe/core/TemplateModel.js +6 -7
  22. package/src/sap/fe/core/UIProvider.js +1 -1
  23. package/src/sap/fe/core/UIProvider.ts +2 -9
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
  27. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
  28. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
  29. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
  35. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
  36. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
  37. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
  38. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
  40. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
  41. package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
  44. package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
  54. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
  55. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
  57. package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
  59. package/src/sap/fe/core/controllerextensions/Share.js +19 -28
  60. package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
  61. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
  62. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
  63. package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
  64. package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
  65. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
  67. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
  69. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
  70. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
  71. package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
  72. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
  75. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
  76. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
  78. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
  82. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
  90. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
  91. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
  92. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
  93. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
  94. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
  95. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
  97. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
  98. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  99. package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
  102. package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
  103. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
  104. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
  105. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
  106. package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
  107. package/src/sap/fe/core/converters/ConverterContext.js +17 -18
  108. package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
  109. package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
  112. package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
  113. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
  114. package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
  115. package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
  116. package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
  117. package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
  118. package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
  119. package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
  120. package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
  121. package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
  122. package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
  123. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
  124. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
  125. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
  126. package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
  127. package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
  128. package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
  129. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
  130. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
  131. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
  132. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
  134. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
  140. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
  141. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
  142. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
  143. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
  144. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
  147. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
  149. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
  151. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
  153. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
  154. package/src/sap/fe/core/definition/FEDefinition.js +104 -44
  155. package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
  156. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
  157. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
  158. package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
  161. package/src/sap/fe/core/fpm/Component.js +12 -14
  162. package/src/sap/fe/core/fpm/manifest.json +1 -1
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
  165. package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
  166. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  167. package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
  168. package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
  169. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
  170. package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
  171. package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
  172. package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
  173. package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
  174. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
  175. package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
  176. package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
  177. package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
  178. package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
  179. package/src/sap/fe/core/helpers/MetaPath.js +9 -7
  180. package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
  181. package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
  182. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  183. package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
  184. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  185. package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
  186. package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
  187. package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
  188. package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
  189. package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
  190. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
  191. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  192. package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
  193. package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
  194. package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
  195. package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
  196. package/src/sap/fe/core/helpers/WebSocket.js +4 -4
  197. package/src/sap/fe/core/library.js +8 -7
  198. package/src/sap/fe/core/library.ts +2 -0
  199. package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
  200. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
  201. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
  202. package/src/sap/fe/core/messagebundle.properties +21 -0
  203. package/src/sap/fe/core/messagebundle_ar.properties +5 -1
  204. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  205. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  206. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  207. package/src/sap/fe/core/messagebundle_cs.properties +8 -4
  208. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  209. package/src/sap/fe/core/messagebundle_da.properties +4 -0
  210. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  211. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  212. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  213. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  214. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  215. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
  216. package/src/sap/fe/core/messagebundle_es.properties +5 -1
  217. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  218. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  219. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  220. package/src/sap/fe/core/messagebundle_fr.properties +6 -2
  221. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  222. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  223. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  224. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  225. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  226. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  227. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  228. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  229. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  230. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  231. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  232. package/src/sap/fe/core/messagebundle_lv.properties +4 -0
  233. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  234. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  235. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  236. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  237. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  238. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  239. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  240. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  241. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  242. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  243. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  244. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  245. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  246. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  247. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  248. package/src/sap/fe/core/messagebundle_tr.properties +5 -1
  249. package/src/sap/fe/core/messagebundle_uk.properties +4 -0
  250. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  251. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  252. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  253. package/src/sap/fe/core/operationsHelper.js +23 -27
  254. package/src/sap/fe/core/operationsHelper.ts +6 -7
  255. package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
  256. package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
  257. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
  258. package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
  259. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
  260. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  261. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
  262. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
  263. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
  264. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
  265. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
  266. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
  269. package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
  270. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
  271. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
  278. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
  281. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
  282. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
  283. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
  284. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
  285. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
  286. package/src/sap/fe/core/support/CommonHelper.js +2 -3
  287. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  288. package/src/sap/fe/core/templating/ActionHelper.js +3 -4
  289. package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
  290. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  291. package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
  292. package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
  293. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
  294. package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
  296. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  297. package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
  298. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  299. package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
  300. package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
  301. package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
  302. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
  303. package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
  304. package/src/sap/fe/core/templating/UIFormatters.js +57 -78
  305. package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
  306. package/src/sap/fe/core/type/Date.js +2 -2
  307. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  308. package/src/sap/fe/core/type/EDM.js +3 -5
  309. package/src/sap/fe/core/type/Email.js +17 -6
  310. package/src/sap/fe/core/type/Email.ts +23 -4
  311. package/src/sap/fe/core/type/FiscalDate.js +8 -9
  312. package/src/sap/fe/core/type/InputMask.js +3 -4
  313. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
  314. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
  315. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
  316. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
  317. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
@@ -38,67 +38,58 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
38
38
  "UI.ChartType/Scatter": "scatter"
39
39
  };
40
40
  function convertKPIChart(chartAnnotation, presentationVariantAnnotation, converterContext) {
41
- var _presentationVariantA, _presentationVariantA2, _chartAnnotation$Titl;
42
41
  if (chartAnnotation.Measures === undefined) {
43
42
  // We need at least 1 measure (but no dimension is allowed, e.g. for bubble chart)
44
43
  return undefined;
45
44
  }
46
45
  const charDimensions = chartAnnotation.Dimensions ? chartAnnotation.Dimensions.map(propertyPath => {
47
- var _chartAnnotation$Dime, _propertyPath$$target, _propertyPath$$target2, _propertyPath$$target3, _dimAttribute$Role, _dimensionProperty$an;
48
- const dimAttribute = (_chartAnnotation$Dime = chartAnnotation.DimensionAttributes) === null || _chartAnnotation$Dime === void 0 ? void 0 : _chartAnnotation$Dime.find(attribute => {
49
- var _attribute$Dimension;
50
- return ((_attribute$Dimension = attribute.Dimension) === null || _attribute$Dimension === void 0 ? void 0 : _attribute$Dimension.value) === propertyPath.value;
46
+ const dimAttribute = chartAnnotation.DimensionAttributes?.find(attribute => {
47
+ return attribute.Dimension?.value === propertyPath.value;
51
48
  });
52
49
  const dimensionDefinition = {
53
50
  name: propertyPath.value,
54
- label: ((_propertyPath$$target = propertyPath.$target) === null || _propertyPath$$target === void 0 ? void 0 : (_propertyPath$$target2 = _propertyPath$$target.annotations.Common) === null || _propertyPath$$target2 === void 0 ? void 0 : (_propertyPath$$target3 = _propertyPath$$target2.Label) === null || _propertyPath$$target3 === void 0 ? void 0 : _propertyPath$$target3.toString()) || propertyPath.value,
55
- role: dimAttribute === null || dimAttribute === void 0 ? void 0 : (_dimAttribute$Role = dimAttribute.Role) === null || _dimAttribute$Role === void 0 ? void 0 : _dimAttribute$Role.replace("UI.ChartDimensionRoleType/", "")
51
+ label: propertyPath.$target?.annotations.Common?.Label?.toString() || propertyPath.value,
52
+ role: dimAttribute?.Role?.replace("UI.ChartDimensionRoleType/", "")
56
53
  };
57
54
  const dimensionProperty = enhanceDataModelPath(converterContext.getDataModelObjectPath(), propertyPath.value).targetObject;
58
- if (dimensionProperty !== null && dimensionProperty !== void 0 && (_dimensionProperty$an = dimensionProperty.annotations.Common) !== null && _dimensionProperty$an !== void 0 && _dimensionProperty$an.Text) {
59
- var _dimensionProperty$an2, _dimensionProperty$an3, _dimensionProperty$an4;
55
+ if (dimensionProperty?.annotations.Common?.Text) {
60
56
  dimensionDefinition.text = getAssociatedTextPropertyPath(dimensionProperty);
61
- dimensionDefinition.textArrangement = ((_dimensionProperty$an2 = dimensionProperty.annotations.Common.Text.annotations) === null || _dimensionProperty$an2 === void 0 ? void 0 : (_dimensionProperty$an3 = _dimensionProperty$an2.UI) === null || _dimensionProperty$an3 === void 0 ? void 0 : (_dimensionProperty$an4 = _dimensionProperty$an3.TextArrangement) === null || _dimensionProperty$an4 === void 0 ? void 0 : _dimensionProperty$an4.toString().replace("UI.TextArrangementType/", "")) ?? "TextFirst";
57
+ dimensionDefinition.textArrangement = dimensionProperty.annotations.Common.Text.annotations?.UI?.TextArrangement?.toString().replace("UI.TextArrangementType/", "") ?? "TextFirst";
62
58
  }
63
59
  return dimensionDefinition;
64
60
  }) : [];
65
61
  const chartMeasures = chartAnnotation.Measures.map(propertyPath => {
66
- var _chartAnnotation$Meas, _propertyPath$$target4, _propertyPath$$target5, _propertyPath$$target6, _measureAttribute$Rol;
67
- const measureAttribute = (_chartAnnotation$Meas = chartAnnotation.MeasureAttributes) === null || _chartAnnotation$Meas === void 0 ? void 0 : _chartAnnotation$Meas.find(attribute => {
68
- var _attribute$Measure;
69
- return ((_attribute$Measure = attribute.Measure) === null || _attribute$Measure === void 0 ? void 0 : _attribute$Measure.value) === propertyPath.value;
62
+ const measureAttribute = chartAnnotation.MeasureAttributes?.find(attribute => {
63
+ return attribute.Measure?.value === propertyPath.value;
70
64
  });
71
65
  return {
72
66
  name: propertyPath.value,
73
- label: ((_propertyPath$$target4 = propertyPath.$target) === null || _propertyPath$$target4 === void 0 ? void 0 : (_propertyPath$$target5 = _propertyPath$$target4.annotations.Common) === null || _propertyPath$$target5 === void 0 ? void 0 : (_propertyPath$$target6 = _propertyPath$$target5.Label) === null || _propertyPath$$target6 === void 0 ? void 0 : _propertyPath$$target6.toString()) || propertyPath.value,
74
- role: measureAttribute === null || measureAttribute === void 0 ? void 0 : (_measureAttribute$Rol = measureAttribute.Role) === null || _measureAttribute$Rol === void 0 ? void 0 : _measureAttribute$Rol.replace("UI.ChartMeasureRoleType/", "")
67
+ label: propertyPath.$target?.annotations.Common?.Label?.toString() || propertyPath.value,
68
+ role: measureAttribute?.Role?.replace("UI.ChartMeasureRoleType/", "")
75
69
  };
76
70
  });
77
71
  const chartDefinition = {
78
72
  chartType: KPIChartTypeFromUI[chartAnnotation.ChartType] || "Line",
79
73
  dimensions: charDimensions,
80
74
  measures: chartMeasures,
81
- sortOrder: presentationVariantAnnotation === null || presentationVariantAnnotation === void 0 ? void 0 : (_presentationVariantA = presentationVariantAnnotation.SortOrder) === null || _presentationVariantA === void 0 ? void 0 : _presentationVariantA.map(sortOrder => {
82
- var _sortOrder$Property;
75
+ sortOrder: presentationVariantAnnotation?.SortOrder?.map(sortOrder => {
83
76
  return {
84
- name: ((_sortOrder$Property = sortOrder.Property) === null || _sortOrder$Property === void 0 ? void 0 : _sortOrder$Property.value) || "",
77
+ name: sortOrder.Property?.value || "",
85
78
  descending: !!sortOrder.Descending
86
79
  };
87
80
  }),
88
- maxItems: presentationVariantAnnotation === null || presentationVariantAnnotation === void 0 ? void 0 : (_presentationVariantA2 = presentationVariantAnnotation.MaxItems) === null || _presentationVariantA2 === void 0 ? void 0 : _presentationVariantA2.valueOf()
81
+ maxItems: presentationVariantAnnotation?.MaxItems?.valueOf()
89
82
  };
90
- const chartTitle = (_chartAnnotation$Titl = chartAnnotation.Title) === null || _chartAnnotation$Titl === void 0 ? void 0 : _chartAnnotation$Titl.valueOf();
83
+ const chartTitle = chartAnnotation.Title?.valueOf();
91
84
  if (chartTitle !== undefined) {
92
85
  chartDefinition.title = chartTitle;
93
86
  }
94
87
  return chartDefinition;
95
88
  }
96
89
  function updateCurrency(datapointAnnotation, kpiDef) {
97
- var _targetValueProperty$, _targetValueProperty$3;
98
90
  const targetValueProperty = datapointAnnotation.Value.$target;
99
- if ((_targetValueProperty$ = targetValueProperty.annotations.Measures) !== null && _targetValueProperty$ !== void 0 && _targetValueProperty$.ISOCurrency) {
100
- var _targetValueProperty$2;
101
- const currency = (_targetValueProperty$2 = targetValueProperty.annotations.Measures) === null || _targetValueProperty$2 === void 0 ? void 0 : _targetValueProperty$2.ISOCurrency;
91
+ if (targetValueProperty.annotations.Measures?.ISOCurrency) {
92
+ const currency = targetValueProperty.annotations.Measures?.ISOCurrency;
102
93
  if (isPathAnnotationExpression(currency)) {
103
94
  kpiDef.datapoint.unit = {
104
95
  value: currency.$target.name,
@@ -112,9 +103,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
112
103
  isPath: false
113
104
  };
114
105
  }
115
- } else if ((_targetValueProperty$3 = targetValueProperty.annotations.Measures) !== null && _targetValueProperty$3 !== void 0 && _targetValueProperty$3.Unit) {
116
- var _targetValueProperty$4;
117
- const unit = (_targetValueProperty$4 = targetValueProperty.annotations.Measures) === null || _targetValueProperty$4 === void 0 ? void 0 : _targetValueProperty$4.Unit;
106
+ } else if (targetValueProperty.annotations.Measures?.Unit) {
107
+ const unit = targetValueProperty.annotations.Measures?.Unit;
118
108
  if (isPathAnnotationExpression(unit)) {
119
109
  kpiDef.datapoint.unit = {
120
110
  value: unit.$target.name,
@@ -245,9 +235,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
245
235
 
246
236
  // Look for the unavailable actions (if any)
247
237
  const annotationKey = Object.keys(annotations).find(key => {
248
- var _semanticObjectAnnota;
249
238
  const annotation = annotations[key];
250
- return isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions") && annotation.qualifier === ((_semanticObjectAnnota = semanticObjectAnnotation) === null || _semanticObjectAnnota === void 0 ? void 0 : _semanticObjectAnnota.qualifier);
239
+ return isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions") && annotation.qualifier === semanticObjectAnnotation?.qualifier;
251
240
  });
252
241
  if (annotationKey) {
253
242
  result.unavailableActions = annotations[annotationKey];
@@ -261,7 +250,6 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
261
250
  return !!kpiConfig.template;
262
251
  }
263
252
  function createAnalyticalKPIDefinition(converterContext, kpiConfig, kpiName) {
264
- var _datapointAnnotation$, _datapointAnnotation$2, _datapointAnnotation$3;
265
253
  let contextPath = "";
266
254
  if (kpiConfig.contextPath) {
267
255
  contextPath = kpiConfig.contextPath;
@@ -287,18 +275,16 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
287
275
  return kpi.qualifier === kpiConfig.qualifier;
288
276
  });
289
277
  if (targetKPI) {
290
- var _targetKPI$Detail, _presentationVariantA3, _presentationVariantA4, _presentationVariantA5, _targetKPI$Detail2;
291
278
  datapointAnnotation = targetKPI.DataPoint;
292
279
  selectionVariantAnnotation = targetKPI.SelectionVariant;
293
- presentationVariantAnnotation = (_targetKPI$Detail = targetKPI.Detail) === null || _targetKPI$Detail === void 0 ? void 0 : _targetKPI$Detail.DefaultPresentationVariant;
294
- chartAnnotation = (_presentationVariantA3 = presentationVariantAnnotation) === null || _presentationVariantA3 === void 0 ? void 0 : (_presentationVariantA4 = _presentationVariantA3.Visualizations) === null || _presentationVariantA4 === void 0 ? void 0 : (_presentationVariantA5 = _presentationVariantA4.find(viz => {
280
+ presentationVariantAnnotation = targetKPI.Detail?.DefaultPresentationVariant;
281
+ chartAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
295
282
  return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.ChartDefinitionType");
296
- })) === null || _presentationVariantA5 === void 0 ? void 0 : _presentationVariantA5.$target;
297
- if ((_targetKPI$Detail2 = targetKPI.Detail) !== null && _targetKPI$Detail2 !== void 0 && _targetKPI$Detail2.SemanticObject) {
298
- var _targetKPI$Detail$Act;
283
+ })?.$target;
284
+ if (targetKPI.Detail?.SemanticObject) {
299
285
  navigationInfo = {
300
286
  semanticObject: targetKPI.Detail.SemanticObject.toString(),
301
- action: (_targetKPI$Detail$Act = targetKPI.Detail.Action) === null || _targetKPI$Detail$Act === void 0 ? void 0 : _targetKPI$Detail$Act.toString(),
287
+ action: targetKPI.Detail.Action?.toString(),
302
288
  unavailableActions: []
303
289
  };
304
290
  }
@@ -309,15 +295,14 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
309
295
  return spv.qualifier === kpiConfig.qualifier;
310
296
  });
311
297
  if (targetSPV) {
312
- var _presentationVariantA6, _presentationVariantA7, _presentationVariantA8, _presentationVariantA9, _presentationVariantA10, _presentationVariantA11;
313
298
  selectionVariantAnnotation = targetSPV.SelectionVariant;
314
299
  presentationVariantAnnotation = targetSPV.PresentationVariant;
315
- datapointAnnotation = (_presentationVariantA6 = presentationVariantAnnotation) === null || _presentationVariantA6 === void 0 ? void 0 : (_presentationVariantA7 = _presentationVariantA6.Visualizations) === null || _presentationVariantA7 === void 0 ? void 0 : (_presentationVariantA8 = _presentationVariantA7.find(viz => {
300
+ datapointAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
316
301
  return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.DataPointType");
317
- })) === null || _presentationVariantA8 === void 0 ? void 0 : _presentationVariantA8.$target;
318
- chartAnnotation = (_presentationVariantA9 = presentationVariantAnnotation) === null || _presentationVariantA9 === void 0 ? void 0 : (_presentationVariantA10 = _presentationVariantA9.Visualizations) === null || _presentationVariantA10 === void 0 ? void 0 : (_presentationVariantA11 = _presentationVariantA10.find(viz => {
302
+ })?.$target;
303
+ chartAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
319
304
  return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.ChartDefinitionType");
320
- })) === null || _presentationVariantA11 === void 0 ? void 0 : _presentationVariantA11.$target;
305
+ })?.$target;
321
306
  } else {
322
307
  // Couldn't find a KPI or a SPV annotation with the qualifier from the manifest
323
308
  converterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.Medium, IssueType.KPI_ISSUES.KPI_NOT_FOUND + kpiConfig.qualifier);
@@ -348,13 +333,13 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
348
333
  datapoint: {
349
334
  propertyPath: datapointAnnotation.Value.path,
350
335
  annotationPath: kpiConverterContext.getEntitySetBasedAnnotationPath(datapointAnnotation.fullyQualifiedName),
351
- title: (_datapointAnnotation$ = datapointAnnotation.Title) === null || _datapointAnnotation$ === void 0 ? void 0 : _datapointAnnotation$.toString(),
352
- description: (_datapointAnnotation$2 = datapointAnnotation.Description) === null || _datapointAnnotation$2 === void 0 ? void 0 : _datapointAnnotation$2.toString()
336
+ title: datapointAnnotation.Title?.toString(),
337
+ description: datapointAnnotation.Description?.toString()
353
338
  },
354
339
  selectionVariantFilterDefinitions: selectionVariantAnnotation ? getFilterDefinitionsFromSelectionVariant(selectionVariantAnnotation) : undefined,
355
340
  chart: chartDef
356
341
  };
357
- if (((_datapointAnnotation$3 = datapointAnnotation.ValueFormat) === null || _datapointAnnotation$3 === void 0 ? void 0 : _datapointAnnotation$3.NumberOfFractionalDigits) !== undefined) {
342
+ if (datapointAnnotation.ValueFormat?.NumberOfFractionalDigits !== undefined) {
358
343
  kpiDef.datapoint.numberOfFractionalDigits = datapointAnnotation.ValueFormat.NumberOfFractionalDigits.valueOf();
359
344
  }
360
345
 
@@ -410,4 +395,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
410
395
  _exports.getKPIDefinitions = getKPIDefinitions;
411
396
  return _exports;
412
397
  }, false);
413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMiIsIl9jaGFydEFubm90YXRpb24kVGl0bCIsIk1lYXN1cmVzIiwidW5kZWZpbmVkIiwiY2hhckRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwibWFwIiwicHJvcGVydHlQYXRoIiwiX2NoYXJ0QW5ub3RhdGlvbiREaW1lIiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0MiIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDMiLCJfZGltQXR0cmlidXRlJFJvbGUiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4iLCJkaW1BdHRyaWJ1dGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiZmluZCIsImF0dHJpYnV0ZSIsIl9hdHRyaWJ1dGUkRGltZW5zaW9uIiwiRGltZW5zaW9uIiwidmFsdWUiLCJkaW1lbnNpb25EZWZpbml0aW9uIiwibmFtZSIsImxhYmVsIiwiJHRhcmdldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsInJvbGUiLCJSb2xlIiwicmVwbGFjZSIsImRpbWVuc2lvblByb3BlcnR5IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiVGV4dCIsIl9kaW1lbnNpb25Qcm9wZXJ0eSRhbjIiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4zIiwiX2RpbWVuc2lvblByb3BlcnR5JGFuNCIsInRleHQiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwiY2hhcnRNZWFzdXJlcyIsIl9jaGFydEFubm90YXRpb24kTWVhcyIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDQiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQ1IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0NiIsIl9tZWFzdXJlQXR0cmlidXRlJFJvbCIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJNZWFzdXJlQXR0cmlidXRlcyIsIl9hdHRyaWJ1dGUkTWVhc3VyZSIsIk1lYXN1cmUiLCJjaGFydERlZmluaXRpb24iLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJfc29ydE9yZGVyJFByb3BlcnR5IiwiUHJvcGVydHkiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsIm1heEl0ZW1zIiwiTWF4SXRlbXMiLCJ2YWx1ZU9mIiwiY2hhcnRUaXRsZSIsIlRpdGxlIiwidGl0bGUiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQzIiwidGFyZ2V0VmFsdWVQcm9wZXJ0eSIsIlZhbHVlIiwiSVNPQ3VycmVuY3kiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQyIiwiY3VycmVuY3kiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsIl90YXJnZXRWYWx1ZVByb3BlcnR5JDQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsIl9zZW1hbnRpY09iamVjdEFubm90YSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwiX2RhdGFwb2ludEFubm90YXRpb24kIiwiX2RhdGFwb2ludEFubm90YXRpb24kMiIsIl9kYXRhcG9pbnRBbm5vdGF0aW9uJDMiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIl90YXJnZXRLUEkkRGV0YWlsIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMyIsIl9wcmVzZW50YXRpb25WYXJpYW50QTQiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE1IiwiX3RhcmdldEtQSSREZXRhaWwyIiwiRGF0YVBvaW50IiwiU2VsZWN0aW9uVmFyaWFudCIsIkRldGFpbCIsIkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiVmlzdWFsaXphdGlvbnMiLCJ2aXoiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZW1hbnRpY09iamVjdCIsIl90YXJnZXRLUEkkRGV0YWlsJEFjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIl9wcmVzZW50YXRpb25WYXJpYW50QTYiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE3IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBOCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTkiLCJfcHJlc2VudGF0aW9uVmFyaWFudEExMCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTExIiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiY2hhcnQiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImRldGFpbE5hdmlnYXRpb24iLCJvdXRib3VuZE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlS1BJRGVmaW5pdGlvbiIsImdldEtQSURlZmluaXRpb25zIiwia3BpQ29uZmlncyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrcGlEZWZzIiwib0RlZiIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGUsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0S1BJLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbnR5cGUgRGltZW5zaW9uRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiBcIlRleHRGaXJzdFwiIHwgXCJUZXh0TGFzdFwiIHwgXCJUZXh0T25seVwiIHwgXCJUZXh0U2VwYXJhdGVcIjtcblx0bGFiZWw6IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkaW1lbnNpb25zOiBEaW1lbnNpb25EZWZpbml0aW9uW107XG5cdG1lYXN1cmVzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W107XG5cdHNvcnRPcmRlcj86IHsgbmFtZTogc3RyaW5nOyBkZXNjZW5kaW5nOiBib29sZWFuIH1bXTtcblx0bWF4SXRlbXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogXCJBbmFseXRpY2FsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGRhdGFwb2ludDoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUtQSURlZmluaXRpb24gPSB7XG5cdHR5cGU6IFwiQ3VzdG9tXCI7XG5cdGtleTogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IEN1c3RvbUtQSURlZmluaXRpb247XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGRpbWVuc2lvbkRlZmluaXRpb246IERpbWVuc2lvbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBkaW1lbnNpb25Qcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgudmFsdWVcblx0XHRcdFx0KS50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChkaW1lbnNpb25Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0KSB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uRGVmaW5pdGlvbi50ZXh0ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGltZW5zaW9uUHJvcGVydHkpO1xuXHRcdFx0XHRcdGRpbWVuc2lvbkRlZmluaXRpb24udGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdFx0XHRcdChkaW1lbnNpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24uVGV4dC5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvXCIsXG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdCkgPz8gXCJUZXh0Rmlyc3RcIikgYXMgXCJUZXh0Rmlyc3RcIiB8IFwiVGV4dExhc3RcIiB8IFwiVGV4dE9ubHlcIiB8IFwiVGV4dFNlcGFyYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uRGVmaW5pdGlvbjtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0Y29uc3QgY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24gPSB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoKHNvcnRPcmRlcikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogc29ydE9yZGVyLlByb3BlcnR5Py52YWx1ZSB8fCBcIlwiLCBkZXNjZW5kaW5nOiAhIXNvcnRPcmRlci5EZXNjZW5kaW5nIH07XG5cdFx0fSksXG5cdFx0bWF4SXRlbXM6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcz8udmFsdWVPZigpIGFzIG51bWJlclxuXHR9O1xuXG5cdGNvbnN0IGNoYXJ0VGl0bGUgPSBjaGFydEFubm90YXRpb24uVGl0bGU/LnZhbHVlT2YoKTtcblx0aWYgKGNoYXJ0VGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0RGVmaW5pdGlvbi50aXRsZSA9IGNoYXJ0VGl0bGU7XG5cdH1cblxuXHRyZXR1cm4gY2hhcnREZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGN1cnJlbmN5KSkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogKGN1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KFxuXHRkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb25cbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LiR0YXJnZXQ7XG5cdFx0XHRpZiAoY3JpdGljYWxpdHlQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdC8vIFdlIGlnbm9yZSBhbGwgdGhlIG90aGVyIHR5cGUgb2YgZHluYW1pYyBleHByZXNzaW9ucyBmb3Igbm93XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBDcml0aWNhbGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyA9IFtdO1xuXHRcdHN3aXRjaCAoa3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHRyZW5kUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLiR0YXJnZXQ7XG5cdFx0XHRpZiAodHJlbmRQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZC5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlVwRGlmZmVyZW5jZS52YWx1ZU9mKCksXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSB7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlIChvdGhlcndpc2UgaWdub3JlKVxuXHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0YXJnZXRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cdC8vIExvb2sgZm9yIHRoZSBzZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uIChpZiBhbnkpXG5cdGxldCBzZW1hbnRpY09iamVjdEFubm90YXRpb246IFNlbWFudGljT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRpZiAoIWFubm90YXRpb24ucXVhbGlmaWVyIHx8ICFzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHRha2UgdGhlIGFubm90YXRpb24gd2l0aG91dCBxdWFsaWZpZXIgaWYgdGhlcmUncyBvbmUsIG90aGVyd2lzZSB3ZSB0YWtlIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RBbm5vdGF0aW9uID0gYW5ub3RhdGlvbiBhcyBTZW1hbnRpY09iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRjb25zdCByZXN1bHQ6IE5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbi50b1N0cmluZygpLFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdW5hdmFpbGFibGUgYWN0aW9ucyAoaWYgYW55KVxuXHRcdGNvbnN0IGFubm90YXRpb25LZXkgPSBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlRlcm0oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSAmJlxuXHRcdFx0XHRhbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uPy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGFubm90YXRpb25LZXkpIHtcblx0XHRcdHJlc3VsdC51bmF2YWlsYWJsZUFjdGlvbnMgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc10gYXMgc3RyaW5nW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbihrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24pOiBrcGlDb25maWcgaXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiB7XG5cdHJldHVybiAhIShrcGlDb25maWcgYXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbikudGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuYWx5dGljYWxLUElEZWZpbml0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGtwaUNvbmZpZzogQW5hbHl0aWNhbEtQSUNvbmZpZ3VyYXRpb24sXG5cdGtwaU5hbWU6IHN0cmluZ1xuKTogQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgY29udGV4dFBhdGggPSBcIlwiO1xuXHRpZiAoa3BpQ29uZmlnLmNvbnRleHRQYXRoKSB7XG5cdFx0Y29udGV4dFBhdGggPSBrcGlDb25maWcuY29udGV4dFBhdGg7XG5cdH0gZWxzZSBpZiAoa3BpQ29uZmlnLmVudGl0eVNldCkge1xuXHRcdGNvbnRleHRQYXRoID0gYC8ke2twaUNvbmZpZy5lbnRpdHlTZXR9YDtcblx0fVxuXHRjb25zdCBrcGlDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oY29udGV4dFBhdGgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwga3BpQ29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0Ly8gVGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5OT19BTkFMWVRJQ1MgKyBjb250ZXh0UGF0aCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEtQSVtdO1xuXHRjb25zdCB0YXJnZXRLUEkgPSBhS1BJQW5ub3RhdGlvbnMuZmluZCgoa3BpKSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0fSk/LiR0YXJnZXQgYXMgQ2hhcnQ7XG5cblx0XHRpZiAodGFyZ2V0S1BJLkRldGFpbD8uU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogdGFyZ2V0S1BJLkRldGFpbC5TZW1hbnRpY09iamVjdC50b1N0cmluZygpLFxuXHRcdFx0XHRhY3Rpb246IHRhcmdldEtQSS5EZXRhaWwuQWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgYSBTUFYgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJcblx0XHRjb25zdCBhU1BWQW5ub3RhdGlvbnMgPSBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJVSVwiLFxuXHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdCkgYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFtdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRpZDogXCJrcGlUYWctXCIgKyBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRjb250ZXh0UGF0aCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZUZvcm1hdD8uTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLnZhbHVlT2YoKTtcblx0fVxuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYp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
398
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiTWVhc3VyZXMiLCJ1bmRlZmluZWQiLCJjaGFyRGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJtYXAiLCJwcm9wZXJ0eVBhdGgiLCJkaW1BdHRyaWJ1dGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiZmluZCIsImF0dHJpYnV0ZSIsIkRpbWVuc2lvbiIsInZhbHVlIiwiZGltZW5zaW9uRGVmaW5pdGlvbiIsIm5hbWUiLCJsYWJlbCIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJyb2xlIiwiUm9sZSIsInJlcGxhY2UiLCJkaW1lbnNpb25Qcm9wZXJ0eSIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIlRleHQiLCJ0ZXh0IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImNoYXJ0TWVhc3VyZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJNZWFzdXJlIiwiY2hhcnREZWZpbml0aW9uIiwiY2hhcnRUeXBlIiwiQ2hhcnRUeXBlIiwiZGltZW5zaW9ucyIsIm1lYXN1cmVzIiwic29ydE9yZGVyIiwiU29ydE9yZGVyIiwiUHJvcGVydHkiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsIm1heEl0ZW1zIiwiTWF4SXRlbXMiLCJ2YWx1ZU9mIiwiY2hhcnRUaXRsZSIsIlRpdGxlIiwidGl0bGUiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJ0YXJnZXRWYWx1ZVByb3BlcnR5IiwiVmFsdWUiLCJJU09DdXJyZW5jeSIsImN1cnJlbmN5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJkYXRhcG9pbnQiLCJ1bml0IiwiaXNDdXJyZW5jeSIsImlzUGF0aCIsIlVuaXQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJrcGlDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlVHlwZSIsIktQSV9JU1NVRVMiLCJOT19BTkFMWVRJQ1MiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsIm5hdmlnYXRpb25JbmZvIiwiYUtQSUFubm90YXRpb25zIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ0YXJnZXRLUEkiLCJrcGkiLCJEYXRhUG9pbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiRGV0YWlsIiwiRGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQiLCJWaXN1YWxpemF0aW9ucyIsInZpeiIsImlzQW5ub3RhdGlvbk9mVHlwZSIsIlNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiQWN0aW9uIiwiYVNQVkFubm90YXRpb25zIiwidGFyZ2V0U1BWIiwic3B2IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiY2hhcnQiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImRldGFpbE5hdmlnYXRpb24iLCJvdXRib3VuZE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlS1BJRGVmaW5pdGlvbiIsImdldEtQSURlZmluaXRpb25zIiwia3BpQ29uZmlncyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrcGlEZWZzIiwib0RlZiIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGUsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0S1BJLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbnR5cGUgRGltZW5zaW9uRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiBcIlRleHRGaXJzdFwiIHwgXCJUZXh0TGFzdFwiIHwgXCJUZXh0T25seVwiIHwgXCJUZXh0U2VwYXJhdGVcIjtcblx0bGFiZWw6IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkaW1lbnNpb25zOiBEaW1lbnNpb25EZWZpbml0aW9uW107XG5cdG1lYXN1cmVzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W107XG5cdHNvcnRPcmRlcj86IHsgbmFtZTogc3RyaW5nOyBkZXNjZW5kaW5nOiBib29sZWFuIH1bXTtcblx0bWF4SXRlbXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogXCJBbmFseXRpY2FsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGRhdGFwb2ludDoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUtQSURlZmluaXRpb24gPSB7XG5cdHR5cGU6IFwiQ3VzdG9tXCI7XG5cdGtleTogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IEN1c3RvbUtQSURlZmluaXRpb247XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGRpbWVuc2lvbkRlZmluaXRpb246IERpbWVuc2lvbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBkaW1lbnNpb25Qcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgudmFsdWVcblx0XHRcdFx0KS50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChkaW1lbnNpb25Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0KSB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uRGVmaW5pdGlvbi50ZXh0ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGltZW5zaW9uUHJvcGVydHkpO1xuXHRcdFx0XHRcdGRpbWVuc2lvbkRlZmluaXRpb24udGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdFx0XHRcdChkaW1lbnNpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24uVGV4dC5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvXCIsXG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdCkgPz8gXCJUZXh0Rmlyc3RcIikgYXMgXCJUZXh0Rmlyc3RcIiB8IFwiVGV4dExhc3RcIiB8IFwiVGV4dE9ubHlcIiB8IFwiVGV4dFNlcGFyYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uRGVmaW5pdGlvbjtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0Y29uc3QgY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24gPSB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoKHNvcnRPcmRlcikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogc29ydE9yZGVyLlByb3BlcnR5Py52YWx1ZSB8fCBcIlwiLCBkZXNjZW5kaW5nOiAhIXNvcnRPcmRlci5EZXNjZW5kaW5nIH07XG5cdFx0fSksXG5cdFx0bWF4SXRlbXM6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcz8udmFsdWVPZigpIGFzIG51bWJlclxuXHR9O1xuXG5cdGNvbnN0IGNoYXJ0VGl0bGUgPSBjaGFydEFubm90YXRpb24uVGl0bGU/LnZhbHVlT2YoKTtcblx0aWYgKGNoYXJ0VGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0RGVmaW5pdGlvbi50aXRsZSA9IGNoYXJ0VGl0bGU7XG5cdH1cblxuXHRyZXR1cm4gY2hhcnREZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGN1cnJlbmN5KSkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogKGN1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KFxuXHRkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb25cbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LiR0YXJnZXQ7XG5cdFx0XHRpZiAoY3JpdGljYWxpdHlQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdC8vIFdlIGlnbm9yZSBhbGwgdGhlIG90aGVyIHR5cGUgb2YgZHluYW1pYyBleHByZXNzaW9ucyBmb3Igbm93XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBDcml0aWNhbGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyA9IFtdO1xuXHRcdHN3aXRjaCAoa3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHRyZW5kUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLiR0YXJnZXQ7XG5cdFx0XHRpZiAodHJlbmRQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZC5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlVwRGlmZmVyZW5jZS52YWx1ZU9mKCksXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSB7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlIChvdGhlcndpc2UgaWdub3JlKVxuXHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0YXJnZXRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cdC8vIExvb2sgZm9yIHRoZSBzZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uIChpZiBhbnkpXG5cdGxldCBzZW1hbnRpY09iamVjdEFubm90YXRpb246IFNlbWFudGljT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRpZiAoIWFubm90YXRpb24ucXVhbGlmaWVyIHx8ICFzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHRha2UgdGhlIGFubm90YXRpb24gd2l0aG91dCBxdWFsaWZpZXIgaWYgdGhlcmUncyBvbmUsIG90aGVyd2lzZSB3ZSB0YWtlIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RBbm5vdGF0aW9uID0gYW5ub3RhdGlvbiBhcyBTZW1hbnRpY09iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRjb25zdCByZXN1bHQ6IE5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbi50b1N0cmluZygpLFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdW5hdmFpbGFibGUgYWN0aW9ucyAoaWYgYW55KVxuXHRcdGNvbnN0IGFubm90YXRpb25LZXkgPSBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlRlcm0oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSAmJlxuXHRcdFx0XHRhbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uPy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGFubm90YXRpb25LZXkpIHtcblx0XHRcdHJlc3VsdC51bmF2YWlsYWJsZUFjdGlvbnMgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc10gYXMgc3RyaW5nW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbihrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24pOiBrcGlDb25maWcgaXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiB7XG5cdHJldHVybiAhIShrcGlDb25maWcgYXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbikudGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuYWx5dGljYWxLUElEZWZpbml0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGtwaUNvbmZpZzogQW5hbHl0aWNhbEtQSUNvbmZpZ3VyYXRpb24sXG5cdGtwaU5hbWU6IHN0cmluZ1xuKTogQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgY29udGV4dFBhdGggPSBcIlwiO1xuXHRpZiAoa3BpQ29uZmlnLmNvbnRleHRQYXRoKSB7XG5cdFx0Y29udGV4dFBhdGggPSBrcGlDb25maWcuY29udGV4dFBhdGg7XG5cdH0gZWxzZSBpZiAoa3BpQ29uZmlnLmVudGl0eVNldCkge1xuXHRcdGNvbnRleHRQYXRoID0gYC8ke2twaUNvbmZpZy5lbnRpdHlTZXR9YDtcblx0fVxuXHRjb25zdCBrcGlDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oY29udGV4dFBhdGgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwga3BpQ29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0Ly8gVGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5OT19BTkFMWVRJQ1MgKyBjb250ZXh0UGF0aCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEtQSVtdO1xuXHRjb25zdCB0YXJnZXRLUEkgPSBhS1BJQW5ub3RhdGlvbnMuZmluZCgoa3BpKSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0fSk/LiR0YXJnZXQgYXMgQ2hhcnQ7XG5cblx0XHRpZiAodGFyZ2V0S1BJLkRldGFpbD8uU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogdGFyZ2V0S1BJLkRldGFpbC5TZW1hbnRpY09iamVjdC50b1N0cmluZygpLFxuXHRcdFx0XHRhY3Rpb246IHRhcmdldEtQSS5EZXRhaWwuQWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgYSBTUFYgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJcblx0XHRjb25zdCBhU1BWQW5ub3RhdGlvbnMgPSBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJVSVwiLFxuXHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdCkgYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFtdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRpZDogXCJrcGlUYWctXCIgKyBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRjb250ZXh0UGF0aCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZUZvcm1hdD8uTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLnZhbHVlT2YoKTtcblx0fVxuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGtwaURlZnM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7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