@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
@@ -489,7 +489,6 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
489
489
  * @since 1.93.0
490
490
  */
491
491
  let KPIManagementControllerExtension = (_dec = defineUI5Class("sap.fe.core.controllerextensions.KPIManagement"), _dec2 = methodOverride(), _dec3 = methodOverride(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
492
- _inheritsLoose(KPIManagementControllerExtension, _ControllerExtension);
493
492
  function KPIManagementControllerExtension() {
494
493
  return _ControllerExtension.call(this) || this;
495
494
  }
@@ -499,9 +498,9 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
499
498
  * @param kpiDefinition The KPI definition
500
499
  * @param oKPIModel The JSON model in which the manifest will be stored
501
500
  */
501
+ _inheritsLoose(KPIManagementControllerExtension, _ControllerExtension);
502
502
  var _proto = KPIManagementControllerExtension.prototype;
503
503
  _proto.initCardManifest = function initCardManifest(kpiDefinition, oKPIModel) {
504
- var _kpiDefinition$select;
505
504
  const oCardManifest = {
506
505
  "sap.app": {
507
506
  id: "sap.fe.KPICard",
@@ -558,7 +557,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
558
557
  }
559
558
 
560
559
  // Details of the card: filter descriptions
561
- if ((_kpiDefinition$select = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select !== void 0 && _kpiDefinition$select.length) {
560
+ if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
562
561
  const aDescriptions = [];
563
562
  kpiDefinition.selectionVariantFilterDefinitions.forEach(filterDefinition => {
564
563
  const desc = getFilterStringFromDefinition(filterDefinition);
@@ -609,8 +608,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
609
608
  }
610
609
  };
611
610
  _proto.onInit = function onInit() {
612
- var _getPageModel;
613
- this.aKPIDefinitions = (_getPageModel = this.getView().getController()._getPageModel()) === null || _getPageModel === void 0 ? void 0 : _getPageModel.getProperty("/kpiDefinitions");
611
+ this.aKPIDefinitions = this.getView().getController()._getPageModel()?.getProperty("/kpiDefinitions");
614
612
  if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
615
613
  const oView = this.getView();
616
614
  const oAppComponent = oView.getController().getAppComponent();
@@ -644,10 +642,9 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
644
642
  }
645
643
  };
646
644
  _proto.updateDatapointValueAndCurrency = function updateDatapointValueAndCurrency(kpiDefinition, kpiContext, oKPIModel) {
647
- var _kpiDefinition$datapo, _kpiDefinition$datapo2, _kpiDefinition$datapo3;
648
645
  const currentLocale = new Locale(Localization.getLanguage());
649
- const rawUnit = (_kpiDefinition$datapo = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo !== void 0 && _kpiDefinition$datapo.isPath ? kpiContext.getProperty(kpiDefinition.datapoint.unit.value) : (_kpiDefinition$datapo2 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo2 === void 0 ? void 0 : _kpiDefinition$datapo2.value;
650
- const isPercentage = ((_kpiDefinition$datapo3 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo3 === void 0 ? void 0 : _kpiDefinition$datapo3.isCurrency) === false && rawUnit === "%";
646
+ const rawUnit = kpiDefinition.datapoint.unit?.isPath ? kpiContext.getProperty(kpiDefinition.datapoint.unit.value) : kpiDefinition.datapoint.unit?.value;
647
+ const isPercentage = kpiDefinition.datapoint.unit?.isCurrency === false && rawUnit === "%";
651
648
 
652
649
  // /////////////////////
653
650
  // Main KPI value
@@ -801,7 +798,6 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
801
798
  * @returns The promise that is resolved when data is loaded.
802
799
  */;
803
800
  _proto.loadKPITagData = async function loadKPITagData(kpiDefinition, oMainModel, oKPIModel, loadFull) {
804
- var _kpiDefinition$datapo4, _kpiDefinition$select2;
805
801
  // If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
806
802
  // If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the "$auto.Workers" groupID
807
803
  const oListBinding = loadFull ? oMainModel.bindList(kpiDefinition.contextPath, undefined, undefined, undefined, {
@@ -812,7 +808,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
812
808
  const oAggregate = {};
813
809
 
814
810
  // Main value + currency/unit
815
- if ((_kpiDefinition$datapo4 = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo4 !== void 0 && _kpiDefinition$datapo4.isPath) {
811
+ if (kpiDefinition.datapoint.unit?.isPath) {
816
812
  oAggregate[kpiDefinition.datapoint.propertyPath] = {
817
813
  unit: kpiDefinition.datapoint.unit.value
818
814
  };
@@ -842,7 +838,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
842
838
  });
843
839
 
844
840
  // Manage SelectionVariant filters
845
- if ((_kpiDefinition$select2 = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select2 !== void 0 && _kpiDefinition$select2.length) {
841
+ if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
846
842
  const aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(filter => {
847
843
  return filter !== undefined;
848
844
  });
@@ -850,8 +846,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
850
846
  }
851
847
  return oListBinding.requestContexts(0, 1).then(aContexts => {
852
848
  if (aContexts.length) {
853
- var _kpiDefinition$datapo5, _kpiDefinition$datapo6;
854
- const rawUnit = (_kpiDefinition$datapo5 = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo5 !== void 0 && _kpiDefinition$datapo5.isPath ? aContexts[0].getProperty(kpiDefinition.datapoint.unit.value) : (_kpiDefinition$datapo6 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo6 === void 0 ? void 0 : _kpiDefinition$datapo6.value;
849
+ const rawUnit = kpiDefinition.datapoint.unit?.isPath ? aContexts[0].getProperty(kpiDefinition.datapoint.unit.value) : kpiDefinition.datapoint.unit?.value;
855
850
  if (kpiDefinition.datapoint.unit && !rawUnit) {
856
851
  // A unit/currency is defined, but its value is undefined --> multi-unit situation
857
852
  oKPIModel.setProperty(`/${kpiDefinition.id}/manifest/sap.card/data/json/mainValue`, "*");
@@ -886,7 +881,6 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
886
881
  * @returns The promise that is resolved when data is loaded.
887
882
  */;
888
883
  _proto.loadKPICardData = async function loadKPICardData(kpiDefinition, oMainModel, oKPIModel) {
889
- var _kpiDefinition$select3;
890
884
  const oListBinding = oMainModel.bindList(kpiDefinition.contextPath, undefined, undefined, undefined, {
891
885
  $$groupId: "$auto.Workers"
892
886
  });
@@ -908,7 +902,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
908
902
  });
909
903
 
910
904
  // Manage SelectionVariant filters
911
- if ((_kpiDefinition$select3 = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select3 !== void 0 && _kpiDefinition$select3.length) {
905
+ if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
912
906
  const aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(filter => {
913
907
  return filter !== undefined;
914
908
  });
@@ -1024,9 +1018,8 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
1024
1018
  const promises = [this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true), this.loadKPICardData(kpiDefinition, oModel, oKPIModel)];
1025
1019
  await Promise.all(promises);
1026
1020
  this.oCard.attachEventOnce("stateChanged", () => {
1027
- var _this$oCard$getFocusD;
1028
1021
  // Once the card has been rendered, set the focus properly and set the popover as non-modal
1029
- (_this$oCard$getFocusD = this.oCard.getFocusDomRef()) === null || _this$oCard$getFocusD === void 0 ? void 0 : _this$oCard$getFocusD.focus();
1022
+ this.oCard.getFocusDomRef()?.focus();
1030
1023
  popover.setModal(false);
1031
1024
  });
1032
1025
  this.oCard.setManifest(oKPIModel.getProperty(`/${kpiID}/manifest`));
@@ -1039,7 +1032,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
1039
1032
  }
1040
1033
  };
1041
1034
  return KPIManagementControllerExtension;
1042
- }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype)), _class2)) || _class);
1035
+ }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _class2)) || _class);
1043
1036
  return KPIManagementControllerExtension;
1044
1037
  }, false);
1045
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJ0aXRsZSIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsImNhbGwiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiX2dldFBhZ2VNb2RlbCIsImFLUElEZWZpbml0aW9ucyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbyIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbzIiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG8zIiwicmF3VW5pdCIsImlzUGF0aCIsImlzUGVyY2VudGFnZSIsImlzQ3VycmVuY3kiLCJyYXdWYWx1ZSIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJOdW1iZXJGb3JtYXQiLCJnZXRGbG9hdEluc3RhbmNlIiwibWluRnJhY3Rpb25EaWdpdHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInNob3dTY2FsZSIsImtwaVZhbHVlVW5zY2FsZWQiLCJncm91cGluZ0VuYWJsZWQiLCJrcGlWYWx1ZU5vU2NhbGUiLCJrcGlWYWx1ZVNjYWxlIiwiZGVjaW1hbHMiLCJtYXhJbnRlZ2VyRGlnaXRzIiwia3BpVW5pdCIsImdldFVuaXRJbnN0YW5jZSIsInNob3dOdW1iZXIiLCJ1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5VmFsdWUiLCJjcml0aWNhbGl0eVBhdGgiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwidXBkYXRlRGF0YXBvaW50VHJlbmQiLCJ0cmVuZFBhdGgiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCIsInRyZW5kUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsInRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHMiLCJ1cGRhdGVUYXJnZXRWYWx1ZSIsInRhcmdldFJhd1ZhbHVlIiwiZGV2aWF0aW9uUmF3VmFsdWUiLCJ0YXJnZXRTY2FsZSIsImRldmlhdGlvblZhbHVlIiwib01haW5Nb2RlbCIsImxvYWRGdWxsIiwiX2twaURlZmluaXRpb24kZGF0YXBvNCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDIiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImNvbnRleHRQYXRoIiwiJCRncm91cElkIiwib0FnZ3JlZ2F0ZSIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRlIiwiYUZpbHRlcnMiLCJyZXF1ZXN0Q29udGV4dHMiLCJhQ29udGV4dHMiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG81IiwiX2twaURlZmluaXRpb24kZGF0YXBvNiIsImxvYWRLUElDYXJkRGF0YSIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDMiLCJvR3JvdXAiLCJhZGRpdGlvbmFsbHkiLCJncm91cCIsInNvcnRPcmRlciIsInNvcnQiLCJzb3J0SW5mbyIsIlNvcnRlciIsImRlc2NlbmRpbmciLCJhbGxDb250ZXh0cyIsIm1heEl0ZW1zIiwiY2hhcnREYXRhIiwib0NvbnRleHQiLCJvRGF0YSIsInRleHRBcnJhbmdlbWVudCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsImdldFBvcG92ZXIiLCJvS1BJVGFnIiwiX3RoaXMiLCJvUG9wb3ZlciIsInJlamVjdCIsImxvYWQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJfbGVuIiwiYXJndW1lbnRzIiwicGFyYW1zIiwiQXJyYXkiLCJfa2V5IiwiQ2FyZENsYXNzIiwiSG9zdCIsIm9Ib3N0IiwiYXR0YWNoQWN0aW9uIiwib0V2ZW50Iiwic1R5cGUiLCJnZXRQYXJhbWV0ZXIiLCJvUGFyYW1zIiwiYmFzZSIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRlT3V0Ym91bmQiLCJvQ2FyZCIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SG9zdCIsIlBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiYWRkRGVwZW5kZW50Iiwib25LUElQcmVzc2VkIiwia3BpSUQiLCJvRGVmIiwib01vZGVsIiwicG9wb3ZlciIsInNldE1vZGFsIiwic2V0TWFuaWZlc3QiLCJzZXRQcmV2aWV3TW9kZSIsIm9wZW5CeSIsInByb21pc2VzIiwiYWxsIiwiYXR0YWNoRXZlbnRPbmNlIiwiX3RoaXMkb0NhcmQkZ2V0Rm9jdXNEIiwiZ2V0Rm9jdXNEb21SZWYiLCJmb2N1cyIsInJlZnJlc2giLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiS1BJTWFuYWdlbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2NhbGl6YXRpb24gZnJvbSBcInNhcC9iYXNlL2kxOG4vTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgbWV0aG9kT3ZlcnJpZGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0S1BJQ2hhcnREZWZpbml0aW9uLFxuXHRLUElEZWZpbml0aW9uLFxuXHROYXZpZ2F0aW9uSW5mb1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckRlZmluaXRpb24sIFJhbmdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgR2VuZXJpY1RhZyBmcm9tIFwic2FwL20vR2VuZXJpY1RhZ1wiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcInNhcC91aS9jb3JlL0xvY2FsZVwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgSG9zdFR5cGUgZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCI7XG5pbXBvcnQgdHlwZSB7IEhvc3QkQWN0aW9uRXZlbnQgfSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDYXJkLCBDYXJkTWFuaWZlc3QsIGRlZmF1bHQgYXMgQ2FyZFR5cGUsIENoYXJ0Q2FyZENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuY29uc3QgTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHk6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VUeXBlPiA9IHtcblx0XCIxXCI6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcIjJcIjogTWVzc2FnZVR5cGUuV2FybmluZyxcblx0XCIzXCI6IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXG5cdFwiNVwiOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvblxufTtcblxuY29uc3QgVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZTogUmVjb3JkPE1lc3NhZ2VUeXBlLCBzdHJpbmc+ID0ge1xuXHRFcnJvcjogXCJFcnJvclwiLFxuXHRXYXJuaW5nOiBcIkNyaXRpY2FsXCIsXG5cdFN1Y2Nlc3M6IFwiR29vZFwiLFxuXHRJbmZvcm1hdGlvbjogXCJOb25lXCIsXG5cdE5vbmU6IFwiTm9uZVwiXG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnVGFyZ2V0Jy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s1XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzVdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s0XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzRdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01pbmltaXplJy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0FjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NaW5pbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01heGltaXplJy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWUgZnJvbSBhIHRyZW5kIHZhbHVlLlxuICogQHBhcmFtIHRyZW5kVmFsdWUgVGhlIGNyaXRpY2FsaXR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKHRyZW5kVmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRzd2l0Y2ggKHRyZW5kVmFsdWUpIHtcblx0XHRjYXNlIDE6IC8vIFN0cm9uZ1VwXG5cdFx0Y2FzZSBcIjFcIjpcblx0XHRjYXNlIDI6IC8vIFVwXG5cdFx0Y2FzZSBcIjJcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSA0OiAvLyBEb3duXG5cdFx0Y2FzZSBcIjRcIjpcblx0XHRjYXNlIDU6IC8vIFN0cm9uZ0Rvd25cblx0XHRjYXNlIFwiNVwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIGZyb20gYSBUcmVuZENhbGN1bGF0aW9uLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJXG4gKiBAcGFyYW0gcmVmZXJlbmNlVmFsdWUgVGhlIHJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBpc1JlbGF0aXZlIFRydWUgaXMgdGhlIGNvbXBhcmlzb24gaXMgcmVsYXRpdmVcbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBBcnJheSBvZiB0aHJlc2hvbGRzIFtTdHJvbmdEb3duRGlmZmVyZW5jZSwgRG93bkRpZmZlcmVuY2UsIFVwRGlmZmVyZW5jZSwgU3Ryb25nVXBEaWZmZXJlbmNlXVxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0a3BpVmFsdWU6IG51bWJlcixcblx0cmVmZXJlbmNlVmFsdWU6IG51bWJlcixcblx0aXNSZWxhdGl2ZTogYm9vbGVhbixcblx0YVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0aWYgKCFhVGhyZXNob2xkcyB8fCAoaXNSZWxhdGl2ZSAmJiAhcmVmZXJlbmNlVmFsdWUpKSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG5cblx0Y29uc3QgY29tcFZhbHVlID0gaXNSZWxhdGl2ZSA/IChrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlKSAvIHJlZmVyZW5jZVZhbHVlIDoga3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMF0pIHtcblx0XHQvLyBTdHJvbmdEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMV0pIHtcblx0XHQvLyBEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbM10pIHtcblx0XHQvLyBTdHJvbmdVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbMl0pIHtcblx0XHQvLyBVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2lkZXdheXMgLS0+IE5vbmVcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSBhIGZpbHRlciBkZWZpbml0aW9uLlxuICogQHBhcmFtIGZpbHRlckRlZmluaXRpb24gVGhlIGZpbHRlciBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBkZWZpbml0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlIGRlZmluaXRpb24gaXMgZW1wdHkgKG5vIHJhbmdlcylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlTG93LFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VIaWdoXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBhUmFuZ2VGaWx0ZXJzID0gZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKChyYW5nZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhUmFuZ2VGaWx0ZXJzLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGNvbnN0IGRhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSh7IHN0eWxlOiBcIm1lZGl1bVwiIH0sIGN1cnJlbnRMb2NhbGUpO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdFJhbmdlKHJhbmdlOiBSYW5nZURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlTG93ID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlTG93KSlcblx0XHRcdFx0OiAocmFuZ2UucmFuZ2VMb3cgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB2YWx1ZUhpZ2ggPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwICYmIHJhbmdlLnJhbmdlSGlnaCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VIaWdoKSlcblx0XHRcdFx0OiByYW5nZS5yYW5nZUhpZ2g7XG5cblx0XHRzd2l0Y2ggKHJhbmdlLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdFx0cmV0dXJuIGBbJHt2YWx1ZUxvd30gLSAke3ZhbHVlSGlnaH1dYDtcblxuXHRcdFx0Y2FzZSBcIkNvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiBgKiR7dmFsdWVMb3d9KmA7XG5cblx0XHRcdGNhc2UgXCJHRVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjUke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0XHRyZXR1cm4gYD4ke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJMRVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjQke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0XHRyZXR1cm4gYDwke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJOQlwiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gXSk7XG5cblx0XHRcdGNhc2UgXCJORVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjAke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbYCoke3ZhbHVlTG93fSpgXSk7XG5cblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlTG93O1xuXHRcdH1cblx0fVxuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhbmdlKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYCgke2ZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcChmb3JtYXRSYW5nZSkuam9pbihcIixcIil9KWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Q2hhcnRUaXRsZShrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRmdW5jdGlvbiBmb3JtYXRMaXN0KGl0ZW1zOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10pOiBzdHJpbmcge1xuXHRcdGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gaXRlbXNbMF0ubGFiZWw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCByZXMgPSBpdGVtc1swXS5sYWJlbDtcblx0XHRcdGZvciAobGV0IEkgPSAxOyBJIDwgaXRlbXMubGVuZ3RoIC0gMTsgSSsrKSB7XG5cdFx0XHRcdHJlcyArPSBgLCAke2l0ZW1zW0ldLmxhYmVsfWA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JVEVNU0xJU1RcIiwgW3JlcywgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ubGFiZWxdKTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY2hhcnQgaGFzIGEgdGl0bGUsIHVzZSBpdC4gT3RoZXJ3aXNlLCBjcmVhdGUgYSB0aXRsZSBmcm9tIHRoZSBkaW1lbnNpb25zIGFuZCBtZWFzdXJlc1xuXHRyZXR1cm4gKFxuXHRcdGtwaURlZi5jaGFydC50aXRsZSA/P1xuXHRcdHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0NIQVJUVElUTEVcIiwgW2Zvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0Lm1lYXN1cmVzKSwgZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQuZGltZW5zaW9ucyldKVxuXHQpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MoXG5cdGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uLFxuXHRvQ2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0Y2F0ZWdvcnlBeGlzOiB7IHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfSB9O1xuXHRcdHNpemVMZWdlbmQ6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdGxlZ2VuZEdyb3VwOiB7IGxheW91dDogeyBwb3NpdGlvbjogc3RyaW5nOyBhbGlnbm1lbnQ6IHN0cmluZyB9IH07XG5cdFx0dmFsdWVBeGlzOiB7XG5cdFx0XHR0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IHN0cmluZztcblx0XHRcdH07XG5cdFx0fTtcblx0XHR2YWx1ZUF4aXMyOiB7XG5cdFx0XHR0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IHN0cmluZztcblx0XHRcdH07XG5cdFx0fTtcblx0XHRwbG90QXJlYToge1xuXHRcdFx0ZGF0YUxhYmVsOiB7fTtcblx0XHR9O1xuXHR9XG4pOiB2b2lkIHtcblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHQvLyBTaG93IGRhdGEgbGFiZWxzLCBkbyBub3Qgc2hvdyBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwidmFsdWVcIixcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRfTUZEMlwiXG5cdFx0XHR9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0XHQvLyBTaG93IGF4aXMgdGl0bGUsIGJ1YmJsZSBzaXplIGxlZ2VuZCwgZG8gbm90IHNob3cgZGF0YSBsYWJlbHNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMubGVnZW5kR3JvdXAgPSB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdGFsaWdubWVudDogXCJ0b3BMZWZ0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuc2l6ZUxlZ2VuZCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0fVxufVxuZnVuY3Rpb24gZmlsdGVyTWFwKGFPYmplY3RzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W10sIGFSb2xlcz86IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmdbXSB7XG5cdGlmIChhUm9sZXMgJiYgYVJvbGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBhT2JqZWN0c1xuXHRcdFx0LmZpbHRlcigoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhUm9sZXMuaW5jbHVkZXMoZGltZW5zaW9uLnJvbGUpO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzLm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGNvbnN0IGF4aXMxTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMVwiXSk7XG5cdGNvbnN0IGF4aXMyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSk7XG5cdGNvbnN0IGF4aXMzTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzM1wiXSk7XG5cdGNvbnN0IG90aGVyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkXSk7XG5cdGNvbnN0IHNlcmllc0RpbWVuc2lvbnMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSk7XG5cblx0Ly8gR2V0IHRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCByb2xlIFwiQ2F0ZWdvcnlcIiBmb3IgdGhlIHNoYXBlXG5cdGNvbnN0IHNoYXBlRGltZW5zaW9uID0gY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMuZmluZCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0cmV0dXJuIGRpbWVuc2lvbi5yb2xlID09PSBcIkNhdGVnb3J5XCI7XG5cdH0pO1xuXG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB4LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMSwgb3IgZm9yIEF4aXMyIGlmIG5vdCBmb3VuZCwgb3IgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB4TWVhc3VyZSA9IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHQvLyBNZWFzdXJlIGZvciB0aGUgeS1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczIsIG9yIHNlY29uZCBtZWFzdXJlIGZvciBBeGlzMSBpZiBub3QgZm91bmQsIG9yIGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB5TWVhc3VyZSA9IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRjb25zdCByZXMgPSBbXG5cdFx0e1xuXHRcdFx0dWlkOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFt4TWVhc3VyZV1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHVpZDogXCJ2YWx1ZUF4aXMyXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3lNZWFzdXJlXVxuXHRcdH1cblx0XTtcblxuXHRpZiAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSA9PT0gXCJidWJibGVcIikge1xuXHRcdC8vIE1lYXN1cmUgZm9yIHRoZSBzaXplIG9mIHRoZSBidWJibGU6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzLCBvciByZW1haW5pbmcgbWVhc3VyZSBmb3IgQXhpczEvQXhpczIgaWYgbm90IGZvdW5kXG5cdFx0Y29uc3Qgc2l6ZU1lYXN1cmUgPSBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwiYnViYmxlV2lkdGhcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbc2l6ZU1lYXN1cmVdXG5cdFx0fSk7XG5cdH1cblxuXHQvLyBDb2xvciAob3B0aW9uYWwpXG5cdGlmIChzZXJpZXNEaW1lbnNpb25zLmxlbmd0aCkge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdHZhbHVlczogc2VyaWVzRGltZW5zaW9uc1xuXHRcdH0pO1xuXHR9XG5cdC8vIFNoYXBlIChvcHRpb25hbClcblx0aWYgKHNoYXBlRGltZW5zaW9uKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcInNoYXBlXCIsXG5cdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0dmFsdWVzOiBbc2hhcGVEaW1lbnNpb24ubGFiZWxdXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRsZXQgcmVzOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdO1xuXG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInNpemVcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdHJlcyA9IGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbik7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ2ZXJ0aWNhbF9idWxsZXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJhY3R1YWxWYWx1ZXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWQsIFwiQXhpczFcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwidGFyZ2V0VmFsdWVzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdG5hdkluZm86IE5hdmlnYXRpb25JbmZvLFxuXHRvU2hlbGxTZXJ2aWNlOiBJU2hlbGxTZXJ2aWNlc1xuKTogUHJvbWlzZTx7IHNlbWFudGljT2JqZWN0Pzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmc7IG91dGJvdW5kPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcblx0aWYgKG5hdkluZm8uc2VtYW50aWNPYmplY3QpIHtcblx0XHRpZiAobmF2SW5mby5hY3Rpb24pIHtcblx0XHRcdC8vIEFjdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZDogY2hlY2sgaWYgaXQncyBhdmFpbGFibGUgaW4gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRMaW5rcyhbeyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9XSkudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhTGlua3MubGVuZ3RoICYmIGFMaW5rc1swXS5sZW5ndGggPyB7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgZ2V0IHRoZSBwcmltYXJ5IGludGVudCBmcm9tIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChuYXZJbmZvLnNlbWFudGljT2JqZWN0KS50aGVuKChvTGluaykgPT4ge1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gTm8gcHJpbWFyeSBpbnRlbnQuLi5cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgcHJpbWFyeSBpbnRlbnQgaXMgbm90IHBhcnQgb2YgdGhlIHVuYXZhaWxhYmxlIGFjdGlvbnNcblx0XHRcdFx0Y29uc3Qgb0luZm8gPSBvU2hlbGxTZXJ2aWNlLnBhcnNlU2hlbGxIYXNoKG9MaW5rLmludGVudCk7XG5cdFx0XHRcdHJldHVybiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucyAmJiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucy5pbmNsdWRlcyhvSW5mby5hY3Rpb24pXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHsgc2VtYW50aWNPYmplY3Q6IG9JbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG9JbmZvLmFjdGlvbiB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE91dGJvdW5kIG5hdmlnYXRpb24gc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHJldHVybiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiA/IFByb21pc2UucmVzb2x2ZSh7IG91dGJvdW5kOiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiB9KSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgbWFuYWdpbmcgdGhlIEtQSXMgaW4gYW4gYW5hbHl0aWNhbCBsaXN0IHBhZ2UuXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2luY2UgMS45My4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLktQSU1hbmFnZW1lbnRcIilcbmNsYXNzIEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBhS1BJRGVmaW5pdGlvbnM/OiBLUElEZWZpbml0aW9uW107XG5cblx0cHJvdGVjdGVkIG9DYXJkITogQ2FyZDtcblxuXHRwcm90ZWN0ZWQgb1BvcG92ZXIhOiBQb3BvdmVyO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY2FyZCBtYW5pZmVzdCBmb3IgYSBLUEkgZGVmaW5pdGlvbiBhbmQgc3RvcmVzIGl0IGluIGEgSlNPTiBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIEtQSSBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgaW4gd2hpY2ggdGhlIG1hbmlmZXN0IHdpbGwgYmUgc3RvcmVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCBvQ2FyZE1hbmlmZXN0OiBDYXJkTWFuaWZlc3Q8UGFydGlhbDxDaGFydENhcmRDb250ZW50Pj4gPSB7XG5cdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRpZDogXCJzYXAuZmUuS1BJQ2FyZFwiLFxuXHRcdFx0XHR0eXBlOiBcImNhcmRcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLnVpXCI6IHtcblx0XHRcdFx0dGVjaG5vbG9neTogXCJVSTVcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLmNhcmRcIjoge1xuXHRcdFx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdGpzb246IHt9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGhlYWRlcjoge1xuXHRcdFx0XHRcdHR5cGU6IFwiTnVtZXJpY1wiLFxuXHRcdFx0XHRcdHRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50aXRsZSxcblx0XHRcdFx0XHRzdWJUaXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0dW5pdE9mTWVhc3VyZW1lbnQ6IFwie21haW5Vbml0fVwiLFxuXHRcdFx0XHRcdG1haW5JbmRpY2F0b3I6IHtcblx0XHRcdFx0XHRcdG51bWJlcjogXCJ7bWFpblZhbHVlTm9TY2FsZX1cIixcblx0XHRcdFx0XHRcdHVuaXQ6IFwie21haW5WYWx1ZVNjYWxlfVwiLFxuXHRcdFx0XHRcdFx0c3RhdGU6IFwie21haW5TdGF0ZX1cIixcblx0XHRcdFx0XHRcdHRyZW5kOiBcInt0cmVuZH1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdG1pbkhlaWdodDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdGNoYXJ0UHJvcGVydGllczoge1xuXHRcdFx0XHRcdFx0cGxvdEFyZWE6IHt9LFxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpZ25tZW50OiBcImxlZnRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0cGF0aDogXCIvY2hhcnREYXRhXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHNpZGUgaW5kaWNhdG9ycyBpbiB0aGUgY2FyZCBoZWFkZXIgaWYgYSB0YXJnZXQgaXMgZGVmaW5lZCBmb3IgdGhlIEtQSVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLnNpZGVJbmRpY2F0b3JzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9UQVJHRVRcIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcInt0YXJnZXROdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCJ7dGFyZ2V0VW5pdH1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9ERVZJQVRJT05cIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcIntkZXZpYXRpb25OdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCIlXCJcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHQvLyBEZXRhaWxzIG9mIHRoZSBjYXJkOiBmaWx0ZXIgZGVzY3JpcHRpb25zXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5mb3JFYWNoKChmaWx0ZXJEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IGRpbWVuc2lvbi5sYWJlbCwgdmFsdWU6IGB7JHtkaW1lbnNpb24ubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50Lm1lYXN1cmVzID0ga3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5tYXAoKG1lYXN1cmUpID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBtZWFzdXJlLmxhYmVsLCB2YWx1ZTogYHske21lYXN1cmUubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmZlZWRzID0gZ2V0Q2hhcnRGZWVkcyhrcGlEZWZpbml0aW9uLmNoYXJ0KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH1gLCB7XG5cdFx0XHRtYW5pZmVzdDogb0NhcmRNYW5pZmVzdFxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIGluaXROYXZpZ2F0aW9uSW5mbyhcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRvU2hlbGxTZXJ2aWNlOiBJU2hlbGxTZXJ2aWNlc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBBZGQgbmF2aWdhdGlvblxuXHRcdGlmIChrcGlEZWZpbml0aW9uLm5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhrcGlEZWZpbml0aW9uLm5hdmlnYXRpb24sIG9TaGVsbFNlcnZpY2UpLnRoZW4oKG9OYXZJbmZvKSA9PiB7XG5cdFx0XHRcdGlmIChvTmF2SW5mbykge1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvaGVhZGVyL2FjdGlvbnNgLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvTmF2SW5mb1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmFLUElEZWZpbml0aW9ucyA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIva3BpRGVmaW5pdGlvbnNcIik7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXIpLmdldEFwcENvbXBvbmVudCgpO1xuXG5cdFx0XHQvLyBDcmVhdGUgYSBKU09OIG1vZGVsIHRvIHN0b3JlIEtQSSBkYXRhXG5cdFx0XHRjb25zdCBvS1BJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0XHRvVmlldy5zZXRNb2RlbChvS1BJTW9kZWwsIFwia3BpTW9kZWxcIik7XG5cblx0XHRcdHRoaXMuYUtQSURlZmluaXRpb25zLmZvckVhY2goKGtwaURlZmluaXRpb24pID0+IHtcblx0XHRcdFx0Ly8gV2Ugb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGFuYWx5dGljYWwgS1BJIGRlZmluaXRpb25cblx0XHRcdFx0aWYgKGtwaURlZmluaXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsXCIpIHtcblx0XHRcdFx0XHQvLyBDcmVhdGUgdGhlIG1hbmlmZXN0IGZvciB0aGUgS1BJIGNhcmQgYW5kIHN0b3JlIGl0IGluIHRoZSBLUEkgbW9kZWxcblx0XHRcdFx0XHR0aGlzLmluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdC8vIFNldCB0aGUgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0XHR0aGlzLmluaXROYXZpZ2F0aW9uSW5mbyhrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwsIG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpKS5jYXRjaChmdW5jdGlvbiAoZXJyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gTG9hZCB0YWcgZGF0YSBmb3IgdGhlIEtQSVxuXHRcdFx0XHRcdHRoaXMubG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbiwgb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLCBvS1BJTW9kZWwpLmNhdGNoKGZ1bmN0aW9uIChlcnI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAob0tQSU1vZGVsKSB7XG5cdFx0XHRvS1BJTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0PyBrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0Y29uc3QgaXNQZXJjZW50YWdlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNDdXJyZW5jeSA9PT0gZmFsc2UgJiYgcmF3VW5pdCA9PT0gXCIlXCI7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyBNYWluIEtQSSB2YWx1ZVxuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdC8vIFZhbHVlIGZvcm1hdHRlZCB3aXRoIGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLFxuXHRcdFx0XHRzaG93U2NhbGU6ICFpc1BlcmNlbnRhZ2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIGtwaVZhbHVlKTtcblxuXHRcdC8vIFZhbHVlIHdpdGhvdXQgYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlVW5zY2FsZWQgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwga3BpVmFsdWVOb1NjYWxlKTtcblxuXHRcdC8vIFNjYWxlIG9mIHRoZSB2YWx1ZVxuXHRcdGNvbnN0IGtwaVZhbHVlU2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IGlzUGVyY2VudGFnZSA/IHVuZGVmaW5lZCA6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlU2NhbGVgLCBrcGlWYWx1ZVNjYWxlKTtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIFVuaXQgb3IgY3VycmVuY3lcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiByYXdVbml0KSB7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC5pc0N1cnJlbmN5KSB7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwgcmF3VW5pdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIHVuaXQgb2YgbWVhc3VyZSwgd2UgaGF2ZSB0byBmb3JtYXQgaXQgcHJvcGVybHlcblx0XHRcdFx0Y29uc3Qga3BpVW5pdCA9IE51bWJlckZvcm1hdC5nZXRVbml0SW5zdGFuY2UoeyBzaG93TnVtYmVyOiBmYWxzZSB9LCBjdXJyZW50TG9jYWxlKS5mb3JtYXQocmF3VmFsdWUsIHJhd1VuaXQpO1xuXHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIGtwaVVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlICE9IG51bGwpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgKHZpYSBhIHBhdGgpXG5cdFx0XHRjcml0aWNhbGl0eVZhbHVlID1cblx0XHRcdFx0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlba3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpXSB8fCBNZXNzYWdlVHlwZS5Ob25lO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMgJiYga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgIT0gbnVsbCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IHRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHR0cmVuZFZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0Ly8gVHJlbmQgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5IHZpYSBhIHBhdGhcblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aFxuXHRcdCkge1xuXHRcdFx0Ly8gQ2FsY3VsYXRlZCB0cmVuZFxuXHRcdFx0bGV0IHRyZW5kUmVmZXJlbmNlVmFsdWU6IG51bWJlcjtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KFxuXHRcdFx0XHRcdGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggfHwgXCJcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlLFxuXHRcdFx0XHQhIWtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlLFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RyZW5kYCwgdHJlbmRWYWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuOyAvLyBObyB0YXJnZXQgc2V0IGZvciB0aGUgS1BJXG5cdFx0fVxuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cblx0XHRsZXQgdGFyZ2V0UmF3VmFsdWU6IG51bWJlcjtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwgXCJcIikpO1xuXHRcdH1cblx0XHRjb25zdCBkZXZpYXRpb25SYXdWYWx1ZSA9IHRhcmdldFJhd1ZhbHVlICE9PSAwID8gKChyYXdWYWx1ZSAtIHRhcmdldFJhd1ZhbHVlKSAvIHRhcmdldFJhd1ZhbHVlKSAqIDEwMCA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEZvcm1hdHRpbmdcblx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLCAvLyBVc2UgdGhlIHNhbWUgcHJlY2lzaW9uIGFzIHRoZSBtYWluIHZhbHVlXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXHRcdGNvbnN0IHRhcmdldFNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdGFyZ2V0VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB0YXJnZXRTY2FsZSk7XG5cblx0XHRpZiAoZGV2aWF0aW9uUmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdFx0KS5mb3JtYXQoZGV2aWF0aW9uUmF3VmFsdWUpO1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgZGV2aWF0aW9uVmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBcIk4vQVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGFnIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcGFyYW0gbG9hZEZ1bGwgSWYgbm90IHRydWUsIGxvYWRzIG9ubHkgZGF0YSBmb3IgdGhlIEtQSSB0YWdcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGRhdGEgaXMgbG9hZGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGxvYWRLUElUYWdEYXRhKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0bG9hZEZ1bGw/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdC8vIElmIGxvYWRGdWxsPWZhbHNlLCB0aGVuIHdlJ3JlIGp1c3QgbG9hZGluZyBkYXRhIGZvciB0aGUgdGFnIGFuZCB3ZSB1c2UgdGhlIFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiBncm91cElEXG5cdFx0Ly8gSWYgbG9hZEZ1bGw9dHJ1ZSwgd2UncmUgbG9hZGluZyBkYXRhIGZvciB0aGUgd2hvbGUgS1BJICh0YWcgKyBjYXJkKSBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLldvcmtlcnNcIiBncm91cElEXG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gbG9hZEZ1bGxcblx0XHRcdD8gb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7ICQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCIgfSlcblx0XHRcdDogb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7ICQkZ3JvdXBJZDogXCIkYXV0by5Mb25nUnVubmVyc1wiIH0pO1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIHsgdW5pdD86IHN0cmluZyB9PiA9IHt9O1xuXG5cdFx0Ly8gTWFpbiB2YWx1ZSArIGN1cnJlbmN5L3VuaXRcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7IHVuaXQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGVydHkgZm9yIGNyaXRpY2FsaXR5XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCkge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGhdID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGVydGllcyBmb3IgdHJlbmQgYW5kIHRyZW5kIGNhbGN1bGF0aW9uXG5cdFx0aWYgKGxvYWRGdWxsKSB7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHsgYWdncmVnYXRlOiBvQWdncmVnYXRlIH0pO1xuXG5cdFx0Ly8gTWFuYWdlIFNlbGVjdGlvblZhcmlhbnQgZmlsdGVyc1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhRmlsdGVycyA9IGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLm1hcChjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbikuZmlsdGVyKChmaWx0ZXIpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAxKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0XHRcdD8gYUNvbnRleHRzWzBdLmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiAhcmF3VW5pdCkge1xuXHRcdFx0XHRcdC8vIEEgdW5pdC9jdXJyZW5jeSBpcyBkZWZpbmVkLCBidXQgaXRzIHZhbHVlIGlzIHVuZGVmaW5lZCAtLT4gbXVsdGktdW5pdCBzaXR1YXRpb25cblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIFwiXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBNZXNzYWdlVHlwZS5Ob25lKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluU3RhdGVgLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0YCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgY2FyZCBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBLUEkuXG5cdCAqIEBwYXJhbSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGRhdGEgaXMgbG9hZGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGxvYWRLUElDYXJkRGF0YShcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0JCRncm91cElkOiBcIiRhdXRvLldvcmtlcnNcIlxuXHRcdH0pO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgeyBhZGRpdGlvbmFsbHk/OiBzdHJpbmdbXSB9PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0gPSB7fTtcblx0XHRcdGlmIChkaW1lbnNpb24udGV4dCkge1xuXHRcdFx0XHQvLyBBbHNvIGxvYWQgdGhlIHRleHQgcHJvcGVydHkgaWYgdGhlcmUncyBvbmUgKGFzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkpXG5cdFx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0uYWRkaXRpb25hbGx5ID0gW2RpbWVuc2lvbi50ZXh0XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdG9BZ2dyZWdhdGVbbWVhc3VyZS5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7XG5cdFx0XHRncm91cDogb0dyb3VwLFxuXHRcdFx0YWdncmVnYXRlOiBvQWdncmVnYXRlXG5cdFx0fSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoKHNvcnRJbmZvKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBTb3J0ZXIoc29ydEluZm8ubmFtZSwgc29ydEluZm8uZGVzY2VuZGluZyk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFsbENvbnRleHRzID0gYXdhaXQgb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1heEl0ZW1zKTtcblx0XHRjb25zdCBjaGFydERhdGEgPSBhbGxDb250ZXh0cy5tYXAoKG9Db250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSB0byBmb3JtYXQgdGhlIGRpbWVuc2lvbiB2YWx1ZSBoZXJlLCBhcyB0aGUgY2FyZCBkb2Vzbid0IHN1cHBvcnQgY2FsY3VsYXRlZCBiaW5kaW5ncyB5ZXRcblx0XHRcdFx0c3dpdGNoIChkaW1lbnNpb24udGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRPbmx5XCI6XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiVGV4dExhc3RcIjpcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKSxcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLnRleHQhKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRcdFx0XHQvLyBObyB0ZXh0IGFycmFuZ2VtZW50XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLnRleHQhKSxcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0XHRvRGF0YVttZWFzdXJlLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkobWVhc3VyZS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gb0RhdGE7XG5cdFx0fSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9jaGFydERhdGFgLCBjaGFydERhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBvcG92ZXIgdG8gZGlzcGxheSB0aGUgS1BJIGNhcmRcblx0ICogVGhlIHBvcG92ZXIgYW5kIHRoZSBjb250YWluZWQgY2FyZCBmb3IgdGhlIEtQSXMgYXJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuXHQgKiBUaGUgcG9wb3ZlciBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgS1BJcywgc28gaXQncyBjcmVhdGVkIG9ubHkgb25jZS5cblx0ICogQHBhcmFtIG9LUElUYWcgVGhlIHRhZyB0aGF0IHRyaWdnZXJlZCB0aGUgcG9wb3ZlciBvcGVuaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmVkIHBvcG92ZXIgYXMgYSBwcm9taXNlLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGdldFBvcG92ZXIob0tQSVRhZzogR2VuZXJpY1RhZyk6IFByb21pc2U8UG9wb3Zlcj4ge1xuXHRcdGlmICghdGhpcy5vUG9wb3Zlcikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAvdWkvaW50ZWdyYXRpb25cIiB9KVxuXHRcdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIiwgXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiXSwgKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IENhcmRDbGFzcyA9IHBhcmFtc1swXSBhcyB0eXBlb2YgQ2FyZFR5cGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IEhvc3QgPSBwYXJhbXNbMV0gYXMgdHlwZW9mIEhvc3RUeXBlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvSG9zdCA9IG5ldyBIb3N0KCk7XG5cblx0XHRcdFx0XHRcdFx0b0hvc3QuYXR0YWNoQWN0aW9uKChvRXZlbnQ6IEhvc3QkQWN0aW9uRXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVHlwZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ0eXBlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicGFyYW1ldGVyc1wiKSBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIk5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbXMuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1BhcmFtcy5zZW1hbnRpY09iamVjdCwgb1BhcmFtcy5hY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVPdXRib3VuZChvUGFyYW1zLm91dGJvdW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQgPSBuZXcgQ2FyZENsYXNzKHtcblx0XHRcdFx0XHRcdFx0XHR3aWR0aDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdGhlaWdodDogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0SG9zdChvSG9zdCBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub1BvcG92ZXIgPSBuZXcgUG9wb3ZlcihcImtwaS1Qb3BvdmVyXCIsIHtcblx0XHRcdFx0XHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IFwiQXV0b1wiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFt0aGlzLm9DYXJkXVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRvS1BJVGFnLmFkZERlcGVuZGVudCh0aGlzLm9Qb3BvdmVyKTsgLy8gVGhlIGZpcnN0IGNsaWNrZWQgdGFnIGdldHMgdGhlIHBvcG92ZXIgYXMgZGVwZW5kZW50XG5cblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGlzLm9Qb3BvdmVyKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFzeW5jIG9uS1BJUHJlc3NlZChvS1BJVGFnOiBHZW5lcmljVGFnLCBrcGlJRDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gb0tQSVRhZy5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGtwaURlZmluaXRpb24gPSB0aGlzLmFLUElEZWZpbml0aW9ucy5maW5kKGZ1bmN0aW9uIChvRGVmKSB7XG5cdFx0XHRcdHJldHVybiAob0RlZiBhcyBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbikuaWQgPT09IGtwaUlEO1xuXHRcdFx0fSkgYXMgQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0tQSVRhZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cblx0XHRcdFx0XHRjb25zdCBwb3BvdmVyID0gYXdhaXQgdGhpcy5nZXRQb3BvdmVyKG9LUElUYWcpO1xuXHRcdFx0XHRcdC8vIFNldCB0aGUgcG9wb3ZlciBhcyBtb2RhbCB3aGlsZSB0aGUgY2FyZCBpcyBsb2FkaW5nIChzbyB0aGF0IGNhcmQgcmVuZGVyaW5nIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHBvcG92ZXIgYW5kIGNsb3NlIGl0KVxuXHRcdFx0XHRcdHBvcG92ZXIuc2V0TW9kYWwodHJ1ZSk7XG5cblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldE1hbmlmZXN0KG9LUElNb2RlbC5nZXRQcm9wZXJ0eShgLyR7a3BpSUR9L21hbmlmZXN0YCkpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0UHJldmlld01vZGUoXCJBYnN0cmFjdFwiKTsgLy8gRGlzcGxheSBwbGFjZWhvbGRlcnMgaW4gdGhlIGNhcmQgdW50aWwgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7IC8vIE9wZW4gdGhlIHBvcG92ZXIgaW1tZWRpYXRlbHlcblxuXHRcdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW1xuXHRcdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCwgdHJ1ZSksXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRLUElDYXJkRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbClcblx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuYXR0YWNoRXZlbnRPbmNlKFwic3RhdGVDaGFuZ2VkXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdC8vIE9uY2UgdGhlIGNhcmQgaGFzIGJlZW4gcmVuZGVyZWQsIHNldCB0aGUgZm9jdXMgcHJvcGVybHkgYW5kIHNldCB0aGUgcG9wb3ZlciBhcyBub24tbW9kYWxcblx0XHRcdFx0XHRcdCh0aGlzLm9DYXJkLmdldEZvY3VzRG9tUmVmKCkgYXMgSFRNTEVsZW1lbnQpPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0cG9wb3Zlci5zZXRNb2RhbChmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRNYW5pZmVzdChvS1BJTW9kZWwuZ2V0UHJvcGVydHkoYC8ke2twaUlEfS9tYW5pZmVzdGApKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldFByZXZpZXdNb2RlKFwiT2ZmXCIpOyAvLyBEaXNwbGF5IHJlYWwgZGF0YSBpbiB0aGUgY2FyZFxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgS1BJTWFu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
1038
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJ0aXRsZSIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJjYWxsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiYUtQSURlZmluaXRpb25zIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0UGFnZU1vZGVsIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsInJhd1VuaXQiLCJpc1BhdGgiLCJpc1BlcmNlbnRhZ2UiLCJpc0N1cnJlbmN5IiwicmF3VmFsdWUiLCJOdW1iZXIiLCJwYXJzZUZsb2F0IiwiTnVtYmVyRm9ybWF0IiwiZ2V0RmxvYXRJbnN0YW5jZSIsIm1pbkZyYWN0aW9uRGlnaXRzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJzaG93U2NhbGUiLCJrcGlWYWx1ZVVuc2NhbGVkIiwiZ3JvdXBpbmdFbmFibGVkIiwia3BpVmFsdWVOb1NjYWxlIiwia3BpVmFsdWVTY2FsZSIsImRlY2ltYWxzIiwibWF4SW50ZWdlckRpZ2l0cyIsImtwaVVuaXQiLCJnZXRVbml0SW5zdGFuY2UiLCJzaG93TnVtYmVyIiwidXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVZhbHVlIiwiY3JpdGljYWxpdHlQYXRoIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSIsInVwZGF0ZURhdGFwb2ludFRyZW5kIiwidHJlbmRQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgiLCJ0cmVuZFJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUiLCJ0cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzIiwidXBkYXRlVGFyZ2V0VmFsdWUiLCJ0YXJnZXRSYXdWYWx1ZSIsImRldmlhdGlvblJhd1ZhbHVlIiwidGFyZ2V0U2NhbGUiLCJkZXZpYXRpb25WYWx1ZSIsIm9NYWluTW9kZWwiLCJsb2FkRnVsbCIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY29udGV4dFBhdGgiLCIkJGdyb3VwSWQiLCJvQWdncmVnYXRlIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGUiLCJhRmlsdGVycyIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsImxvYWRLUElDYXJkRGF0YSIsIm9Hcm91cCIsImFkZGl0aW9uYWxseSIsImdyb3VwIiwic29ydE9yZGVyIiwic29ydCIsInNvcnRJbmZvIiwiU29ydGVyIiwiZGVzY2VuZGluZyIsImFsbENvbnRleHRzIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwidGV4dEFycmFuZ2VtZW50IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJfdGhpcyIsIm9Qb3BvdmVyIiwicmVqZWN0IiwibG9hZCIsInNhcCIsInVpIiwicmVxdWlyZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJwYXJhbXMiLCJBcnJheSIsIl9rZXkiLCJDYXJkQ2xhc3MiLCJIb3N0Iiwib0hvc3QiLCJhdHRhY2hBY3Rpb24iLCJvRXZlbnQiLCJzVHlwZSIsImdldFBhcmFtZXRlciIsIm9QYXJhbXMiLCJiYXNlIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGVPdXRib3VuZCIsIm9DYXJkIiwid2lkdGgiLCJoZWlnaHQiLCJzZXRIb3N0IiwiUG9wb3ZlciIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJhZGREZXBlbmRlbnQiLCJvbktQSVByZXNzZWQiLCJrcGlJRCIsIm9EZWYiLCJvTW9kZWwiLCJwb3BvdmVyIiwic2V0TW9kYWwiLCJzZXRNYW5pZmVzdCIsInNldFByZXZpZXdNb2RlIiwib3BlbkJ5IiwicHJvbWlzZXMiLCJhbGwiLCJhdHRhY2hFdmVudE9uY2UiLCJnZXRGb2N1c0RvbVJlZiIsImZvY3VzIiwicmVmcmVzaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUElNYW5hZ2VtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvY2FsaXphdGlvbiBmcm9tIFwic2FwL2Jhc2UvaTE4bi9Mb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBtZXRob2RPdmVycmlkZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRLUElDaGFydERlZmluaXRpb24sXG5cdEtQSURlZmluaXRpb24sXG5cdE5hdmlnYXRpb25JbmZvXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRGVmaW5pdGlvbiwgUmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBHZW5lcmljVGFnIGZyb20gXCJzYXAvbS9HZW5lcmljVGFnXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwic2FwL3VpL2NvcmUvTG9jYWxlXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBIb3N0VHlwZSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIjtcbmltcG9ydCB0eXBlIHsgSG9zdCRBY3Rpb25FdmVudCB9IGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENhcmQsIENhcmRNYW5pZmVzdCwgZGVmYXVsdCBhcyBDYXJkVHlwZSwgQ2hhcnRDYXJkQ29udGVudCB9IGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vd2lkZ2V0cy9DYXJkXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eTogUmVjb3JkPHN0cmluZywgTWVzc2FnZVR5cGU+ID0ge1xuXHRcIjFcIjogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFwiMlwiOiBNZXNzYWdlVHlwZS5XYXJuaW5nLFxuXHRcIjNcIjogTWVzc2FnZVR5cGUuU3VjY2Vzcyxcblx0XCI1XCI6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXG59O1xuXG5jb25zdCBWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlOiBSZWNvcmQ8TWVzc2FnZVR5cGUsIHN0cmluZz4gPSB7XG5cdEVycm9yOiBcIkVycm9yXCIsXG5cdFdhcm5pbmc6IFwiQ3JpdGljYWxcIixcblx0U3VjY2VzczogXCJHb29kXCIsXG5cdEluZm9ybWF0aW9uOiBcIk5vbmVcIixcblx0Tm9uZTogXCJOb25lXCJcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdUYXJnZXQnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzVdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s1XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s0XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzRdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbM10pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWluaW1pemUnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWF4aW1pemUnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciB2YWx1ZSBmcm9tIGEgdHJlbmQgdmFsdWUuXG4gKiBAcGFyYW0gdHJlbmRWYWx1ZSBUaGUgY3JpdGljYWxpdHkgdmFsdWVzLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUodHJlbmRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdHN3aXRjaCAodHJlbmRWYWx1ZSkge1xuXHRcdGNhc2UgMTogLy8gU3Ryb25nVXBcblx0XHRjYXNlIFwiMVwiOlxuXHRcdGNhc2UgMjogLy8gVXBcblx0XHRjYXNlIFwiMlwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIDQ6IC8vIERvd25cblx0XHRjYXNlIFwiNFwiOlxuXHRcdGNhc2UgNTogLy8gU3Ryb25nRG93blxuXHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgZnJvbSBhIFRyZW5kQ2FsY3VsYXRpb24uXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUElcbiAqIEBwYXJhbSByZWZlcmVuY2VWYWx1ZSBUaGUgcmVmZXJlbmNlIHZhbHVlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIGlzUmVsYXRpdmUgVHJ1ZSBpcyB0aGUgY29tcGFyaXNvbiBpcyByZWxhdGl2ZVxuICogQHBhcmFtIGFUaHJlc2hvbGRzIEFycmF5IG9mIHRocmVzaG9sZHMgW1N0cm9uZ0Rvd25EaWZmZXJlbmNlLCBEb3duRGlmZmVyZW5jZSwgVXBEaWZmZXJlbmNlLCBTdHJvbmdVcERpZmZlcmVuY2VdXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRrcGlWYWx1ZTogbnVtYmVyLFxuXHRyZWZlcmVuY2VWYWx1ZTogbnVtYmVyLFxuXHRpc1JlbGF0aXZlOiBib29sZWFuLFxuXHRhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRpZiAoIWFUaHJlc2hvbGRzIHx8IChpc1JlbGF0aXZlICYmICFyZWZlcmVuY2VWYWx1ZSkpIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cblxuXHRjb25zdCBjb21wVmFsdWUgPSBpc1JlbGF0aXZlID8gKGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWUpIC8gcmVmZXJlbmNlVmFsdWUgOiBrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1swXSkge1xuXHRcdC8vIFN0cm9uZ0Rvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1sxXSkge1xuXHRcdC8vIERvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1szXSkge1xuXHRcdC8vIFN0cm9uZ1VwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1syXSkge1xuXHRcdC8vIFVwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBTaWRld2F5cyAtLT4gTm9uZVxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIGEgZmlsdGVyIGRlZmluaXRpb24uXG4gKiBAcGFyYW0gZmlsdGVyRGVmaW5pdGlvbiBUaGUgZmlsdGVyIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFJldHVybnMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gdGhlIGRlZmluaXRpb24sIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGVmaW5pdGlvbiBpcyBlbXB0eSAobm8gcmFuZ2VzKVxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VMb3csXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUhpZ2hcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGFSYW5nZUZpbHRlcnMgPSBmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAoKHJhbmdlKSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFSYW5nZUZpbHRlcnMsXG5cdFx0XHRhbmQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0Y29uc3QgZGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHsgc3R5bGU6IFwibWVkaXVtXCIgfSwgY3VycmVudExvY2FsZSk7XG5cblx0ZnVuY3Rpb24gZm9ybWF0UmFuZ2UocmFuZ2U6IFJhbmdlRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVMb3cgPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwXG5cdFx0XHRcdD8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VMb3cpKVxuXHRcdFx0XHQ6IChyYW5nZS5yYW5nZUxvdyBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IHZhbHVlSGlnaCA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgJiYgcmFuZ2UucmFuZ2VIaWdoICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUhpZ2gpKVxuXHRcdFx0XHQ6IHJhbmdlLnJhbmdlSGlnaDtcblxuXHRcdHN3aXRjaCAocmFuZ2Uub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0XHRyZXR1cm4gYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gO1xuXG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIGAqJHt2YWx1ZUxvd30qYDtcblxuXHRcdFx0Y2FzZSBcIkdFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NSR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRcdHJldHVybiBgPiR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRcdHJldHVybiBgPCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5CXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWBdKTtcblxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2MCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5vdENvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgKiR7dmFsdWVMb3d9KmBdKTtcblxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVMb3c7XG5cdFx0fVxuXHR9XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmFuZ2UoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgKCR7ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKGZvcm1hdFJhbmdlKS5qb2luKFwiLFwiKX0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDaGFydFRpdGxlKGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdExpc3QoaXRlbXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSk6IHN0cmluZyB7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpdGVtc1swXS5sYWJlbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IGl0ZW1zWzBdLmxhYmVsO1xuXHRcdFx0Zm9yIChsZXQgSSA9IDE7IEkgPCBpdGVtcy5sZW5ndGggLSAxOyBJKyspIHtcblx0XHRcdFx0cmVzICs9IGAsICR7aXRlbXNbSV0ubGFiZWx9YDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lURU1TTElTVFwiLCBbcmVzLCBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5sYWJlbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjaGFydCBoYXMgYSB0aXRsZSwgdXNlIGl0LiBPdGhlcndpc2UsIGNyZWF0ZSBhIHRpdGxlIGZyb20gdGhlIGRpbWVuc2lvbnMgYW5kIG1lYXN1cmVzXG5cdHJldHVybiAoXG5cdFx0a3BpRGVmLmNoYXJ0LnRpdGxlID8/XG5cdFx0cmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfQ0hBUlRUSVRMRVwiLCBbZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQubWVhc3VyZXMpLCBmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5kaW1lbnNpb25zKV0pXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhcblx0Y2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24sXG5cdG9DaGFydFByb3BlcnRpZXM6IHtcblx0XHRjYXRlZ29yeUF4aXM6IHsgdGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9IH07XG5cdFx0c2l6ZUxlZ2VuZDogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0bGVnZW5kR3JvdXA6IHsgbGF5b3V0OiB7IHBvc2l0aW9uOiBzdHJpbmc7IGFsaWdubWVudDogc3RyaW5nIH0gfTtcblx0XHR2YWx1ZUF4aXM6IHtcblx0XHRcdHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdGZvcm1hdFN0cmluZzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHZhbHVlQXhpczI6IHtcblx0XHRcdHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdGZvcm1hdFN0cmluZzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHRkYXRhTGFiZWw6IHt9O1xuXHRcdH07XG5cdH1cbik6IHZvaWQge1xuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdC8vIFNob3cgZGF0YSBsYWJlbHMsIGRvIG5vdCBzaG93IGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdF9NRkQyXCJcblx0XHRcdH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRcdC8vIFNob3cgYXhpcyB0aXRsZSwgYnViYmxlIHNpemUgbGVnZW5kLCBkbyBub3Qgc2hvdyBkYXRhIGxhYmVsc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5sZWdlbmRHcm91cCA9IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0YWxpZ25tZW50OiBcInRvcExlZnRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5zaXplTGVnZW5kID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHR9XG59XG5mdW5jdGlvbiBmaWx0ZXJNYXAoYU9iamVjdHM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXSwgYVJvbGVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IHN0cmluZ1tdIHtcblx0aWYgKGFSb2xlcyAmJiBhUm9sZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzXG5cdFx0XHQuZmlsdGVyKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFSb2xlcy5pbmNsdWRlcyhkaW1lbnNpb24ucm9sZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYU9iamVjdHMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0Y29uc3QgYXhpczFNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMxXCJdKTtcblx0Y29uc3QgYXhpczJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKTtcblx0Y29uc3QgYXhpczNNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMzXCJdKTtcblx0Y29uc3Qgb3RoZXJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWRdKTtcblx0Y29uc3Qgc2VyaWVzRGltZW5zaW9ucyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKTtcblxuXHQvLyBHZXQgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIHJvbGUgXCJDYXRlZ29yeVwiIGZvciB0aGUgc2hhcGVcblx0Y29uc3Qgc2hhcGVEaW1lbnNpb24gPSBjaGFydERlZmluaXRpb24uZGltZW5zaW9ucy5maW5kKChkaW1lbnNpb24pID0+IHtcblx0XHRyZXR1cm4gZGltZW5zaW9uLnJvbGUgPT09IFwiQ2F0ZWdvcnlcIjtcblx0fSk7XG5cblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHgtQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMxLCBvciBmb3IgQXhpczIgaWYgbm90IGZvdW5kLCBvciBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHhNZWFzdXJlID0gYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB5LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMiwgb3Igc2Vjb25kIG1lYXN1cmUgZm9yIEF4aXMxIGlmIG5vdCBmb3VuZCwgb3IgZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHlNZWFzdXJlID0gYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdGNvbnN0IHJlcyA9IFtcblx0XHR7XG5cdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3hNZWFzdXJlXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dWlkOiBcInZhbHVlQXhpczJcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbeU1lYXN1cmVdXG5cdFx0fVxuXHRdO1xuXG5cdGlmIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlID09PSBcImJ1YmJsZVwiKSB7XG5cdFx0Ly8gTWVhc3VyZSBmb3IgdGhlIHNpemUgb2YgdGhlIGJ1YmJsZTogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMsIG9yIHJlbWFpbmluZyBtZWFzdXJlIGZvciBBeGlzMS9BeGlzMiBpZiBub3QgZm91bmRcblx0XHRjb25zdCBzaXplTWVhc3VyZSA9IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJidWJibGVXaWR0aFwiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaXplTWVhc3VyZV1cblx0XHR9KTtcblx0fVxuXG5cdC8vIENvbG9yIChvcHRpb25hbClcblx0aWYgKHNlcmllc0RpbWVuc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0dmFsdWVzOiBzZXJpZXNEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH1cblx0Ly8gU2hhcGUgKG9wdGlvbmFsKVxuXHRpZiAoc2hhcGVEaW1lbnNpb24pIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwic2hhcGVcIixcblx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaGFwZURpbWVuc2lvbi5sYWJlbF1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGxldCByZXM6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W107XG5cblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwic2l6ZVwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMpXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0cmVzID0gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInZlcnRpY2FsX2J1bGxldFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImFjdHVhbFZhbHVlc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZCwgXCJBeGlzMVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJ0YXJnZXRWYWx1ZXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0bmF2SW5mbzogTmF2aWdhdGlvbkluZm8sXG5cdG9TaGVsbFNlcnZpY2U6IElTaGVsbFNlcnZpY2VzXG4pOiBQcm9taXNlPHsgc2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7IGFjdGlvbj86IHN0cmluZzsgb3V0Ym91bmQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAobmF2SW5mby5zZW1hbnRpY09iamVjdCkge1xuXHRcdGlmIChuYXZJbmZvLmFjdGlvbikge1xuXHRcdFx0Ly8gQWN0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkOiBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldExpbmtzKFt7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH1dKS50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggJiYgYUxpbmtzWzBdLmxlbmd0aCA/IHsgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfSA6IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSBnZXQgdGhlIHByaW1hcnkgaW50ZW50IGZyb20gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRQcmltYXJ5SW50ZW50KG5hdkluZm8uc2VtYW50aWNPYmplY3QpLnRoZW4oKG9MaW5rKSA9PiB7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBObyBwcmltYXJ5IGludGVudC4uLlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0aGF0IHRoZSBwcmltYXJ5IGludGVudCBpcyBub3QgcGFydCBvZiB0aGUgdW5hdmFpbGFibGUgYWN0aW9uc1xuXHRcdFx0XHRjb25zdCBvSW5mbyA9IG9TaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2gob0xpbmsuaW50ZW50KTtcblx0XHRcdFx0cmV0dXJuIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zICYmIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zLmluY2x1ZGVzKG9JbmZvLmFjdGlvbilcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogeyBzZW1hbnRpY09iamVjdDogb0luZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogb0luZm8uYWN0aW9uIH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT3V0Ym91bmQgbmF2aWdhdGlvbiBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0cmV0dXJuIG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uID8gUHJvbWlzZS5yZXNvbHZlKHsgb3V0Ym91bmQ6IG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uIH0pIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBtYW5hZ2luZyB0aGUgS1BJcyBpbiBhbiBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzaW5jZSAxLjkzLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuS1BJTWFuYWdlbWVudFwiKVxuY2xhc3MgS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGFLUElEZWZpbml0aW9ucz86IEtQSURlZmluaXRpb25bXTtcblxuXHRwcm90ZWN0ZWQgb0NhcmQhOiBDYXJkO1xuXG5cdHByb3RlY3RlZCBvUG9wb3ZlciE6IFBvcG92ZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjYXJkIG1hbmlmZXN0IGZvciBhIEtQSSBkZWZpbml0aW9uIGFuZCBzdG9yZXMgaXQgaW4gYSBKU09OIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgS1BJIGRlZmluaXRpb25cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCBpbiB3aGljaCB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBzdG9yZWRcblx0ICovXG5cdHByb3RlY3RlZCBpbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IG9DYXJkTWFuaWZlc3Q6IENhcmRNYW5pZmVzdDxQYXJ0aWFsPENoYXJ0Q2FyZENvbnRlbnQ+PiA9IHtcblx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdGlkOiBcInNhcC5mZS5LUElDYXJkXCIsXG5cdFx0XHRcdHR5cGU6IFwiY2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAudWlcIjoge1xuXHRcdFx0XHR0ZWNobm9sb2d5OiBcIlVJNVwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAuY2FyZFwiOiB7XG5cdFx0XHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0anNvbjoge31cblx0XHRcdFx0fSxcblx0XHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJOdW1lcmljXCIsXG5cdFx0XHRcdFx0dGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRpdGxlLFxuXHRcdFx0XHRcdHN1YlRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR1bml0T2ZNZWFzdXJlbWVudDogXCJ7bWFpblVuaXR9XCIsXG5cdFx0XHRcdFx0bWFpbkluZGljYXRvcjoge1xuXHRcdFx0XHRcdFx0bnVtYmVyOiBcInttYWluVmFsdWVOb1NjYWxlfVwiLFxuXHRcdFx0XHRcdFx0dW5pdDogXCJ7bWFpblZhbHVlU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHRzdGF0ZTogXCJ7bWFpblN0YXRlfVwiLFxuXHRcdFx0XHRcdFx0dHJlbmQ6IFwie3RyZW5kfVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0bWluSGVpZ2h0OiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0Y2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRwbG90QXJlYToge30sXG5cdFx0XHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwibGVmdFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIi9jaGFydERhdGFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBBZGQgc2lkZSBpbmRpY2F0b3JzIGluIHRoZSBjYXJkIGhlYWRlciBpZiBhIHRhcmdldCBpcyBkZWZpbmVkIGZvciB0aGUgS1BJXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuc2lkZUluZGljYXRvcnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX1RBUkdFVFwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie3RhcmdldE51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcInt0YXJnZXRVbml0fVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX0RFVklBVElPTlwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie2RldmlhdGlvbk51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcIiVcIlxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdC8vIERldGFpbHMgb2YgdGhlIGNhcmQ6IGZpbHRlciBkZXNjcmlwdGlvbnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLmZvckVhY2goKGZpbHRlckRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgZGVzYyA9IGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb24pO1xuXHRcdFx0XHRpZiAoZGVzYykge1xuXHRcdFx0XHRcdGFEZXNjcmlwdGlvbnMucHVzaChkZXNjKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChhRGVzY3JpcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLmRldGFpbHMgPSBhRGVzY3JpcHRpb25zLmpvaW4oXCIsIFwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGFydCBzZXR0aW5nczogdHlwZSwgdGl0bGUsIGRpbWVuc2lvbnMgYW5kIG1lYXN1cmVzIGluIHRoZSBtYW5pZmVzdFxuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0VHlwZSA9IGtwaURlZmluaXRpb24uY2hhcnQuY2hhcnRUeXBlO1xuXHRcdHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhrcGlEZWZpbml0aW9uLmNoYXJ0LCBvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMpO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0UHJvcGVydGllcy50aXRsZS50ZXh0ID0gZm9ybWF0Q2hhcnRUaXRsZShrcGlEZWZpbml0aW9uKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5kaW1lbnNpb25zID0ga3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBsYWJlbDogZGltZW5zaW9uLmxhYmVsLCB2YWx1ZTogYHske2RpbWVuc2lvbi5uYW1lfX1gIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQubWVhc3VyZXMgPSBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLm1hcCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IG1lYXN1cmUubGFiZWwsIHZhbHVlOiBgeyR7bWVhc3VyZS5uYW1lfX1gIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZmVlZHMgPSBnZXRDaGFydEZlZWRzKGtwaURlZmluaXRpb24uY2hhcnQpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfWAsIHtcblx0XHRcdG1hbmlmZXN0OiBvQ2FyZE1hbmlmZXN0XG5cdFx0fSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXN5bmMgaW5pdE5hdmlnYXRpb25JbmZvKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsLFxuXHRcdG9TaGVsbFNlcnZpY2U6IElTaGVsbFNlcnZpY2VzXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEFkZCBuYXZpZ2F0aW9uXG5cdFx0aWYgKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbiwgb1NoZWxsU2VydmljZSkudGhlbigob05hdkluZm8pID0+IHtcblx0XHRcdFx0aWYgKG9OYXZJbmZvKSB7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9oZWFkZXIvYWN0aW9uc2AsIFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG9OYXZJbmZvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYUtQSURlZmluaXRpb25zID0gKHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9rcGlEZWZpbml0aW9uc1wiKTtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcikuZ2V0QXBwQ29tcG9uZW50KCk7XG5cblx0XHRcdC8vIENyZWF0ZSBhIEpTT04gbW9kZWwgdG8gc3RvcmUgS1BJIGRhdGFcblx0XHRcdGNvbnN0IG9LUElNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRcdG9WaWV3LnNldE1vZGVsKG9LUElNb2RlbCwgXCJrcGlNb2RlbFwiKTtcblxuXHRcdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMuZm9yRWFjaCgoa3BpRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBXZSBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgYW5hbHl0aWNhbCBLUEkgZGVmaW5pdGlvblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxcIikge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSB0aGUgbWFuaWZlc3QgZm9yIHRoZSBLUEkgY2FyZCBhbmQgc3RvcmUgaXQgaW4gdGhlIEtQSSBtb2RlbFxuXHRcdFx0XHRcdHRoaXMuaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdFx0Ly8gU2V0IHRoZSBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRcdHRoaXMuaW5pdE5hdmlnYXRpb25JbmZvKGtwaURlZmluaXRpb24sIG9LUElNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkpLmNhdGNoKGZ1bmN0aW9uIChlcnI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBMb2FkIHRhZyBkYXRhIGZvciB0aGUgS1BJXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvQXBwQ29tcG9uZW50LmdldE1vZGVsKCksIG9LUElNb2RlbCkuY2F0Y2goZnVuY3Rpb24gKGVycjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmIChvS1BJTW9kZWwpIHtcblx0XHRcdG9LUElNb2RlbC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogIWlzUGVyY2VudGFnZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlYCwga3BpVmFsdWUpO1xuXG5cdFx0Ly8gVmFsdWUgd2l0aG91dCBhIHNjYWxlXG5cdFx0Y29uc3Qga3BpVmFsdWVVbnNjYWxlZCA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDIsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRcdGdyb3VwaW5nRW5hYmxlZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRgLCBrcGlWYWx1ZVVuc2NhbGVkKTtcblxuXHRcdC8vIFZhbHVlIGZvcm1hdHRlZCB3aXRoIHRoZSBzY2FsZSBvbWl0dGVkXG5cdFx0Y29uc3Qga3BpVmFsdWVOb1NjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSAhPSBudWxsKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBjYWxjdWxhdGlvblxuXHRcdFx0c3dpdGNoIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1RhcmdldFwiOlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihyYXdWYWx1ZSwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWluaW1pemVcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIGNyaXRpY2FsaXR5VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlYCxcblx0XHRcdFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGVbY3JpdGljYWxpdHlWYWx1ZV0gfHwgXCJOb25lXCJcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlID09PSB1bmRlZmluZWQgJiYga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47IC8vIE5vIHRhcmdldCBzZXQgZm9yIHRoZSBLUElcblx0XHR9XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXHRcdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblxuXHRcdGxldCB0YXJnZXRSYXdWYWx1ZTogbnVtYmVyO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBcIlwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGRldmlhdGlvblJhd1ZhbHVlID0gdGFyZ2V0UmF3VmFsdWUgIT09IDAgPyAoKHJhd1ZhbHVlIC0gdGFyZ2V0UmF3VmFsdWUpIC8gdGFyZ2V0UmF3VmFsdWUpICogMTAwIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9ybWF0dGluZ1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsIC8vIFVzZSB0aGUgc2FtZSBwcmVjaXNpb24gYXMgdGhlIG1haW4gdmFsdWVcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cdFx0Y29uc3QgdGFyZ2V0U2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB0YXJnZXRWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0VW5pdGAsIHRhcmdldFNjYWxlKTtcblxuXHRcdGlmIChkZXZpYXRpb25SYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZXZpYXRpb25WYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0XHQpLmZvcm1hdChkZXZpYXRpb25SYXdWYWx1ZSk7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBkZXZpYXRpb25WYWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIFwiTi9BXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0YWcgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0gb01haW5Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkXG5cdCAqIEBwYXJhbSBsb2FkRnVsbCBJZiBub3QgdHJ1ZSwgbG9hZHMgb25seSBkYXRhIGZvciB0aGUgS1BJIHRhZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgbG9hZEtQSVRhZ0RhdGEoXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b01haW5Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRsb2FkRnVsbD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dFtdPiB7XG5cdFx0Ly8gSWYgbG9hZEZ1bGw9ZmFsc2UsIHRoZW4gd2UncmUganVzdCBsb2FkaW5nIGRhdGEgZm9yIHRoZSB0YWcgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Mb25nUnVubmVyc1wiIGdyb3VwSURcblx0XHQvLyBJZiBsb2FkRnVsbD10cnVlLCB3ZSdyZSBsb2FkaW5nIGRhdGEgZm9yIHRoZSB3aG9sZSBLUEkgKHRhZyArIGNhcmQpIGFuZCB3ZSB1c2UgdGhlIFwiJGF1dG8uV29ya2Vyc1wiIGdyb3VwSURcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBsb2FkRnVsbFxuXHRcdFx0PyBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLldvcmtlcnNcIiB9KVxuXHRcdFx0OiBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDEpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHRcdFx0PyBhQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmICFyYXdVbml0KSB7XG5cdFx0XHRcdFx0Ly8gQSB1bml0L2N1cnJlbmN5IGlzIGRlZmluZWQsIGJ1dCBpdHMgdmFsdWUgaXMgdW5kZWZpbmVkIC0tPiBtdWx0aS11bml0IHNpdHVhdGlvblxuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZGAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwgXCJcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjYXJkIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgbG9hZEtQSUNhcmREYXRhKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWxcblx0KTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dFtdPiB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiXG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0dyb3VwOiBSZWNvcmQ8c3RyaW5nLCB7IGFkZGl0aW9uYWxseT86IHN0cmluZ1tdIH0+ID0ge307XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLmZvckVhY2goKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0b0dyb3VwW2RpbWVuc2lvbi5uYW1lXSA9IHt9O1xuXHRcdFx0aWYgKGRpbWVuc2lvbi50ZXh0KSB7XG5cdFx0XHRcdC8vIEFsc28gbG9hZCB0aGUgdGV4dCBwcm9wZXJ0eSBpZiB0aGVyZSdzIG9uZSAoYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSlcblx0XHRcdFx0b0dyb3VwW2RpbWVuc2lvbi5uYW1lXS5hZGRpdGlvbmFsbHkgPSBbZGltZW5zaW9uLnRleHRdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0b0FnZ3JlZ2F0ZVttZWFzdXJlLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHtcblx0XHRcdGdyb3VwOiBvR3JvdXAsXG5cdFx0XHRhZ2dyZWdhdGU6IG9BZ2dyZWdhdGVcblx0XHR9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcigoZmlsdGVyKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdH0pIGFzIEZpbHRlcltdO1xuXHRcdFx0b0xpc3RCaW5kaW5nLmZpbHRlcihhRmlsdGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydGluZ1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlcikge1xuXHRcdFx0b0xpc3RCaW5kaW5nLnNvcnQoXG5cdFx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQuc29ydE9yZGVyLm1hcCgoc29ydEluZm8pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFNvcnRlcihzb3J0SW5mby5uYW1lLCBzb3J0SW5mby5kZXNjZW5kaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxsQ29udGV4dHMgPSBhd2FpdCBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIGtwaURlZmluaXRpb24uY2hhcnQubWF4SXRlbXMpO1xuXHRcdGNvbnN0IGNoYXJ0RGF0YSA9IGFsbENvbnRleHRzLm1hcCgob0NvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLmZvckVhY2goKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRvIGZvcm1hdCB0aGUgZGltZW5zaW9uIHZhbHVlIGhlcmUsIGFzIHRoZSBjYXJkIGRvZXNuJ3Qgc3VwcG9ydCBjYWxjdWxhdGVkIGJpbmRpbmdzIHlldFxuXHRcdFx0XHRzd2l0Y2ggKGRpbWVuc2lvbi50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGV4dE9ubHlcIjpcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi50ZXh0ISk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJUZXh0TGFzdFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpLFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIHVuZGVmaW5lZDpcblx0XHRcdFx0XHRcdC8vIE5vIHRleHQgYXJyYW5nZW1lbnRcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpLFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRcdG9EYXRhW21lYXN1cmUubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShtZWFzdXJlLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBvRGF0YTtcblx0XHR9KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2NoYXJ0RGF0YWAsIGNoYXJ0RGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcG9wb3ZlciB0byBkaXNwbGF5IHRoZSBLUEkgY2FyZFxuXHQgKiBUaGUgcG9wb3ZlciBhbmQgdGhlIGNvbnRhaW5lZCBjYXJkIGZvciB0aGUgS1BJcyBhcmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuXG5cdCAqIFRoZSBwb3BvdmVyIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBLUElzLCBzbyBpdCdzIGNyZWF0ZWQgb25seSBvbmNlLlxuXHQgKiBAcGFyYW0gb0tQSVRhZyBUaGUgdGFnIHRoYXQgdHJpZ2dlcmVkIHRoZSBwb3BvdmVyIG9wZW5pbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZWQgcG9wb3ZlciBhcyBhIHByb21pc2UuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgZ2V0UG9wb3ZlcihvS1BJVGFnOiBHZW5lcmljVGFnKTogUHJvbWlzZTxQb3BvdmVyPiB7XG5cdFx0aWYgKCF0aGlzLm9Qb3BvdmVyKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRMaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC91aS9pbnRlZ3JhdGlvblwiIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgQ2FyZENsYXNzID0gcGFyYW1zWzBdIGFzIHR5cGVvZiBDYXJkVHlwZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgSG9zdCA9IHBhcmFtc1sxXSBhcyB0eXBlb2YgSG9zdFR5cGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Ib3N0ID0gbmV3IEhvc3QoKTtcblxuXHRcdFx0XHRcdFx0XHRvSG9zdC5hdHRhY2hBY3Rpb24oKG9FdmVudDogSG9zdCRBY3Rpb25FdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUeXBlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInR5cGVcIik7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwYXJhbWV0ZXJzXCIpIGFzIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc1R5cGUgPT09IFwiTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1BhcmFtcy5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvUGFyYW1zLnNlbWFudGljT2JqZWN0LCBvUGFyYW1zLmFjdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZU91dGJvdW5kKG9QYXJhbXMub3V0Ym91bmQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZCA9IG5ldyBDYXJkQ2xhc3Moe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0IGFzIHVua25vd24gYXMgQ29udHJvbCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vUG9wb3ZlciA9IG5ldyBQb3BvdmVyKFwia3BpLVBvcG92ZXJcIiwge1xuXHRcdFx0XHRcdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlbWVudDogXCJBdXRvXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogW3RoaXMub0NhcmRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdG9LUElUYWcuYWRkRGVwZW5kZW50KHRoaXMub1BvcG92ZXIpOyAvLyBUaGUgZmlyc3QgY2xpY2tlZCB0YWcgZ2V0cyB0aGUgcG9wb3ZlciBhcyBkZXBlbmRlbnRcblxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm9Qb3BvdmVyKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgb25LUElQcmVzc2VkKG9LUElUYWc6IEdlbmVyaWNUYWcsIGtwaUlEOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qga3BpRGVmaW5pdGlvbiA9IHRoaXMuYUtQSURlZmluaXRpb25zLmZpbmQoZnVuY3Rpb24gKG9EZWYpIHtcblx0XHRcdFx0cmV0dXJuIChvRGVmIGFzIEFuYWx5dGljYWxLUElEZWZpbml0aW9uKS5pZCA9PT0ga3BpSUQ7XG5cdFx0XHR9KSBhcyBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24pIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblxuXHRcdFx0XHRcdGNvbnN0IHBvcG92ZXIgPSBhd2FpdCB0aGlzLmdldFBvcG92ZXIob0tQSVRhZyk7XG5cdFx0XHRcdFx0Ly8gU2V0IHRoZSBwb3BvdmVyIGFzIG1vZGFsIHdoaWxlIHRoZSBjYXJkIGlzIGxvYWRpbmcgKHNvIHRoYXQgY2FyZCByZW5kZXJpbmcgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgcG9wb3ZlciBhbmQgY2xvc2UgaXQpXG5cdFx0XHRcdFx0cG9wb3Zlci5zZXRNb2RhbCh0cnVlKTtcblxuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRQcmV2aWV3TW9kZShcIkFic3RyYWN0XCIpOyAvLyBEaXNwbGF5IHBsYWNlaG9sZGVycyBpbiB0aGUgY2FyZCB1bnRpbCBkYXRhIGlzIGxvYWRlZFxuXHRcdFx0XHRcdHBvcG92ZXIub3BlbkJ5KG9LUElUYWcsIGZhbHNlKTsgLy8gT3BlbiB0aGUgcG9wb3ZlciBpbW1lZGlhdGVseVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsLCB0cnVlKSxcblx0XHRcdFx0XHRcdHRoaXMubG9hZEtQSUNhcmREYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsKVxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5hdHRhY2hFdmVudE9uY2UoXCJzdGF0ZUNoYW5nZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gT25jZSB0aGUgY2FyZCBoYXMgYmVlbiByZW5kZXJlZCwgc2V0IHRoZSBmb2N1cyBwcm9wZXJseSBhbmQgc2V0IHRoZSBwb3BvdmVyIGFzIG5vbi1tb2RhbFxuXHRcdFx0XHRcdFx0KHRoaXMub0NhcmQuZ2V0Rm9jdXNEb21SZWYoKSBhcyBIVE1MRWxlbWVudCk/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRwb3BvdmVyLnNldE1vZGFsKGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldE1hbmlmZXN0KG9LUElNb2RlbC5nZXRQcm9wZXJ0eShgLyR7a3BpSUR9L21hbmlmZXN0YCkpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0UHJldmlld01vZGUoXCJPZmZcIik7IC8vIERpc3BsYXkgcmVhbCBkYXRhIGluIHRoZSBjYXJkXG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWlDQSxNQUFNQSwwQkFBdUQsR0FBRztJQUMvRCxHQUFHLEVBQUVDLFdBQVcsQ0FBQ0MsS0FBSztJQUN0QixHQUFHLEVBQUVELFdBQVcsQ0FBQ0UsT0FBTztJQUN4QixHQUFHLEVBQUVGLFdBQVcsQ0FBQ0csT0FBTztJQUN4QixHQUFHLEVBQUVILFdBQVcsQ0FBQ0k7RUFDbEIsQ0FBQztFQUVELE1BQU1DLHlCQUFzRCxHQUFHO0lBQzlE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