@sapui5/sap.fe.core 1.124.2 → 1.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +5 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +4 -4
  5. package/src/sap/fe/core/AppComponent.js +2 -2
  6. package/src/sap/fe/core/AppComponent.ts +1 -1
  7. package/src/sap/fe/core/AppStateHandler.js +2 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +1 -1
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/BaseController.ts +1 -1
  11. package/src/sap/fe/core/CommonUtils.js +3 -3
  12. package/src/sap/fe/core/CommonUtils.ts +12 -15
  13. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -3
  15. package/src/sap/fe/core/PageController.js +2 -2
  16. package/src/sap/fe/core/PageController.ts +1 -1
  17. package/src/sap/fe/core/ResourceModel.js +2 -2
  18. package/src/sap/fe/core/ResourceModel.ts +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +172 -0
  20. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  21. package/src/sap/fe/core/TemplateComponent.js +2 -2
  22. package/src/sap/fe/core/TemplateComponent.ts +5 -1
  23. package/src/sap/fe/core/TemplateModel.js +2 -2
  24. package/src/sap/fe/core/TemplateModel.ts +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
  27. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
  33. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  34. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
  39. package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
  43. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  44. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  56. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  57. package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
  58. package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
  59. package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
  60. package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
  61. package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
  62. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/Share.js +4 -4
  64. package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
  65. package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
  66. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
  67. package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
  68. package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
  70. package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
  71. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
  72. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  75. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
  76. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
  79. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
  84. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
  88. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
  89. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
  91. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
  92. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  93. package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
  94. package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
  95. package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
  97. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
  98. package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
  99. package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
  101. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
  102. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
  103. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
  104. package/src/sap/fe/core/converters/ConverterContext.js +4 -2
  105. package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
  106. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  107. package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
  108. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  109. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  110. package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
  111. package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
  113. package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
  114. package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
  115. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  117. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  118. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
  129. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  130. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  131. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  132. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  133. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  137. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  138. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  139. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  140. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  141. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
  142. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
  143. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  144. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  145. package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
  146. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
  147. package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  150. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  151. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  152. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  153. package/src/sap/fe/core/fpm/Component.js +3 -3
  154. package/src/sap/fe/core/fpm/Component.ts +3 -3
  155. package/src/sap/fe/core/fpm/manifest.json +1 -1
  156. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  157. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  158. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  159. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  160. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  161. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  162. package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
  163. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  166. package/src/sap/fe/core/helpers/MetaPath.js +9 -3
  167. package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
  168. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  169. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  170. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  171. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  172. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  173. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  174. package/src/sap/fe/core/library.js +4 -4
  175. package/src/sap/fe/core/library.ts +2 -1
  176. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  177. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  178. package/src/sap/fe/core/messagebundle.properties +8 -57
  179. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_cy.properties +4 -2
  185. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  187. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  188. package/src/sap/fe/core/messagebundle_en.properties +6 -57
  189. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  190. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
  191. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  197. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  199. package/src/sap/fe/core/messagebundle_hu.properties +3 -1
  200. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_iw.properties +3 -1
  203. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  206. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  207. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  211. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  216. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  217. package/src/sap/fe/core/messagebundle_sh.properties +64 -62
  218. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  219. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  220. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  221. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  223. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  224. package/src/sap/fe/core/messagebundle_uk.properties +3 -1
  225. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  226. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  227. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  228. package/src/sap/fe/core/operationsHelper.js +3 -3
  229. package/src/sap/fe/core/operationsHelper.ts +2 -2
  230. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
  231. package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
  232. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  233. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  234. package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
  235. package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
  236. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
  237. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
  238. package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
  239. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
  240. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  241. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  243. package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
  244. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  245. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  246. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
  247. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
  248. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
  249. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  251. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  252. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  253. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  254. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  255. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  256. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  257. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  258. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  259. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  260. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  261. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  262. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  263. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  264. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  265. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  266. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  267. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  268. package/src/sap/fe/core/templating/UIFormatters.js +7 -7
  269. package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
  270. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  271. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
  272. package/src/sap/fe/core/type/Email.js +2 -2
  273. package/src/sap/fe/core/type/Email.ts +1 -1
  274. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  275. package/src/sap/fe/core/type/FiscalDate.ts +1 -1
  276. package/src/sap/fe/core/type/InputMask.js +124 -0
  277. package/src/sap/fe/core/type/InputMask.ts +131 -0
  278. package/ui5.yaml +19 -0
  279. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  280. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
  281. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  282. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  283. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
  284. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
  285. package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
  286. package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
  287. package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
  288. package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
  289. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
  290. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
  291. package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
  292. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
  293. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
  294. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
  295. package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
  296. package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
  297. package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
  298. package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
  299. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
  300. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
@@ -2,10 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText", "sap/m/MessageBox", "sap/m/MessageItem", "sap/m/MessageToast", "sap/m/MessageView", "sap/m/Text", "sap/ui/core/Element", "sap/ui/core/IconPool", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/format/DateFormat", "sap/ui/core/library", "sap/ui/core/message/Message", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (ResourceModelHelper, Bar, Button, Dialog, FormattedText, MessageBox, MessageItem, MessageToast, MessageView, Text, UI5Element, IconPool, Library, Messaging, DateFormat, CoreLib, Message, Filter, FilterOperator, Sorter, JSONModel) {
5
+ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText", "sap/m/MessageBox", "sap/m/MessageItem", "sap/m/MessageToast", "sap/m/MessageView", "sap/m/Text", "sap/m/library", "sap/ui/core/Element", "sap/ui/core/IconPool", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/format/DateFormat", "sap/ui/core/library", "sap/ui/core/message/Message", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (ResourceModelHelper, Bar, Button, Dialog, FormattedText, MessageBox, MessageItem, MessageToast, MessageView, Text, MLib, UI5Element, IconPool, Library, Messaging, DateFormat, CoreLib, Message, Filter, FilterOperator, Sorter, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var getResourceModel = ResourceModelHelper.getResourceModel;
9
+ const ButtonType = MLib.ButtonType;
9
10
  const MessageType = CoreLib.MessageType;
10
11
  let aMessageList = [];
11
12
  let aMessageDataList = [];
@@ -187,6 +188,17 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
187
188
  }
188
189
  return sRetryAfterMessage;
189
190
  }
191
+
192
+ /**
193
+ * Checks if there are any warning or error messages(bound and unbound)..
194
+ *
195
+ * @returns Boolean indicating existence of messages
196
+ */
197
+ function hasTransitionErrorsOrWarnings() {
198
+ return [...getMessages(undefined, true), ...getMessages(true, true)].some(function (message) {
199
+ return message.getType() === "Error" || message.getType() === "Warning";
200
+ });
201
+ }
190
202
  function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow, multi412) {
191
203
  let oMessageTemplate;
192
204
  if (!bStrictHandlingFlow) {
@@ -255,6 +267,13 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
255
267
  oBackButton
256
268
  };
257
269
  }
270
+ function isNonTechnicalMessage(message) {
271
+ const technicalDetails = message.getTechnicalDetails();
272
+ if (technicalDetails && (technicalDetails.originalMessage !== undefined && technicalDetails.originalMessage !== null || technicalDetails.httpStatus !== undefined && technicalDetails.httpStatus !== null) || message.getCode()) {
273
+ return true;
274
+ }
275
+ return false;
276
+ }
258
277
  async function showUnboundMessages(aCustomMessages, oContext, bShowBoundTransition, concurrentEditFlag, control, sActionName, bOnlyForTest, onBeforeShowMessage, viewType) {
259
278
  let aTransitionMessages = this.getMessages();
260
279
  let sHighestPriority;
@@ -266,6 +285,10 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
266
285
  })];
267
286
  let showMessageDialog = false,
268
287
  showMessageBox = false;
288
+ const isNonTechnicalMessageFilter = new Filter({
289
+ path: "",
290
+ test: isNonTechnicalMessage
291
+ });
269
292
  if (bShowBoundTransition) {
270
293
  aTransitionMessages = aTransitionMessages.concat(getMessages(true, true));
271
294
  // we only want to show bound transition messages not bound state messages hence add a filter for the same
@@ -298,12 +321,15 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
298
321
  test: fnCheckControlIdInDialog,
299
322
  caseSensitive: true
300
323
  }));
324
+ aFilters.push(isNonTechnicalMessageFilter);
301
325
  } else {
302
326
  // only unbound messages have to be shown so add filter accordingly
303
327
  aFilters.push(new Filter({
304
- path: "target",
305
- operator: FilterOperator.EQ,
306
- value1: ""
328
+ filters: [new Filter({
329
+ path: "",
330
+ test: message => message.getTargets().length === 0 || message.getTargets()[0] === ""
331
+ }), isNonTechnicalMessageFilter],
332
+ and: true
307
333
  }));
308
334
  }
309
335
  if (aCustomMessages && aCustomMessages.length) {
@@ -438,19 +464,17 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
438
464
  oDialog.removeAllContent();
439
465
  oDialog.addContent(oMessageObject.oMessageView);
440
466
  if (bHasEtagMessage) {
441
- sap.ui.require(["sap/m/ButtonType"], function (ButtonTypeType) {
442
- oDialog.setBeginButton(new Button({
443
- press: function () {
444
- dialogCloseHandler();
445
- if (oContext.hasPendingChanges()) {
446
- oContext.getBinding().resetChanges();
447
- }
448
- oContext.refresh();
449
- },
450
- text: oResourceBundle.getText("C_COMMON_SAPFE_REFRESH"),
451
- type: ButtonTypeType.Emphasized
452
- }));
453
- });
467
+ oDialog.setBeginButton(new Button({
468
+ press: function () {
469
+ dialogCloseHandler();
470
+ if (oContext.hasPendingChanges()) {
471
+ oContext.getBinding().resetChanges();
472
+ }
473
+ oContext.refresh();
474
+ },
475
+ text: oResourceBundle.getText("C_COMMON_SAPFE_REFRESH"),
476
+ type: ButtonType.Emphasized
477
+ }));
454
478
  } else {
455
479
  oDialog.destroyBeginButton();
456
480
  }
@@ -948,9 +972,8 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
948
972
  }
949
973
  const listBinding = oMessageModel.bindList("/");
950
974
  listBinding.filter(new Filter({
951
- path: "target",
952
- operator: FilterOperator.StartsWith,
953
- value1: sPathToBeRemoved
975
+ path: "",
976
+ test: message => message.getTargets().some(target => target.startsWith(sPathToBeRemoved))
954
977
  }));
955
978
  return listBinding.getCurrentContexts().map(function (oContext) {
956
979
  return oContext.getObject();
@@ -990,13 +1013,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
990
1013
  }
991
1014
  }
992
1015
  //Filtering messages again here to avoid showing pure technical messages raised by the model
993
- const backendMessages = [];
994
- for (i = 0; i < aTransitionMessages.length; i++) {
995
- const technicalDetails = aTransitionMessages[i].getTechnicalDetails();
996
- if (technicalDetails && (technicalDetails.originalMessage !== undefined && technicalDetails.originalMessage !== null || technicalDetails.httpStatus !== undefined && technicalDetails.httpStatus !== null) || aTransitionMessages[i].getCode()) {
997
- backendMessages.push(aTransitionMessages[i]);
998
- }
999
- }
1016
+ const backendMessages = aTransitionMessages.filter(isNonTechnicalMessage);
1000
1017
  return backendMessages;
1001
1018
  }
1002
1019
  function removeTransitionMessages(bBoundMessages, sPathToBeRemoved) {
@@ -1212,6 +1229,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1212
1229
  fetchColumnInfo: fetchColumnInfo,
1213
1230
  getTableFirstColBindingContextForTextAnnotation: getTableFirstColBindingContextForTextAnnotation,
1214
1231
  getMessageRank: getMessageRank,
1232
+ hasTransitionErrorsOrWarnings: hasTransitionErrorsOrWarnings,
1215
1233
  fnCallbackSetGroupName: fnCallbackSetGroupName,
1216
1234
  getTableFirstColValue: getTableFirstColValue,
1217
1235
  setGroupNameOPDisplayMode: setGroupNameOPDisplayMode,
@@ -1222,4 +1240,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1222
1240
  };
1223
1241
  return messageHandling;
1224
1242
  }, false);
1225
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInNldFRhcmdldHMiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJzSGlnaGVzdFByaW9yaXR5Iiwic0hpZ2hlc3RQcmlvcml0eVRleHQiLCJhRmlsdGVycyIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiZ2V0Q29kZSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiZ2V0SWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0TWVzc2FnZSIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZVR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJvVmlld0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9wTGF5b3V0IiwiZ2V0Q29udGVudCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsImdldENvbnRleHRzIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93IiwiZ2V0UGVyc2lzdGVudCIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwib1RhcmdldGVkQ29udHJvbCIsInNNZXNzYWdlU3VidGl0bGUiLCJzUm93U3VidGl0bGVWYWx1ZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsIm9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwic1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVGaXJzdENvbFZhbHVlIiwib0NvbHVtbkluZm8iLCJkZXRlcm1pbmVDb2x1bW5JbmZvIiwic0NvbHVtbkluZGljYXRvciIsInNDb2x1bW5WYWx1ZSIsIm9CaW5kaW5nQ29udGV4dCIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1RleHRBbm5vdGF0aW9uUGF0aCIsInNUZXh0QXJyYW5nZW1lbnQiLCJzQ29kZVZhbHVlIiwic1RleHRWYWx1ZSIsInNDb21wdXRlZFZhbHVlIiwic2xpY2UiLCJzRW51bU51bWJlciIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJnZXRUYXJnZXRzIiwic3BsaXQiLCJwb3AiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwib0NvbHVtbiIsImtleSIsImF2YWlsYWJpbGl0eSIsIm9QYXJlbnRDb250cm9sIiwicmVzb3VyY2VCdW5kbGUiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsImxpc3RCaW5kaW5nIiwiU3RhcnRzV2l0aCIsIm1hcCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYmFja2VuZE1lc3NhZ2VzIiwidGVjaG5pY2FsRGV0YWlscyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiZm5GaWx0ZXJVcG9uSWRzIiwiYSIsImIiLCJvQ29udGV4dFBhdGgiLCJmblJlZ0V4cGVzY2FwZSIsInMiLCJyZXBsYWNlIiwiY29udGV4dFBhdGhUb0VzY2FwZSIsIlJlZ0V4cCIsInNUYWJsZVRhcmdldENvbFByb3BlcnR5Iiwib1RhYmxlVGFyZ2V0Q29sIiwiZ2V0Q29sdW1ucyIsImNvbHVtbiIsImdldFByb3BlcnR5S2V5Iiwib0N1c3RvbUNvbHVtbiIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldENvbHVtbnNGb3IiLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsInNvbWUiLCJvVGFibGVDb2xJbmZvIiwib0l0ZW0iLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwic2VjdGlvbiIsImJNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYklzT3JwaGFuRWxlbWVudCIsImFFbGVtZW50cyIsIm9QYXJlbnRFbGVtZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tTWVzc2FnZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uVHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvbWVzc2FnZS9NZXNzYWdlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiB1bmtub3duW10gPSBbXTtcbmxldCBhTWVzc2FnZURhdGFMaXN0OiBNZXNzYWdlW10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogRnVuY3Rpb25bXSA9IFtdO1xubGV0IG9EaWFsb2c6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VXaXRoSGVhZGVyID0gTWVzc2FnZSAmIHtcblx0aGVhZGVyTmFtZT86IHN0cmluZztcblx0dGFyZ2V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dGFibGVIZWFkZXI/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYm9vbGVhbiwgYlRyYW5zaXRpb25Pbmx5PzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gTWVzc2FnZVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10gfCB1bmRlZmluZWQsXG5cdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdG9Db250cm9sPzogQ29udHJvbCxcblx0XHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpID0+IFByb21pc2U8RGlhbG9nIHwgYm9vbGVhbj47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiB0cnVlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKFxuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRcdGlzTXVsdGk0MTI/OiBib29sZWFuXG5cdCkgPT4ge1xuXHRcdG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdFx0b0JhY2tCdXR0b246IEJ1dHRvbjtcblx0fTtcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiAob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB2b2lkO1xuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogKG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sKSA9PiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRnZXRNZXNzYWdlUmFuazogKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpID0+IG51bWJlcjtcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pID0+IHZvaWQ7XG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogKFxuXHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHk6IHN0cmluZyxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRcdHNUZXh0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0XHRzVGV4dEFycmFuZ2VtZW50OiBzdHJpbmdcblx0KSA9PiBzdHJpbmc7XG5cdHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGU6IChhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldykgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdKTogQ29yZUxpYi5NZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gb01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhcblx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRtdWx0aTQxMj86IGJvb2xlYW5cbik6IHtcblx0b01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblx0b0JhY2tCdXR0b246IEJ1dHRvbjtcbn0ge1xuXHRsZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQmluZGluZyA9ICd7PSAke2Rlc2NyaXB0aW9ufSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXREZXNjcmlwdGlvbigpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcgPVxuXHRcdFx0J3s9ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0Z3JvdXBOYW1lOiBcIntoZWFkZXJOYW1lfVwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uQmluZGluZyArIHRlY2huaWNhbERldGFpbHNCaW5kaW5nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChtdWx0aTQxMikge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIntkZXNjcmlwdGlvbn1cIixcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGVcblx0XHR9XG5cdH0pO1xuXHRvTWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG9NZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRvTWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcbn07XG5hc3luYyBmdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdGNvbnRyb2w/OiBDb250cm9sLFxuXHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHR2aWV3VHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTxEaWFsb2cgfCBib29sZWFuPiB7XG5cdGxldCBhVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRsZXQgaW5kZXggPSBJbmZpbml0eSxcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChhQ29udHJvbElkc1swXSkgYXMgQ29udHJvbDtcblx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9XG5cdFx0XHRcdFx0b0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2dcblx0XHRcdFx0XHRcdD8gKGVycm9yRmllbGRDb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBDdXN0b21NZXNzYWdlKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRjb25zdCBiSGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkoTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISwgY29uY3VycmVudEVkaXRGbGFnKTtcblxuXHRpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIpIHtcblx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggIT09IDApIHtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdH1cblx0bGV0IHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRsZXQgYU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdID0gW107XG5cdGlmIChzaG93TWVzc2FnZURpYWxvZyB8fCAoIXNob3dNZXNzYWdlQm94ICYmICFvbkJlZm9yZVNob3dNZXNzYWdlKSkge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cblx0XHRcdC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRcdGNvbnN0IGFNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRhQ3VycmVudENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkpKSB7XG5cdFx0XHRcdGV4aXN0aW5nTWVzc2FnZXMgPSBvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9VbmlxdWVPYmo6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5nZXRJZCgpXSAmJiAob1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gPSB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0fVxuXHR9XG5cdGlmIChvbkJlZm9yZVNob3dNZXNzYWdlKSB7XG5cdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0geyBzaG93TWVzc2FnZUJveCwgc2hvd01lc3NhZ2VEaWFsb2cgfTtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSBvbkJlZm9yZVNob3dNZXNzYWdlKGFUcmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VCb3g7XG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpIHtcblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5maWx0ZXJlZE1lc3NhZ2VzID8gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgOiBhTW9kZWxEYXRhQXJyYXk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldE1lc3NhZ2UoKSk7XG5cdFx0XHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFUcmFuc2l0aW9uTWVzc2FnZXMpO1xuXHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZyAmJiBhTW9kZWxEYXRhQXJyYXkubGVuZ3RoKSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUoYU1vZGVsRGF0YUFycmF5LCBjb250cm9sLCBzQWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpOyAvLyBzZXQgdGhlIG1lc3NhZ2VzIGhlcmUgc28gdGhhdCBpZiBhbnkgb2YgdGhlbSBhcmUgZmlsdGVyZWQgZm9yIEFQRCwgdGhleSBhcmUgZmlsdGVyZWQgaGVyZSBhcyB3ZWxsLlxuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPERpYWxvZz4oZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogRGlhbG9nKSA9PiB2b2lkKSB7XG5cdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlIShvTWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdGNvbnN0IG9Tb3J0ZXIgPSBuZXcgU29ydGVyKFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAob2JqMTogTWVzc2FnZSwgb2JqMjogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdFx0XHRjb25zdCByYW5rQiA9IGdldE1lc3NhZ2VSYW5rKG9iajIpO1xuXG5cdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHR9KTtcblxuXHRcdFx0KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldy5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZykuc29ydChvU29ydGVyKTtcblxuXHRcdFx0b0RpYWxvZyA9XG5cdFx0XHRcdG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKVxuXHRcdFx0XHRcdD8gb0RpYWxvZ1xuXHRcdFx0XHRcdDogbmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1vZGVsRGF0YUFycmF5KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIzNy41ZW1cIixcblx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJlc29sdmVGdW5jdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0oKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgfSk7XG5cdFx0XHRvRGlhbG9nLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRpZiAoYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL0J1dHRvblR5cGVcIl0sIGZ1bmN0aW9uIChCdXR0b25UeXBlVHlwZTogdHlwZW9mIEJ1dHRvblR5cGUpIHtcblx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGVUeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0fVxuXHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHQoKG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgQmFyKS5nZXRDb250ZW50TWlkZGxlKClbMF0gYXMgVGV4dCkuc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdGlmIChiT25seUZvclRlc3QgPT09IHRydWUpIHtcblx0XHRcdFx0cmVzb2x2ZShvRGlhbG9nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdO1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyAmJiAhYU1lc3NhZ2VMaXN0LmluY2x1ZGVzKG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZT8ubWVzc2FnZSkpIHx8XG5cdFx0XHRcdChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZylcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAobWVzc2FnZVRlY2huaWNhbERldGFpbHMgJiYgKCFzaG93TWVzc2FnZVBhcmFtZXRlcnMgfHwgIXNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpKSB7XG5cdFx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gobWVzc2FnZVRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlPy5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYDxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUob01lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKlxuICogQHBhcmFtIG9FbGVtXG4gKiBAcGFyYW0gYU1vZGVsRGF0YVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZUxSVGFibGUob0VsZW06IENvbnRyb2wgfCB1bmRlZmluZWQsIGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0gJiYgKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7KG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgYWxsUm93Q29udGV4dHMgPSBvUm93QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAke3Jvd0NvbnRleHQuZ2V0UGF0aCgpfS9gO1xuXHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gJiYgcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXTtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5Qcm9wZXJ0eU5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xQcm9wZXJ0eShvRWxlbSwgYU1vZGVsRGF0YSwgY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZSB9ID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sSW5mbyhvRWxlbSBhcyBNRENUYWJsZSwgY29sdW1uUHJvcGVydHlOYW1lKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRhcmdldCBoYXMgc29tZSBjb2x1bW4gbmFtZSBhbmQgY29sdW1uIGlzIHZpc2libGUgaW4gVUlcblx0XHRcdFx0XHRpZiAoY29sdW1uUHJvcGVydHlOYW1lICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGhlYWRlciB3aWxsIGJlIHJvdyBJZGVudGlmaWVyLCBpZiBmb3VuZCBmcm9tIGFib3ZlIGNvZGUgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSB0YWJsZSBuYW1lXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IHJvd0lkZW50aWZpZXIgPyBgICR7cm93SWRlbnRpZmllcn1gIDogKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgY29sdW1uIGRhdGEgbm90IGZvdW5kIChtYXkgYmUgdGhlIGNvbHVtbiBpcyBoaWRkZW4pLCBhZGQgZ3JvdXBpbmcgYXMgTGFzdCBBY3Rpb25cblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0gYU1vZGVsRGF0YSBNZXNzYWdlIE9iamVjdFxuICogQHBhcmFtIHNBY3Rpb25OYW1lICBBY3Rpb24gbmFtZVxuICogQHBhcmFtIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldyk6IHZvaWQge1xuXHRjb25zdCBvVmlld0NvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvcExheW91dDogQ29udHJvbCA9IGNvbnRyb2w/LmdldENvbnRlbnQgJiYgY29udHJvbD8uZ2V0Q29udGVudCgpWzBdO1xuXHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdGlmIChvcExheW91dCkge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvcExheW91dCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRzdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdFx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGxldCBjaGlsZFRhYmxlRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0b0VsZW0uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goKG9FbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3Jvd0lkZW50aWZpZXJ9LCAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhlYWRlck5hbWUgPSBvRWxlbS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJOYW1lID0gb1N1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7aGVhZGVyTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdC8vIGNoZWNrIGlmIE9QIGNvbnRleHQgcGF0aCBpcyBwYXJ0IG9mIHRhcmdldCwgc2V0IExhc3QgQWN0aW9uIGFzIGdyb3VwIG5hbWVcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0Y29uc3Qgc0xhc3RBY3Rpb25UZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0xBU1RfQUNUSU9OXCIpO1xuXHRyZXR1cm4gc0FjdGlvbk5hbWUgPyBgJHtzTGFzdEFjdGlvblRleHR9OiAke3NBY3Rpb25OYW1lfWAgOiBcIlwiO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnaXZlIHJhbmsgYmFzZWQgb24gTWVzc2FnZSBHcm91cC9IZWFkZXIgbmFtZSwgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBTb3J0aW5nIG1lc3NhZ2VzIGluIE1lc3NhZ2UgZGlhbG9nXG4gKiBMYXN0IEFjdGlvbiBzaG91bGQgYmUgc2hvd24gYXQgdG9wLCBuZXh0IFJvdyBJZCBhbmQgbGFzdCBHZW5lcmFsLlxuICpcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gMztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMjtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICpcbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gYklzR2VuZXJhbEdyb3VwTmFtZVxuICovXG5jb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBzZXRTZWN0aW9uTmFtZUluR3JvdXBcbiAqIEBwYXJhbSBmblNldEdyb3VwTmFtZVxuICogQHJldHVybnMgVGFibGUgaW5mbyBhbmQgU3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IGJvb2xlYW4sXG5cdGZuU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuKTogeyBvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlOyBzdWJUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB9IHtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUFuZFRhcmdldEluZm8ob1RhYmxlLCBhTWVzc2FnZSwgb0VsZW1lbnQsIG9Sb3dCaW5kaW5nKTtcblx0b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciA9IG9UYWJsZS5nZXRIZWFkZXIoKTtcblxuXHRsZXQgc0NvbnRyb2xJZCwgYklzQ3JlYXRpb25Sb3c7XG5cdGlmICghb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KSB7XG5cdFx0c0NvbnRyb2xJZCA9IGFNZXNzYWdlLmdldENvbnRyb2xJZHMoKS5maW5kKGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xJblRhYmxlKG9UYWJsZSwgc0lkKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChzQ29udHJvbElkKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdGJJc0NyZWF0aW9uUm93ID0gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sKTtcblx0fVxuXG5cdGlmICghb1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0Ly8gaWYgdGhlIGNvbHVtbiBpcyBub3QgcHJlc2VudCBvbiBVSSBvciB0aGUgdGFyZ2V0IGRvZXMgbm90IGhhdmUgYSB0YWJsZSBmaWVsZCBpbiBpdCwgdXNlIExhc3QgQWN0aW9uIGZvciBncm91cGluZ1xuXHRcdGlmIChhTWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgJiYgc0FjdGlvbk5hbWUpIHtcblx0XHRcdGZuU2V0R3JvdXBOYW1lKGFNZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdWJUaXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlU3VidGl0bGUoXG5cdFx0YU1lc3NhZ2UsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRvVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3dcblx0KTtcblxuXHRyZXR1cm4geyBvVGFyZ2V0VGFibGVJbmZvLCBzdWJUaXRsZSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgdGhlIHN1YnRpdGxlIGJhc2VkIG9uIFRhYmxlIFJvdy9Db2x1bW4gZGF0YS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0c1xuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gYklzQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBvVGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IENvbnRleHRbXSxcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZXNzYWdlU3VidGl0bGU7XG5cdGxldCBzUm93U3VidGl0bGVWYWx1ZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1RhYmxlKTtcblx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdGNvbnN0IG9Db2xGcm9tVGFibGVTZXR0aW5ncyA9IG1lc3NhZ2VIYW5kbGluZy5mZXRjaENvbHVtbkluZm8obWVzc2FnZSwgb1RhYmxlKTtcblx0aWYgKGJJc0NyZWF0aW9uUm93IHx8IG9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSkge1xuXHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA/IHNUYWJsZVRhcmdldENvbE5hbWUgOiAob0NvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdFx0XHRvVGFibGUsXG5cdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggPSBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHRzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAob1RhYmxlUm93QmluZGluZ0NvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIHNldCBSb3cgc3VidGl0bGUgdGV4dFxuXHRcdFx0aWYgKG9UYXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IChvVGFyZ2V0ZWRDb250cm9sIGFzIEZpZWxkQVBJKS5nZXRWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVGaXJzdENvbFZhbHVlKFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHksXG5cdFx0XHRcdFx0b1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5ncywgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW3NSb3dTdWJ0aXRsZVZhbHVlLCBzVGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtcblx0XHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZVxuXHRcdFx0XHRdKX0sICR7b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlfWA7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiVW5rbm93blwiKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbc1Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3NSb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc01lc3NhZ2VTdWJ0aXRsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7IC8vIG11c3QgYmUgYW4gT0RhdGFNZXRhTW9kZWwgdG8gbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbD8uZ2V0TWV0YVBhdGgob1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdmFsdWUgb2YgZmlyc3QgQ29sdW1uIG9mIFRhYmxlLCB3aXRoIGl0cyB0ZXh0IEFycmFuZ2VtZW50LlxuICpcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUZXh0QW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBzVGV4dEFycmFuZ2VtZW50XG4gKiBAcmV0dXJucyBDb2x1bW4gVmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0NvZGVWYWx1ZSA9IG9UYWJsZVJvd0NvbnRleHQuZ2V0T2JqZWN0KHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpO1xuXHRsZXQgc1RleHRWYWx1ZTtcblx0bGV0IHNDb21wdXRlZFZhbHVlID0gc0NvZGVWYWx1ZTtcblx0aWYgKHNUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRpZiAoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvLyB0aGUgdGFyZ2V0IHByb3BlcnR5IGlzIHJlcGxhY2VkIHdpdGggdGhlIHRleHQgYW5ub3RhdGlvbiBwYXRoXG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5zbGljZSgwLCBzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IHNUYWJsZUZpcnN0Q29sUHJvcGVydHkuY29uY2F0KHNUZXh0QW5ub3RhdGlvblBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RleHRBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0c1RleHRWYWx1ZSA9IG9UYWJsZVJvd0NvbnRleHQuZ2V0T2JqZWN0KHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpO1xuXHRcdGlmIChzVGV4dFZhbHVlKSB7XG5cdFx0XHRpZiAoc1RleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHRjb25zdCBzRW51bU51bWJlciA9IHNUZXh0QXJyYW5nZW1lbnQuc2xpY2Uoc1RleHRBcnJhbmdlbWVudC5pbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0XHRzd2l0Y2ggKHNFbnVtTnVtYmVyKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRPbmx5XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNUZXh0VmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dEZpcnN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dExhc3RcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c0NvZGVWYWx1ZX0gKCR7c1RleHRWYWx1ZX0pYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0U2VwYXJhdGVcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gc0NvZGVWYWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c1RleHRWYWx1ZX0gKCR7c0NvZGVWYWx1ZX0pYDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNDb21wdXRlZFZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbHVtbiBpbmZvIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGUgbWVzc2FnZSBwb3BvdmVyLlxuICpcbiAqIEBwYXJhbSBvTWVzc2FnZSBNZXNzYWdlIG9iamVjdFxuICogQHBhcmFtIG9UYWJsZSBNZGNUYWJsZVxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29sdW1uIGluZm8uXG4gKi9cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBvQ29sdW1uLmtleS5zcGxpdChcIjo6XCIpLnBvcCgpID09PSBzQ29sTmFtZUZyb21NZXNzYWdlT2JqO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBDb2x1bW5JbmZvVHlwZSB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IHsgc0NvbHVtbkluZGljYXRvcjogXCJcIiwgc0NvbHVtblZhbHVlOiBcIlwiIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNDb250cm9sSWRcbiAqIEByZXR1cm5zIFRydWUgaWYgY29udHJvbCBpcyBwYXJ0IG9mIHRhYmxlLlxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xJblRhYmxlKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZyk6IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdGlmIChvQ29udHJvbCAmJiAhb0NvbnRyb2wuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpICYmICFvQ29udHJvbC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBvRWxlbS5nZXRJZCgpID09PSBvQ29udHJvbC5nZXRJZCgpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0bGV0IG9QYXJlbnRDb250cm9sID0gb0NvbnRyb2w/LmdldFBhcmVudCgpO1xuXHR3aGlsZSAoXG5cdFx0b1BhcmVudENvbnRyb2wgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLm0uQ29sdW1uTGlzdEl0ZW1cIilcblx0KSB7XG5cdFx0b1BhcmVudENvbnRyb2wgPSBvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdHJldHVybiAhIW9QYXJlbnRDb250cm9sICYmIG9QYXJlbnRDb250cm9sLmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIik7XG5cdFx0Y2FzZSBcIlN1Y2Nlc3NcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfU1VDQ0VTU1wiKTtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpO1xuXHR9XG59XG5mdW5jdGlvbiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk6IHZvaWQge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXModHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsOiBNZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiBNZXNzYWdlW10ge1xuXHRpZiAoc1BhdGhUb0JlUmVtb3ZlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRjb25zdCBsaXN0QmluZGluZyA9IG9NZXNzYWdlTW9kZWwuYmluZExpc3QoXCIvXCIpO1xuXG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdHZhbHVlMTogc1BhdGhUb0JlUmVtb3ZlZFxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCByZWxldmFudCBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gYkJvdW5kTWVzc2FnZXMgVG8gZ2V0IG9ubHkgYm91bmQgbWVzc2FnZXNcbiAqIEBwYXJhbSBiVHJhbnNpdGlvbk9ubHkgVG8gZ2V0IG9ubHkgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICogQHBhcmFtIHNQYXRoVG9CZVJlbW92ZWQgRmlsdGVyIG91dCBib3VuZCBtZXNzYWdlcyB3aXRoIHBhdGhcbiAqIEByZXR1cm5zIE1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seSA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cdGxldCBhTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0uZ2V0UGVyc2lzdGVudCgpKSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKSB8fFxuXHRcdFx0XHQoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSB8fCBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdID09PSBcIlwiKSkpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzLnB1c2goYU1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0Q29kZSgpID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKSAhPT0gXCJcIiAmJlxuXHRcdFx0IWFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpLmluY2x1ZGVzKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uc2V0TWVzc2FnZShcblx0XHRcdFx0YFxcbiR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpfSR7YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCl9YFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0Ly9GaWx0ZXJpbmcgbWVzc2FnZXMgYWdhaW4gaGVyZSB0byBhdm9pZCBzaG93aW5nIHB1cmUgdGVjaG5pY2FsIG1lc3NhZ2VzIHJhaXNlZCBieSB0aGUgbW9kZWxcblx0Y29uc3QgYmFja2VuZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKFxuXHRcdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0KCh0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHRcdCh0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0Q29kZSgpXG5cdFx0KSB7XG5cdFx0XHRiYWNrZW5kTWVzc2FnZXMucHVzaChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9PYmplY3RQYWdlTGF5b3V0IFRoZSBvYmplY3RQYWdlTGF5b3V0IG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZpc2libGUgc2VjdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sIHwgT2JqZWN0UGFnZUxheW91dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRyZXR1cm4gKG9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCkuZmlsdGVyKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRyZXR1cm4gb1NlY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBjb250cm9sIGlkcyBmcm9tIG1lc3NhZ2UgYXJlIGEgcGFydCBvZiBhIGdpdmVuIHN1YnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBvTWVzc2FnZU9iamVjdFxuICogQHJldHVybnMgU3ViU2VjdGlvbiBtYXRjaGluZyBjb250cm9sIGlkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcik6IFVJNUVsZW1lbnRbXSB7XG5cdHJldHVybiBzdWJTZWN0aW9uXG5cdFx0LmZpbmRFbGVtZW50cyh0cnVlLCAob0VsZW0pID0+IHtcblx0XHRcdHJldHVybiBmbkZpbHRlclVwb25JZHMob01lc3NhZ2VPYmplY3QuZ2V0Q29udHJvbElkcygpLCBvRWxlbSk7XG5cdFx0fSlcblx0XHQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0Ly8gY29udHJvbHMgYXJlIHNvcnRlZCBpbiBvcmRlciB0byBoYXZlIHRoZSB0YWJsZSBvbiB0b3Agb2YgdGhlIGFycmF5XG5cdFx0XHQvLyBpdCB3aWxsIGhlbHAgdG8gY29tcHV0ZSB0aGUgc3VidGl0bGUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gdGhlIHR5cGUgb2YgcmVsYXRlZCBjb250cm9sc1xuXHRcdFx0aWYgKGEuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAhYi5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAxO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZUNvbFByb3BlcnR5KG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBzdHJpbmcgfCBSZWdFeHApOiBzdHJpbmcge1xuXHQvL3RoaXMgZnVuY3Rpb24gZXNjYXBlcyBhIHN0cmluZyB0byB1c2UgaXQgYXMgYSByZWdleFxuXHRjb25zdCBmblJlZ0V4cGVzY2FwZSA9IGZ1bmN0aW9uIChzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuXHR9O1xuXHQvLyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBhdGggb2YgdGhlIG1lc3NhZ2Ugd2UgcmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWUuXG5cdC8vIHRvIGFjaGlldmUgaXQgd2UgcmVtb3ZlIHRoZSBiaW5kaW5nQ29udGV4dCBwYXRoIGFuZCB0aGUgcm93IGJpbmRpbmcgcGF0aCBmcm9tIHRoZSB0YXJnZXRcblx0aWYgKCFvQ29udGV4dFBhdGgpIHtcblx0XHRjb25zdCBjb250ZXh0UGF0aFRvRXNjYXBlID0gYCR7b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHsob1RhYmxlIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0b0NvbnRleHRQYXRoID0gbmV3IFJlZ0V4cChgJHtmblJlZ0V4cGVzY2FwZShjb250ZXh0UGF0aFRvRXNjYXBlKX1cXFxcKC4qXFxcXCkvYCk7XG5cdH1cblx0cmV0dXJuIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5yZXBsYWNlKG9Db250ZXh0UGF0aCwgXCJcIik7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IG1hdGNoZXMgd2l0aCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIHRhcmdldCBvZiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcbik6IFRhcmdldFRhYmxlSW5mb1R5cGUge1xuXHRjb25zdCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlLCBvTWVzc2FnZU9iamVjdCk7XG5cdGNvbnN0IG9UYWJsZUNvbEluZm8gPSBnZXRUYWJsZUNvbEluZm8ob1RhYmxlLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSk7XG5cdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50Py5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHQ/IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpXG5cdFx0OiAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHRcdH0pXG5cdH07XG5cdHJldHVybiBvVGFyZ2V0VGFibGVJbmZvO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gYUNvbnRyb2xJZHNcbiAqIEBwYXJhbSBvSXRlbVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIG9uZSBvZiB0aGUgY29udHJvbHNcbiAqL1xuZnVuY3Rpb24gZm5GaWx0ZXJVcG9uSWRzKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGFDb250cm9sSWRzLnNvbWUoZnVuY3Rpb24gKHNDb250cm9sSWQpIHtcblx0XHRpZiAoc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgZ3JvdXAgbmFtZSBoYXZpbmcgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBzZWN0aW9uXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIGJNdWx0aXBsZVN1YlNlY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFRhYmxlSW5mb1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIEdyb3VwIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUoXG5cdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0c2VjdGlvbi5nZXRUaXRsZSgpICtcblx0XHQoc3ViU2VjdGlvbi5nZXRUaXRsZSgpICYmIGJNdWx0aXBsZVN1YlNlY3Rpb25zID8gYCwgJHtzdWJTZWN0aW9uLmdldFRpdGxlKCl9YCA6IFwiXCIpICtcblx0XHQob1RhcmdldFRhYmxlSW5mbyAmJiBvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyXG5cdFx0XHQ/IGAsICR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyfWBcblx0XHRcdDogXCJcIilcblx0KTtcbn1cblxuZnVuY3Rpb24gYklzT3JwaGFuRWxlbWVudChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pOiBib29sZWFuIHtcblx0cmV0dXJuICFhRWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUE4Q0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsSUFBSUUsWUFBdUIsR0FBRyxFQUFFO0VBQ2hDLElBQUlDLGdCQUEyQixHQUFHLEVBQUU7RUFDcEMsSUFBSUMsaUJBQTZCLEdBQUcsRUFBRTtFQUN0QyxJQUFJQyxPQUFlO0VBQ25CLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFlBQXlCO0VBd0g3QixTQUFTQyx3QkFBd0IsR0FBVztJQUMzQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWSxDQUFDQyxTQUFrRCxFQUFVO01BQ2pGLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBUSxHQUN0QixNQUFNLEdBQ05ELFNBQVMsQ0FBQ0MsUUFBUSxH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
1243
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsIk1lc3NhZ2VUeXBlIiwiQ29yZUxpYiIsImFNZXNzYWdlTGlzdCIsImFNZXNzYWdlRGF0YUxpc3QiLCJhUmVzb2x2ZUZ1bmN0aW9ucyIsIm9EaWFsb2ciLCJvQmFja0J1dHRvbiIsIm9NZXNzYWdlVmlldyIsImZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscyIsInNQcmV2aW91c0dyb3VwTmFtZSIsImluc2VydERldGFpbCIsIm9Qcm9wZXJ0eSIsInByb3BlcnR5Iiwic3Vic3RyaW5nIiwiTWF0aCIsIm1heCIsImxhc3RJbmRleE9mIiwiaW5zZXJ0R3JvdXBOYW1lIiwic0hUTUwiLCJncm91cE5hbWUiLCJnZXRQYXRocyIsInNURCIsImZvckVhY2giLCJmbkZvcm1hdERlc2NyaXB0aW9uIiwiZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5IiwiYU1lc3NhZ2VzIiwic01lc3NhZ2VQcmlvcml0eSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJzUmV0cnlBZnRlck1lc3NhZ2UiLCJyZXRyeUFmdGVyIiwiZFJldHJ5QWZ0ZXIiLCJvRGF0ZUZvcm1hdCIsImdldEZ1bGxZZWFyIiwiRGF0ZUZvcm1hdCIsImdldERhdGVUaW1lSW5zdGFuY2UiLCJwYXR0ZXJuIiwiZm9ybWF0IiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MiLCJnZXRNZXNzYWdlcyIsInVuZGVmaW5lZCIsInNvbWUiLCJtZXNzYWdlIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwiYlN0cmljdEhhbmRsaW5nRmxvdyIsIm11bHRpNDEyIiwib01lc3NhZ2VUZW1wbGF0ZSIsImRlc2NyaXB0aW9uQmluZGluZyIsInRlY2huaWNhbERldGFpbHNCaW5kaW5nIiwiTWVzc2FnZUl0ZW0iLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsInNldEdyb3VwSXRlbXMiLCJCdXR0b24iLCJpY29uIiwiSWNvblBvb2wiLCJnZXRJY29uVVJJIiwidmlzaWJsZSIsInByZXNzIiwibmF2aWdhdGVCYWNrIiwic2V0TW9kZWwiLCJpc05vblRlY2huaWNhbE1lc3NhZ2UiLCJ0ZWNobmljYWxEZXRhaWxzIiwib3JpZ2luYWxNZXNzYWdlIiwiZ2V0Q29kZSIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwiY29udHJvbCIsInNBY3Rpb25OYW1lIiwiYk9ubHlGb3JUZXN0Iiwib25CZWZvcmVTaG93TWVzc2FnZSIsInZpZXdUeXBlIiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJjYXNlU2Vuc2l0aXZlIiwiZmlsdGVycyIsImdldFRhcmdldHMiLCJhbmQiLCJtZXNzYWdlQ29kZSIsImNvZGUiLCJNZXNzYWdlIiwidGV4dCIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiYU1vZGVsRGF0YUFycmF5Iiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiY3VycmVudENvbnRleHQiLCJleGlzdGluZ01lc3NhZ2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YSIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJnZXRJZCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJnZXRNZXNzYWdlIiwibWVzc2FnZUhhbmRsaW5nIiwidXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSIsImZuR2V0TWVzc2FnZVN1YnRpdGxlIiwib01lc3NhZ2VPYmplY3QiLCJvU29ydGVyIiwiU29ydGVyIiwib2JqMSIsIm9iajIiLCJyYW5rQSIsImdldE1lc3NhZ2VSYW5rIiwicmFua0IiLCJnZXRCaW5kaW5nIiwic29ydCIsImlzT3BlbiIsInJlc2l6YWJsZSIsImVuZEJ1dHRvbiIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJjbG9zZU9uTmF2aWdhdGlvbiIsImFmdGVyQ2xvc2UiLCJpdGVtIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJvVmlld0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9wTGF5b3V0IiwiZ2V0Q29udGVudCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsImdldENvbnRleHRzIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93IiwiZ2V0UGVyc2lzdGVudCIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwib1RhcmdldGVkQ29udHJvbCIsInNNZXNzYWdlU3VidGl0bGUiLCJzUm93U3VidGl0bGVWYWx1ZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsIm9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwic1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVGaXJzdENvbFZhbHVlIiwib0NvbHVtbkluZm8iLCJkZXRlcm1pbmVDb2x1bW5JbmZvIiwic0NvbHVtbkluZGljYXRvciIsInNDb2x1bW5WYWx1ZSIsIm9CaW5kaW5nQ29udGV4dCIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1RleHRBbm5vdGF0aW9uUGF0aCIsInNUZXh0QXJyYW5nZW1lbnQiLCJzQ29kZVZhbHVlIiwic1RleHRWYWx1ZSIsInNDb21wdXRlZFZhbHVlIiwic2xpY2UiLCJzRW51bU51bWJlciIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJzcGxpdCIsInBvcCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJvQ29sdW1uIiwia2V5IiwiYXZhaWxhYmlsaXR5Iiwib1BhcmVudENvbnRyb2wiLCJyZXNvdXJjZUJ1bmRsZSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwibGlzdEJpbmRpbmciLCJzdGFydHNXaXRoIiwibWFwIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJiYWNrZW5kTWVzc2FnZXMiLCJhTWVzc2FnZXNUb0JlRGVsZXRlZCIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImFDb250ZXh0cyIsImFkZGl0aW9uYWxUZXh0Iiwic3VidGl0bGVDb2x1bW4iLCJlcnJvckNvbnRleHQiLCJvT2JqZWN0UGFnZUxheW91dCIsImdldFNlY3Rpb25zIiwiZ2V0VmlzaWJsZSIsImdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uIiwic3ViU2VjdGlvbiIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsImNvbnRleHRQYXRoVG9Fc2NhcGUiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXRQcm9wZXJ0eUtleSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwicHJvcGVydHlJbmZvcyIsIm5hbWUiLCJhQ29sdW1ucyIsImNvbHVtbkRlZmluaXRpb24iLCJwcm9wZXJ0eUluZm8iLCJiSXNUYWJsZVRhcmdldENvbFZpc2libGUiLCJvVGFibGVDb2xJbmZvIiwib0l0ZW0iLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwic2VjdGlvbiIsImJNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYklzT3JwaGFuRWxlbWVudCIsImFFbGVtZW50cyIsIm9QYXJlbnRFbGVtZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tTWVzc2FnZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBNTGliIGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvbWVzc2FnZS9NZXNzYWdlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gTUxpYi5CdXR0b25UeXBlO1xuY29uc3QgTWVzc2FnZVR5cGUgPSBDb3JlTGliLk1lc3NhZ2VUeXBlO1xubGV0IGFNZXNzYWdlTGlzdDogdW5rbm93bltdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogTWVzc2FnZVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRhYmxlSGVhZGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGJvb2xlYW4sIGJUcmFuc2l0aW9uT25seT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IE1lc3NhZ2VbXTtcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKTogYm9vbGVhbjtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRvQ29udHJvbD86IENvbnRyb2wsXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFx0dmlld1R5cGU/OiBzdHJpbmdcblx0KSA9PiBQcm9taXNlPERpYWxvZyB8IGJvb2xlYW4+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogdHJ1ZSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdFx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0XHRpc011bHRpNDEyPzogYm9vbGVhblxuXHQpID0+IHtcblx0XHRvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRcdG9CYWNrQnV0dG9uOiBCdXR0b247XG5cdH07XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuXHQpID0+IHN0cmluZztcblx0YklzT3JwaGFuRWxlbWVudDogKG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSkgPT4gYm9vbGVhbjtcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiAoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nO1xuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiAoXG5cdFx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IGJvb2xlYW4sXG5cdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogRnVuY3Rpb25cblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmdcblx0KSA9PiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiAob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCkgPT4gc3RyaW5nO1xuXHRnZXRNZXNzYWdlU3VidGl0bGU6IChcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcblx0KSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiAob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBNRENUYWJsZSkgPT4gVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmdcblx0KSA9PiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0Z2V0TWVzc2FnZVJhbms6IChvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBudW1iZXI7XG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBib29sZWFuKSA9PiB2b2lkO1xuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IChcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogQ29udGV4dCxcblx0XHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG5cdCkgPT4gc3RyaW5nO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IFZpZXcpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKTogc3RyaW5nIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyaW5nKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10ge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNUZXh0YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvbmAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9tZXNzYWdlYCB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IGAke3NIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSl9JHtpbnNlcnREZXRhaWwob1Byb3BlcnR5KX0gKyBgO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuXHRyZXR1cm4gXCIoJHtcIiArIFwiZGVzY3JpcHRpb259ID8gKCR7XCIgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogTWVzc2FnZUl0ZW1bXSk6IENvcmVMaWIuTWVzc2FnZVR5cGUge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpIGFzIGtleW9mIHR5cGVvZiBvTWVzc2FnZUNvdW50XTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UsIGk6IG51bWJlcikge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscyAmJiAob01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRUYXJnZXRzKFtcIlwiXSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCk6IHZvaWQge1xuXHRvRGlhbG9nLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpfSAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCJcblx0XHRcdFx0KX1gO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBhcmUgYW55IHdhcm5pbmcgb3IgZXJyb3IgbWVzc2FnZXMoYm91bmQgYW5kIHVuYm91bmQpLi5cbiAqXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RlbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gWy4uLmdldE1lc3NhZ2VzKHVuZGVmaW5lZCwgdHJ1ZSksIC4uLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpXS5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKFxuXHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdG11bHRpNDEyPzogYm9vbGVhblxuKToge1xuXHRvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRvQmFja0J1dHRvbjogQnV0dG9uO1xufSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0b01lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdGl0ZW1TZWxlY3Q6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdG9CYWNrQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSxcblx0XHRpdGVtczoge1xuXHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdH1cblx0fSk7XG5cdG9NZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pOiB2b2lkIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xufTtcblxuZnVuY3Rpb24gaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdCgodGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0KHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdG1lc3NhZ2UuZ2V0Q29kZSgpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd1VuYm91bmRNZXNzYWdlcyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0YUN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10gfCB1bmRlZmluZWQsXG5cdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRjb250cm9sPzogQ29udHJvbCxcblx0c0FjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGJPbmx5Rm9yVGVzdD86IGJvb2xlYW4sXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmdcbik6IFByb21pc2U8RGlhbG9nIHwgYm9vbGVhbj4ge1xuXHRsZXQgYVRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXHRjb25zdCBpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJcIiwgdGVzdDogaXNOb25UZWNobmljYWxNZXNzYWdlIH0pO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChhQ29udHJvbElkc1swXSkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0XHRjb25zdCBlcnJvckZpZWxkQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBDb250cm9sKS5maW5kRWxlbWVudHModHJ1ZSkuaW5kZXhPZihlcnJvckZpZWxkQ29udHJvbClcblx0XHRcdFx0XHRcdDogSW5maW5pdHk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGZpZWxkUmFua2luRGlhbG9nO1xuXHRcdFx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2wuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRhRmlsdGVycy5wdXNoKGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlcik7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gb25seSB1bmJvdW5kIG1lc3NhZ2VzIGhhdmUgdG8gYmUgc2hvd24gc28gYWRkIGZpbHRlciBhY2NvcmRpbmdseVxuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDAgfHwgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXJcblx0XHRcdFx0XSxcblx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRpZiAoYUN1c3RvbU1lc3NhZ2VzICYmIGFDdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhQ3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGNvbnN0IGJIYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIikge1xuXHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0fVxuXHRsZXQgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdGxldCBhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbXTtcblx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8ICghc2hvd01lc3NhZ2VCb3ggJiYgIW9uQmVmb3JlU2hvd01lc3NhZ2UpKSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblxuXHRcdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdGFDdXJyZW50Q29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudENvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgZXhpc3RpbmdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmo6IE1lc3NhZ2UpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTtcblx0XHR9XG5cdH1cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7IHNob3dNZXNzYWdlQm94LCBzaG93TWVzc2FnZURpYWxvZyB9O1xuXHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IG9uQmVmb3JlU2hvd01lc3NhZ2UoYVRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZUJveDtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZztcblx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cgfHwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykge1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgPyBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZmlsdGVyZWRNZXNzYWdlcyA6IGFNb2RlbERhdGFBcnJheTtcblx0XHR9XG5cdH1cblx0aWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0TWVzc2FnZSgpKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYVRyYW5zaXRpb25NZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nICYmIGFNb2RlbERhdGFBcnJheS5sZW5ndGgpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShhTW9kZWxEYXRhQXJyYXksIGNvbnRyb2wsIHNBY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7IC8vIHNldCB0aGUgbWVzc2FnZXMgaGVyZSBzbyB0aGF0IGlmIGFueSBvZiB0aGVtIGFyZSBmaWx0ZXJlZCBmb3IgQVBELCB0aGV5IGFyZSBmaWx0ZXJlZCBoZXJlIGFzIHdlbGwuXG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8RGlhbG9nPihmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBEaWFsb2cpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUhKG9NZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0Y29uc3Qgb1NvcnRlciA9IG5ldyBTb3J0ZXIoXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIChvYmoxOiBNZXNzYWdlLCBvYmoyOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0XHRcdGNvbnN0IHJhbmtCID0gZ2V0TWVzc2FnZVJhbmsob2JqMik7XG5cblx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdH0pO1xuXG5cdFx0XHQob01lc3NhZ2VPYmplY3Qub01lc3NhZ2VWaWV3LmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5zb3J0KG9Tb3J0ZXIpO1xuXG5cdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0b0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpXG5cdFx0XHRcdFx0PyBvRGlhbG9nXG5cdFx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUmVzb2x2ZUZ1bmN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICB9KTtcblx0XHRcdG9EaWFsb2cucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdGlmIChiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHRcdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHR9XG5cdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdCgob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0aWYgKGJPbmx5Rm9yVGVzdCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFUcmFuc2l0aW9uTWVzc2FnZXNbMF07XG5cdFx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0KG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzICYmICFhTWVzc2FnZUxpc3QuaW5jbHVkZXMobWVzc2FnZVRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlPy5tZXNzYWdlKSkgfHxcblx0XHRcdFx0KHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGlmIChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyAmJiAoIXNob3dNZXNzYWdlUGFyYW1ldGVycyB8fCAhc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2U/Lm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgPGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnI+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VQYXJhbWV0ZXJzICYmIHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZSkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCl9OiAke29NZXNzYWdlLmdldE1lc3NhZ2UoKX08L2h0bWw+PC9ib2R5PmA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCBhcyB1bmtub3duIGFzIHN0cmluZywge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ3JvdXAgbmFtZSBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCBhcyBWaWV3KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRvRWxlbS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSB8fCBvRWxlbWVudC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKT8uZ2V0UGF0aCgpfWA7XG5cdFx0XHRcdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkVGFibGVFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0b1Jvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgb1RhcmdldFRhYmxlSW5mbyB9ID0gb2JqO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNldFNlY3Rpb25OYW1lSW5Hcm91cCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpZGVudGlmaWVyQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb0VsZW0uZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImFkZGl0aW9uYWxUZXh0XCJdID0gYCR7cm93SWRlbnRpZmllcn0sICR7b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVyTmFtZSA9IG9FbGVtLmdldEhlYWRlclZpc2libGUoKSAmJiBvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFoZWFkZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBvU3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVyTmFtZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtoZWFkZXJOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgT1AgY29udGV4dCBwYXRoIGlzIHBhcnQgb2YgdGFyZ2V0LCBzZXQgTGFzdCBBY3Rpb24gYXMgZ3JvdXAgbmFtZVxuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBzTGFzdEFjdGlvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cdHJldHVybiBzQWN0aW9uTmFtZSA/IGAke3NMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCA6IFwiXCI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgcmFuayBiYXNlZCBvbiBNZXNzYWdlIEdyb3VwL0hlYWRlciBuYW1lLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIFNvcnRpbmcgbWVzc2FnZXMgaW4gTWVzc2FnZSBkaWFsb2dcbiAqIExhc3QgQWN0aW9uIHNob3VsZCBiZSBzaG93biBhdCB0b3AsIG5leHQgUm93IElkIGFuZCBsYXN0IEdlbmVyYWwuXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybnMgUmFuayBvZiBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VSYW5rKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpOiBudW1iZXIge1xuXHRpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJMYXN0IEFjdGlvblwiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiR2VuZXJhbFwiKSkge1xuXHRcdHJldHVybiAzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAyO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSB3aGljaCBjYW4gZWl0aGVyIEdlbmVyYWwgb3IgTGFzdCBBY3Rpb24uXG4gKlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICpcbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHNldFNlY3Rpb25OYW1lSW5Hcm91cFxuICogQHBhcmFtIGZuU2V0R3JvdXBOYW1lXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIGFuZCBTdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0Zm5TZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG4pOiB7IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7IHN1YlRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIH0ge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0YklzQ3JlYXRpb25Sb3cgPSBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2wpO1xuXHR9XG5cblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHQvLyBpZiB0aGUgY29sdW1uIGlzIG5vdCBwcmVzZW50IG9uIFVJIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgaGF2ZSBhIHRhYmxlIGZpZWxkIGluIGl0LCB1c2UgTGFzdCBBY3Rpb24gZm9yIGdyb3VwaW5nXG5cdFx0aWYgKGFNZXNzYWdlLmdldFBlcnNpc3RlbnQoKSAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbE5hbWVcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBiSXNDcmVhdGlvblJvd1xuICogQHBhcmFtIG9UYXJnZXRlZENvbnRyb2xcbiAqIEByZXR1cm5zIE1lc3NhZ2Ugc3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdWJ0aXRsZShcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcbik6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRsZXQgc01lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHNSb3dTdWJ0aXRsZVZhbHVlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvVGFibGUpO1xuXHRjb25zdCBzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0Y29uc3Qgb0NvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtZXNzYWdlLCBvVGFibGUpO1xuXHRpZiAoYklzQ3JlYXRpb25Sb3cgfHwgb1RhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpKSB7XG5cdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtcblx0XHRcdHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFX0NSRUFUSU9OX1JPV19JTkRJQ0FUT1JcIiksXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID8gc1RhYmxlVGFyZ2V0Q29sTmFtZSA6IChvQ29sRnJvbVRhYmxlU2V0dGluZ3MgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5sYWJlbFxuXHRcdF0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdG9UYWJsZSxcblx0XHRcdG9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCBzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCA9IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoICYmIG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gc2V0IFJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0XHRpZiAob1RhcmdldGVkQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgVUkgZXJyb3IgaXMgb24gdGhlIGZpcnN0IGNvbHVtbiwgd2UgdGhlbiBnZXQgdGhlIGNvbnRyb2wgaW5wdXQgYXMgdGhlIHJvdyBpbmRpY2F0b3I6XG5cdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlID0gKG9UYXJnZXRlZENvbnRyb2wgYXMgRmllbGRBUEkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sVmFsdWUoXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbWVzc2FnZSBzdWJ0aXRsZVxuXHRcdFx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0gbWVzc2FnZUhhbmRsaW5nLmRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbc1Jvd1N1YnRpdGxlVmFsdWUsIHNUYWJsZVRhcmdldENvbE5hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW1xuXHRcdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlXG5cdFx0XHRcdF0pfSwgJHtvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWV9YDtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtzUm93U3VidGl0bGVWYWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbc1Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIikgKyBcIjogXCIgKyBzVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzTWVzc2FnZVN1YnRpdGxlO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGV4dCBBbm5vdGF0aW9uLCB0aGlzIGlzIG5lZWRlZCB0byBzZXQgc3VidGl0bGUgb2YgTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIEJpbmRpbmcgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmdcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9CaW5kaW5nQ29udGV4dDtcblx0aWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9UYWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aChvVGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0aWYgKG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHQvJFBhdGhgKSkge1xuXHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9CaW5kaW5nQ29udGV4dDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB2YWx1ZSBvZiBmaXJzdCBDb2x1bW4gb2YgVGFibGUsIHdpdGggaXRzIHRleHQgQXJyYW5nZW1lbnQuXG4gKlxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEBwYXJhbSBvVGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gc1RleHRBbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIHNUZXh0QXJyYW5nZW1lbnRcbiAqIEByZXR1cm5zIENvbHVtbiBWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbFZhbHVlKFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IENvbnRleHQsXG5cdHNUZXh0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRjb25zdCBzQ29kZVZhbHVlID0gb1RhYmxlUm93Q29udGV4dC5nZXRPYmplY3Qoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdGxldCBzVGV4dFZhbHVlO1xuXHRsZXQgc0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRpZiAoc1RleHRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdGlmIChzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGV4dCBhbm5vdGF0aW9uIHBhdGhcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LnNsaWNlKDAsIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5jb25jYXQoc1RleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGV4dEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRzVGV4dFZhbHVlID0gb1RhYmxlUm93Q29udGV4dC5nZXRPYmplY3Qoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdFx0aWYgKHNUZXh0VmFsdWUpIHtcblx0XHRcdGlmIChzVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHNFbnVtTnVtYmVyID0gc1RleHRBcnJhbmdlbWVudC5zbGljZShzVGV4dEFycmFuZ2VtZW50LmluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdHN3aXRjaCAoc0VudW1OdW1iZXIpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGV4dE9ubHlcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gc1RleHRWYWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0Rmlyc3RcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c1RleHRWYWx1ZX0gKCR7c0NvZGVWYWx1ZX0pYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0TGFzdFwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzQ29kZVZhbHVlfSAoJHtzVGV4dFZhbHVlfSlgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRTZXBhcmF0ZVwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzVGV4dFZhbHVlfSAoJHtzQ29kZVZhbHVlfSlgO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0NvbXB1dGVkVmFsdWU7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKlxuICogQHBhcmFtIG9NZXNzYWdlIE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0gb1RhYmxlIE1kY1RhYmxlXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb2x1bW4gaW5mby5cbiAqL1xuZnVuY3Rpb24gZmV0Y2hDb2x1bW5JbmZvKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBNRENUYWJsZSk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc0NvbE5hbWVGcm9tTWVzc2FnZU9iaiA9IG9NZXNzYWdlPy5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRyZXR1cm4gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIG9Db2x1bW4ua2V5LnNwbGl0KFwiOjpcIikucG9wKCkgPT09IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmo7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBDb2x1bW4gZGF0YSBkZXBlbmRpbmcgb24gaXRzIGF2YWlsYWJpbGl0eSBpbiBUYWJsZSwgdGhpcyBpcyBuZWVkZWQgZm9yIHNldHRpbmcgc3VidGl0bGUgb2YgTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc0NvbnRyb2xJZFxuICogQHJldHVybnMgVHJ1ZSBpZiBjb250cm9sIGlzIHBhcnQgb2YgdGFibGUuXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEluVGFibGUob1RhYmxlOiBNRENUYWJsZSwgc0NvbnRyb2xJZDogc3RyaW5nKTogVUk1RWxlbWVudFtdIHwgYm9vbGVhbiB7XG5cdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0aWYgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIW9Db250cm9sLmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSkge1xuXHRcdHJldHVybiBvVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sLmdldElkKCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRsZXQgb1BhcmVudENvbnRyb2wgPSBvQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdHdoaWxlIChcblx0XHRvUGFyZW50Q29udHJvbCAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAubS5Db2x1bW5MaXN0SXRlbVwiKVxuXHQpIHtcblx0XHRvUGFyZW50Q29udHJvbCA9IG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuICEhb1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWw6IE1lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5zdGFydHNXaXRoKHNQYXRoVG9CZVJlbW92ZWQpKVxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCByZWxldmFudCBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gYkJvdW5kTWVzc2FnZXMgVG8gZ2V0IG9ubHkgYm91bmQgbWVzc2FnZXNcbiAqIEBwYXJhbSBiVHJhbnNpdGlvbk9ubHkgVG8gZ2V0IG9ubHkgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICogQHBhcmFtIHNQYXRoVG9CZVJlbW92ZWQgRmlsdGVyIG91dCBib3VuZCBtZXNzYWdlcyB3aXRoIHBhdGhcbiAqIEByZXR1cm5zIE1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seSA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cdGxldCBhTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0uZ2V0UGVyc2lzdGVudCgpKSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKSB8fFxuXHRcdFx0XHQoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSB8fCBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdID09PSBcIlwiKSkpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzLnB1c2goYU1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0Q29kZSgpID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKSAhPT0gXCJcIiAmJlxuXHRcdFx0IWFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpLmluY2x1ZGVzKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uc2V0TWVzc2FnZShcblx0XHRcdFx0YFxcbiR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpfSR7YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCl9YFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0Ly9GaWx0ZXJpbmcgbWVzc2FnZXMgYWdhaW4gaGVyZSB0byBhdm9pZCBzaG93aW5nIHB1cmUgdGVjaG5pY2FsIG1lc3NhZ2VzIHJhaXNlZCBieSB0aGUgbW9kZWxcblx0Y29uc3QgYmFja2VuZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBhVHJhbnNpdGlvbk1lc3NhZ2VzLmZpbHRlcihpc05vblRlY2huaWNhbE1lc3NhZ2UpO1xuXG5cdHJldHVybiBiYWNrZW5kTWVzc2FnZXM7XG59XG5leHBvcnQgdHlwZSBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IHtcblx0b3JpZ2luYWxNZXNzYWdlPzoge1xuXHRcdG1lc3NhZ2U/OiBzdHJpbmc7XG5cdH0gfCBudWxsO1xuXHRodHRwU3RhdHVzPzogbnVtYmVyIHwgbnVsbDtcblx0cmV0cnlBZnRlcj86IERhdGU7XG5cdGlzQ29uY3VycmVudE1vZGlmaWNhdGlvbj86IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuLy9UT0RPOiBUaGlzIG11c3QgYmUgbW92ZWQgb3V0IG9mIG1lc3NhZ2UgaGFuZGxpbmdcbmZ1bmN0aW9uIHNldE1lc3NhZ2VTdWJ0aXRsZShvVGFibGU6IE1EQ1RhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpOiB2b2lkIHtcblx0aWYgKG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHN1YnRpdGxlQ29sdW1uID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRjb25zdCBlcnJvckNvbnRleHQgPSBhQ29udGV4dHMuZmluZChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmNsdWRlcyhvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXHRcdG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPSBlcnJvckNvbnRleHQgPyBlcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZpc2libGUgc2VjdGlvbnMgZnJvbSBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcmV0dXJucyBTdWJTZWN0aW9uIG1hdGNoaW5nIGNvbnRyb2wgaWRzLlxuICovXG5mdW5jdGlvbiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKTogVUk1RWxlbWVudFtdIHtcblx0cmV0dXJuIHN1YlNlY3Rpb25cblx0XHQuZmluZEVsZW1lbnRzKHRydWUsIChvRWxlbSkgPT4ge1xuXHRcdFx0cmV0dXJuIGZuRmlsdGVyVXBvbklkcyhvTWVzc2FnZU9iamVjdC5nZXRDb250cm9sSWRzKCksIG9FbGVtKTtcblx0XHR9KVxuXHRcdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHQvLyBjb250cm9scyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGhhdmUgdGhlIHRhYmxlIG9uIHRvcCBvZiB0aGUgYXJyYXlcblx0XHRcdC8vIGl0IHdpbGwgaGVscCB0byBjb21wdXRlIHRoZSBzdWJ0aXRsZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiByZWxhdGVkIGNvbnRyb2xzXG5cdFx0XHRpZiAoYS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFiLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCk6IHN0cmluZyB7XG5cdC8vdGhpcyBmdW5jdGlvbiBlc2NhcGVzIGEgc3RyaW5nIHRvIHVzZSBpdCBhcyBhIHJlZ2V4XG5cdGNvbnN0IGZuUmVnRXhwZXNjYXBlID0gZnVuY3Rpb24gKHM6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG5cdH07XG5cdC8vIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgbWVzc2FnZSB3ZSByZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZS5cblx0Ly8gdG8gYWNoaWV2ZSBpdCB3ZSByZW1vdmUgdGhlIGJpbmRpbmdDb250ZXh0IHBhdGggYW5kIHRoZSByb3cgYmluZGluZyBwYXRoIGZyb20gdGhlIHRhcmdldFxuXHRpZiAoIW9Db250ZXh0UGF0aCkge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoVG9Fc2NhcGUgPSBgJHtvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8keyhvVGFibGUgYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRvQ29udGV4dFBhdGggPSBuZXcgUmVnRXhwKGAke2ZuUmVnRXhwZXNjYXBlKGNvbnRleHRQYXRoVG9Fc2NhcGUpfVxcXFwoLipcXFxcKS9gKTtcblx0fVxuXHRyZXR1cm4gb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLnJlcGxhY2Uob0NvbnRleHRQYXRoLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24gaWYgaXQgbWF0Y2hlcyB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGFyZ2V0IG9mIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBDb2x1bW4gbmFtZSBhbmQgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sSW5mbyhcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogeyBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XG5cdGxldCBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9UYWJsZVRhcmdldENvbDogQ29sdW1uIHwgdW5kZWZpbmVkID0gb1RhYmxlLmdldENvbHVtbnMoKS5maW5kKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkgPT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk7XG5cdH0pO1xuXHRpZiAoIW9UYWJsZVRhcmdldENvbCkge1xuXHRcdC8qIElmIHRoZSB0YXJnZXQgY29sdW1uIGlzIG5vdCBmb3VuZCwgd2UgY2hlY2sgZm9yIGEgY3VzdG9tIGNvbHVtbiAqL1xuXHRcdGNvbnN0IG9DdXN0b21Db2x1bW4gPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSkuZmluZChmdW5jdGlvbiAoXG5cdFx0XHRvQ29sdW1uOiBUYWJsZUNvbHVtblxuXHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKCEhKG9Db2x1bW4gYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbikudGVtcGxhdGUgJiYgb0NvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KSBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvQ3VzdG9tQ29sdW1uKSB7XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IG9DdXN0b21Db2x1bW4/Lm5hbWU7XG5cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVcblx0XHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0NvbHVtbik6IGJvb2xlYW4ge1xuXHRcdFx0XHRcdHJldHVybiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9PT0gb0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQ/LmdldEhlYWRlcigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGZpZWxkIGdyb3VwICovXG5cdFx0XHRjb25zdCBhQ29sdW1ucyA9IChvVGFibGUuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKTtcblx0XHRcdGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBUYWJsZUNvbHVtbikge1xuXHRcdFx0XHRpZiAob0NvbHVtbi5rZXkuaW5jbHVkZXMoXCI6OkZpZWxkR3JvdXA6OlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29sdW1uLnByb3BlcnR5SW5mb3M/LmZpbmQoZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IHx8IHByb3BlcnR5SW5mby5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRcdC8qIGNoZWNrIGlmIHRoZSBjb2x1bW4gd2l0aCB0aGUgZmllbGQgZ3JvdXAgaXMgdmlzaWJsZSBpbiB0aGUgdGFibGU6ICovXG5cdFx0XHRsZXQgYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRpZiAoY29sdW1uRGVmaW5pdGlvbiAmJiBjb2x1bW5EZWZpbml0aW9uLmxhYmVsKSB7XG5cdFx0XHRcdGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuc29tZShmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbHVtbi5nZXRIZWFkZXIoKSA9PT0gY29sdW1uRGVmaW5pdGlvbi5sYWJlbDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID8gY29sdW1uRGVmaW5pdGlvbj8ubGFiZWwgOiB1bmRlZmluZWQ7XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmtleSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVRhcmdldENvbC5nZXRIZWFkZXIoKTtcblx0fVxuXHRyZXR1cm4geyBzVGFibGVUYXJnZXRDb2xOYW1lOiBzVGFibGVUYXJnZXRDb2xOYW1lLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIFRhYmxlIGFuZCBjb2x1bW4gaW5mbyBpZiBhbnkgb2YgaXQgbWF0Y2hlcyB0aGUgdGFyZ2V0IGZyb20gTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvICYmIG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJcblx0XHRcdD8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YFxuXHRcdFx0OiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudCAhPT0gb0VsZW0pIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCA/IHRydWUgOiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgRmlvcmkgTWVzc2FnZSBIYW5kbGluZ1xuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiBzaG93VW5ib3VuZE1lc3NhZ2VzLFxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSxcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IGdldFJldHJ5QWZ0ZXJNZXNzYWdlLFxuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyxcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiBzZXRNZXNzYWdlU3VidGl0bGUsXG5cdGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0OiBnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCxcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uLFxuXHRmbkZpbHRlclVwb25JZHM6IGZuRmlsdGVyVXBvbklkcyxcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiBnZXRUYWJsZUFuZFRhcmdldEluZm8sXG5cdGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWU6IGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUsXG5cdGJJc09ycGhhbkVsZW1lbnQ6IGJJc09ycGhhbkVsZW1lbnQsXG5cdGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZTogZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lLFxuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlLFxuXHRnZXRUYWJsZUNvbEluZm86IGdldFRhYmxlQ29sSW5mbyxcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogZ2V0VGFibGVDb2xQcm9wZXJ0eSxcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiBnZXRNZXNzYWdlU3VidGl0bGUsXG5cdGRldGVybWluZUNvbHVtbkluZm86IGRldGVybWluZUNvbHVtbkluZm8sXG5cdGZldGNoQ29sdW1uSW5mbzogZmV0Y2hDb2x1bW5JbmZvLFxuXHRnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24sXG5cdGdldE1lc3NhZ2VSYW5rOiBnZXRNZXNzYWdlUmFuayxcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3M6IGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IGdldFRhYmxlRmlyc3RDb2xWYWx1ZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBOENBLE1BQU1BLFVBQVUsR0FBR0MsSUFBSSxDQUFDRCxVQUFVO0VBQ2xDLE1BQU1FLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUFXO0VBQ3ZDLElBQUlFLFlBQXVCLEdBQUcsRUFBRTtFQUNoQyxJQUFJQyxnQkFBMkIsR0FBRyxFQUFFO0VBQ3BDLElBQUlDLGlCQUE2QixHQUFHLEVBQUU7RUFDdEMsSUFBSUMsT0FBZTtFQUNuQixJQUFJQyxXQUFtQjtFQUN2QixJQUFJQyxZQUF5QjtFQXlIN0IsU0FBU0Msd0JBQXdCLEdBQVc7SUFDM0MsSUFBSUMsa0JBQTBCOztJQUU5QjtJQUNBLFNBQVNDLFlBQVksQ0FBQ0MsU0FBa0QsRUFBVTtNQUNqRixPQUFPQSxTQUFTLENBQUNDLFFBQVEsR0FDdEIsTUFBTSxHQUNORCxTQUFTLENBQUND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