@sapui5/sap.fe.core 1.101.0 → 1.103.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 (339) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +66 -30
  4. package/src/sap/fe/core/AppComponent.ts +68 -51
  5. package/src/sap/fe/core/AppStateHandler.js +13 -13
  6. package/src/sap/fe/core/AppStateHandler.ts +18 -18
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +279 -188
  10. package/src/sap/fe/core/CommonUtils.ts +306 -215
  11. package/src/sap/fe/core/ExtensionAPI.js +25 -30
  12. package/src/sap/fe/core/ExtensionAPI.ts +37 -41
  13. package/src/sap/fe/core/PageController.js +12 -7
  14. package/src/sap/fe/core/PageController.ts +10 -5
  15. package/src/sap/fe/core/TemplateComponent.js +6 -6
  16. package/src/sap/fe/core/TemplateComponent.ts +11 -11
  17. package/src/sap/fe/core/TemplateModel.js +2 -2
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  26. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +39 -21
  52. package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  60. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
  61. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
  65. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  67. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
  68. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
  69. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
  70. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
  73. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
  75. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
  77. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
  78. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
  79. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  80. package/src/sap/fe/core/controls/Any.js +9 -5
  81. package/src/sap/fe/core/controls/Any.ts +10 -4
  82. package/src/sap/fe/core/controls/CommandExecution.js +21 -24
  83. package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
  84. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  85. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  86. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
  87. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  89. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  91. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
  93. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  94. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/FileWrapper.js +50 -3
  96. package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
  97. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  98. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  99. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
  101. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  102. package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
  103. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  104. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  105. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  106. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  107. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  108. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
  109. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
  110. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
  111. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  112. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
  113. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
  114. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  115. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  116. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  117. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
  118. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  119. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  120. package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
  121. package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
  122. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  123. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  124. package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
  125. package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
  126. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  127. package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
  128. package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
  129. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
  130. package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
  131. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  132. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  133. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  134. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  135. package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
  136. package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
  137. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  139. package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
  140. package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
  142. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
  144. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
  145. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  146. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  147. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  148. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  149. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  150. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  151. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
  152. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
  153. package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
  154. package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
  155. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
  156. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
  157. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  158. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  159. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  160. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  161. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  162. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  163. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  165. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  166. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  167. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  169. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  171. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
  173. package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
  174. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
  175. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  176. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  177. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  178. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  179. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  180. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  181. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  182. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  183. package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
  184. package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
  185. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  186. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  187. package/src/sap/fe/core/fpm/Component.js +2 -2
  188. package/src/sap/fe/core/fpm/Component.ts +1 -1
  189. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  190. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  191. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  192. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
  193. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  194. package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
  195. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  196. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  197. package/src/sap/fe/core/helpers/EditState.js +1 -6
  198. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  199. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  200. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  201. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  202. package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
  203. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  204. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  205. package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
  206. package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
  207. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  208. package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
  209. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  210. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  211. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  212. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  213. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  214. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  215. package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
  216. package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
  217. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  218. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  221. package/src/sap/fe/core/library.js +51 -3
  222. package/src/sap/fe/core/library.ts +47 -0
  223. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  224. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  225. package/src/sap/fe/core/messagebundle.properties +151 -197
  226. package/src/sap/fe/core/messagebundle_ar.properties +36 -63
  227. package/src/sap/fe/core/messagebundle_bg.properties +36 -63
  228. package/src/sap/fe/core/messagebundle_ca.properties +36 -63
  229. package/src/sap/fe/core/messagebundle_cs.properties +36 -63
  230. package/src/sap/fe/core/messagebundle_cy.properties +36 -63
  231. package/src/sap/fe/core/messagebundle_da.properties +37 -64
  232. package/src/sap/fe/core/messagebundle_de.properties +36 -63
  233. package/src/sap/fe/core/messagebundle_el.properties +38 -65
  234. package/src/sap/fe/core/messagebundle_en.properties +37 -64
  235. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
  236. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
  237. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
  238. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
  239. package/src/sap/fe/core/messagebundle_es.properties +36 -63
  240. package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
  241. package/src/sap/fe/core/messagebundle_et.properties +36 -63
  242. package/src/sap/fe/core/messagebundle_fi.properties +36 -63
  243. package/src/sap/fe/core/messagebundle_fr.properties +39 -66
  244. package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
  245. package/src/sap/fe/core/messagebundle_hi.properties +36 -63
  246. package/src/sap/fe/core/messagebundle_hr.properties +36 -63
  247. package/src/sap/fe/core/messagebundle_hu.properties +35 -62
  248. package/src/sap/fe/core/messagebundle_id.properties +37 -64
  249. package/src/sap/fe/core/messagebundle_it.properties +54 -81
  250. package/src/sap/fe/core/messagebundle_iw.properties +36 -63
  251. package/src/sap/fe/core/messagebundle_ja.properties +36 -63
  252. package/src/sap/fe/core/messagebundle_kk.properties +36 -63
  253. package/src/sap/fe/core/messagebundle_ko.properties +36 -63
  254. package/src/sap/fe/core/messagebundle_lt.properties +36 -63
  255. package/src/sap/fe/core/messagebundle_lv.properties +36 -63
  256. package/src/sap/fe/core/messagebundle_ms.properties +37 -64
  257. package/src/sap/fe/core/messagebundle_nl.properties +37 -64
  258. package/src/sap/fe/core/messagebundle_no.properties +36 -63
  259. package/src/sap/fe/core/messagebundle_pl.properties +37 -64
  260. package/src/sap/fe/core/messagebundle_pt.properties +37 -64
  261. package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
  262. package/src/sap/fe/core/messagebundle_ro.properties +36 -63
  263. package/src/sap/fe/core/messagebundle_ru.properties +36 -63
  264. package/src/sap/fe/core/messagebundle_sh.properties +36 -63
  265. package/src/sap/fe/core/messagebundle_sk.properties +36 -63
  266. package/src/sap/fe/core/messagebundle_sl.properties +38 -65
  267. package/src/sap/fe/core/messagebundle_sv.properties +36 -63
  268. package/src/sap/fe/core/messagebundle_th.properties +36 -63
  269. package/src/sap/fe/core/messagebundle_tr.properties +36 -63
  270. package/src/sap/fe/core/messagebundle_uk.properties +37 -64
  271. package/src/sap/fe/core/messagebundle_vi.properties +37 -64
  272. package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
  273. package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
  274. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  275. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  276. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  278. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  279. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
  280. package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
  281. package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
  282. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  283. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  284. package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
  285. package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
  286. package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
  287. package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
  288. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  289. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  290. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
  291. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
  292. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  293. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  294. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  295. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  296. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  297. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  298. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  299. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  300. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  301. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  302. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  303. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  304. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
  306. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
  307. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
  308. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  309. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  310. package/src/sap/fe/core/templating/FilterHelper.js +12 -11
  311. package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
  312. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  313. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  315. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  316. package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
  317. package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
  318. package/src/sap/fe/core/templating/UIFormatters.js +163 -97
  319. package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
  320. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  321. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  325. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  326. package/src/sap/fe/core/RouterProxy.js +0 -938
  327. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  328. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  329. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
  330. package/src/sap/fe/core/actions/draft.js +0 -665
  331. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  332. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  333. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  334. package/src/sap/fe/core/actions/operations.js +0 -1096
  335. package/src/sap/fe/core/actions/sticky.js +0 -130
  336. package/src/sap/fe/core/actions/sticky.ts +0 -119
  337. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  338. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
  339. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
@@ -2,15 +2,15 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport", "sap/ui/model/json/JSONModel", "sap/base/Log", "sap/fe/core/formatters/TableFormatterTypes", "sap/ui/core/format/NumberFormat", "sap/ui/core/format/DateFormat", "sap/ui/core/Locale", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/m/Popover", "sap/ui/core/Core"], function (ControllerExtension, ClassSupport, JSONModel, Log, TableFormatterTypes, NumberFormat, DateFormat, Locale, Filter, Sorter, Popover, Core) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/TableFormatterTypes", "sap/m/Popover", "sap/ui/core/Core", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/Locale", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/json/JSONModel", "sap/ui/model/Sorter", "../helpers/ClassSupport"], function (Log, TableFormatterTypes, Popover, Core, DateFormat, NumberFormat, Locale, ControllerExtension, Filter, JSONModel, Sorter, ClassSupport) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _class, _class2;
9
9
 
10
- var MessageType = TableFormatterTypes.MessageType;
11
10
  var publicExtension = ClassSupport.publicExtension;
12
11
  var methodOverride = ClassSupport.methodOverride;
13
12
  var defineUI5Class = ClassSupport.defineUI5Class;
13
+ var MessageType = TableFormatterTypes.MessageType;
14
14
 
15
15
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
16
16
 
@@ -34,9 +34,9 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
34
34
  /**
35
35
  * Function to get a message state from a calculated criticality of type 'Target'.
36
36
  *
37
- * @param {number} kpiValue The value of the KPI to be tested against.
38
- * @param {number[]} aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue,AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
39
- * @returns {MessageType} Returns the corresponding MessageType
37
+ * @param kpiValue The value of the KPI to be tested against.
38
+ * @param aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue,AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
39
+ * @returns Returns the corresponding MessageType
40
40
  */
41
41
 
42
42
  function messageTypeFromTargetCalculation(kpiValue, aThresholds) {
@@ -63,9 +63,9 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
63
63
  /**
64
64
  * Function to get a message state from a calculated criticality of type 'Minimize'.
65
65
  *
66
- * @param {number} kpiValue The value of the KPI to be tested against.
67
- * @param {number[]} aThresholds Thresholds to be used [AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
68
- * @returns {MessageType} Returns the corresponding MessageType
66
+ * @param kpiValue The value of the KPI to be tested against.
67
+ * @param aThresholds Thresholds to be used [AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
68
+ * @returns Returns the corresponding MessageType
69
69
  */
70
70
 
71
71
 
@@ -87,9 +87,9 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
87
87
  /**
88
88
  * Function to get a message state from a calculated criticality of type 'Maximize'.
89
89
  *
90
- * @param {number} kpiValue The value of the KPI to be tested against.
91
- * @param {number[]} aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue].
92
- * @returns {MessageType} Returns the corresponding MessageType
90
+ * @param kpiValue The value of the KPI to be tested against.
91
+ * @param aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue].
92
+ * @returns Returns the corresponding MessageType
93
93
  */
94
94
 
95
95
 
@@ -111,8 +111,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
111
111
  /**
112
112
  * Function to calculate a DeviationIndicator value from a trend value.
113
113
  *
114
- * @param {number|string} trendValue The criticality values.
115
- * @returns {string} Returns the corresponding DeviationIndicator value
114
+ * @param trendValue The criticality values.
115
+ * @returns Returns the corresponding DeviationIndicator value
116
116
  */
117
117
 
118
118
 
@@ -151,7 +151,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
151
151
  * @param referenceValue The reference value to compare with
152
152
  * @param isRelative True is the comparison is relative
153
153
  * @param aThresholds Array of thresholds [StrongDownDifference, DownDifference, UpDifference, StrongUpDifference]
154
- * @returns {sap.m.DeviationIndicator} Returns the corresponding DeviationIndicator value
154
+ * @returns Returns the corresponding DeviationIndicator value
155
155
  */
156
156
 
157
157
 
@@ -220,31 +220,31 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
220
220
 
221
221
  switch (range.operator) {
222
222
  case "BT":
223
- return "[" + valueLow + " - " + valueHigh + "]";
223
+ return "[".concat(valueLow, " - ").concat(valueHigh, "]");
224
224
 
225
225
  case "Contains":
226
- return "*" + valueLow + "*";
226
+ return "*".concat(valueLow, "*");
227
227
 
228
228
  case "GE":
229
- return "\u2265" + valueLow;
229
+ return "\u2265".concat(valueLow);
230
230
 
231
231
  case "GT":
232
- return ">" + valueLow;
232
+ return ">".concat(valueLow);
233
233
 
234
234
  case "LE":
235
- return "\u2264" + valueLow;
235
+ return "\u2264".concat(valueLow);
236
236
 
237
237
  case "LT":
238
- return "<" + valueLow;
238
+ return "<".concat(valueLow);
239
239
 
240
240
  case "NB":
241
- return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["[" + valueLow + " - " + valueHigh + "]"]);
241
+ return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["[".concat(valueLow, " - ").concat(valueHigh, "]")]);
242
242
 
243
243
  case "NE":
244
- return "\u2260" + valueLow;
244
+ return "\u2260".concat(valueLow);
245
245
 
246
246
  case "NotContains":
247
- return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["*" + valueLow + "*"]);
247
+ return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["*".concat(valueLow, "*")]);
248
248
 
249
249
  case "EQ":
250
250
  default:
@@ -257,7 +257,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
257
257
  } else if (filterDefinition.ranges.length === 1) {
258
258
  return formatRange(filterDefinition.ranges[0]);
259
259
  } else {
260
- return "(" + filterDefinition.ranges.map(formatRange).join(",") + ")";
260
+ return "(".concat(filterDefinition.ranges.map(formatRange).join(","), ")");
261
261
  }
262
262
  }
263
263
 
@@ -273,7 +273,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
273
273
  var res = items[0].label;
274
274
 
275
275
  for (var I = 1; I < items.length - 1; I++) {
276
- res += ", " + items[I].label;
276
+ res += ", ".concat(items[I].label);
277
277
  }
278
278
 
279
279
  return resBundle.getText("C_KPICARD_ITEMSLIST", [res, items[items.length - 1].label]);
@@ -550,10 +550,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
550
550
  }
551
551
  /**
552
552
  * @class A controller extension for managing the KPIs in an analytical list page
553
- *
554
553
  * @name sap.fe.core.controllerextensions.KPIManagement
555
554
  * @hideconstructor
556
- *
557
555
  * @private
558
556
  * @since 1.93.0
559
557
  */
@@ -654,17 +652,17 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
654
652
  oCardManifest["sap.card"].content.dimensions = kpiDefinition.chart.dimensions.map(function (dimension) {
655
653
  return {
656
654
  label: dimension.label,
657
- value: "{" + dimension.name + "}"
655
+ value: "{".concat(dimension.name, "}")
658
656
  };
659
657
  });
660
658
  oCardManifest["sap.card"].content.measures = kpiDefinition.chart.measures.map(function (measure) {
661
659
  return {
662
660
  label: measure.label,
663
- value: "{" + measure.name + "}"
661
+ value: "{".concat(measure.name, "}")
664
662
  };
665
663
  });
666
664
  oCardManifest["sap.card"].content.feeds = getChartFeeds(kpiDefinition.chart);
667
- oKPIModel.setProperty("/" + kpiDefinition.id, {
665
+ oKPIModel.setProperty("/".concat(kpiDefinition.id), {
668
666
  manifest: oCardManifest
669
667
  });
670
668
  };
@@ -674,7 +672,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
674
672
  if (kpiDefinition.navigation) {
675
673
  return getNavigationParameters(kpiDefinition.navigation, oShellService).then(function (oNavInfo) {
676
674
  if (oNavInfo) {
677
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/header/actions", [{
675
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/header/actions"), [{
678
676
  type: "Navigation",
679
677
  parameters: oNavInfo
680
678
  }]);
@@ -754,14 +752,14 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
754
752
  maxFractionDigits: 1,
755
753
  showScale: !isPercentage
756
754
  }, currentLocale).format(rawValue);
757
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValue", kpiValue); // Value without a scale
755
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValue"), kpiValue); // Value without a scale
758
756
 
759
757
  var kpiValueUnscaled = NumberFormat.getFloatInstance({
760
758
  maxFractionDigits: 2,
761
759
  showScale: false,
762
760
  groupingEnabled: true
763
761
  }, currentLocale).format(rawValue);
764
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueUnscaled", kpiValueUnscaled); // Value formatted with the scale omitted
762
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueUnscaled"), kpiValueUnscaled); // Value formatted with the scale omitted
765
763
 
766
764
  var kpiValueNoScale = NumberFormat.getFloatInstance({
767
765
  style: isPercentage ? undefined : "short",
@@ -769,7 +767,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
769
767
  maxFractionDigits: 1,
770
768
  showScale: false
771
769
  }, currentLocale).format(rawValue);
772
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueNoScale", kpiValueNoScale); // Scale of the value
770
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueNoScale"), kpiValueNoScale); // Scale of the value
773
771
 
774
772
  var kpiValueScale = NumberFormat.getFloatInstance({
775
773
  style: isPercentage ? undefined : "short",
@@ -777,18 +775,18 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
777
775
  maxIntegerDigits: 0,
778
776
  showScale: true
779
777
  }, currentLocale).format(rawValue);
780
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueScale", kpiValueScale); // /////////////////////
778
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueScale"), kpiValueScale); // /////////////////////
781
779
  // Unit or currency
782
780
 
783
781
  if (kpiDefinition.datapoint.unit && rawUnit) {
784
782
  if (kpiDefinition.datapoint.unit.isCurrency) {
785
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainUnit", rawUnit);
783
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), rawUnit);
786
784
  } else {
787
785
  // In case of unit of measure, we have to format it properly
788
786
  var kpiUnit = NumberFormat.getUnitInstance({
789
787
  showNumber: false
790
788
  }, currentLocale).format(rawValue, rawUnit);
791
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainUnit", kpiUnit);
789
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), kpiUnit);
792
790
  }
793
791
  }
794
792
  };
@@ -821,8 +819,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
821
819
  }
822
820
  }
823
821
 
824
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainCriticality", criticalityValue);
825
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainState", ValueColorFromMessageType[criticalityValue] || "None");
822
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainCriticality"), criticalityValue);
823
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainState"), ValueColorFromMessageType[criticalityValue] || "None");
826
824
  };
827
825
 
828
826
  _proto.updateDatapointTrend = function updateDatapointTrend(kpiDefinition, kpiContext, oKPIModel) {
@@ -848,7 +846,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
848
846
  trendValue = deviationIndicatorFromCalculation(rawValue, trendReferenceValue, !!kpiDefinition.datapoint.trendCalculationIsRelative, kpiDefinition.datapoint.trendCalculationTresholds);
849
847
  }
850
848
 
851
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
849
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/trend"), trendValue);
852
850
  };
853
851
 
854
852
  _proto.updateTargetValue = function updateTargetValue(kpiDefinition, kpiContext, oKPIModel) {
@@ -880,8 +878,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
880
878
  maxIntegerDigits: 0,
881
879
  showScale: true
882
880
  }, currentLocale).format(targetRawValue);
883
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/targetNumber", targetValue);
884
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/targetUnit", targetScale);
881
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetNumber"), targetValue);
882
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetUnit"), targetScale);
885
883
 
886
884
  if (deviationRawValue !== undefined) {
887
885
  var deviationValue = NumberFormat.getFloatInstance({
@@ -889,19 +887,19 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
889
887
  maxFractionDigits: 1,
890
888
  showScale: false
891
889
  }, currentLocale).format(deviationRawValue);
892
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/deviationNumber", deviationValue);
890
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), deviationValue);
893
891
  } else {
894
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/deviationNumber", "N/A");
892
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), "N/A");
895
893
  }
896
894
  }
897
895
  /**
898
896
  * Loads tag data for a KPI, and stores it in the JSON KPI model.
899
897
  *
900
- * @param {KPIDefinition} kpiDefinition The definition of the KPI.
901
- * @param {ODataModel} oMainModel The model used to load the data.
902
- * @param {JSONModel} oKPIModel The JSON model where the data will be stored
898
+ * @param kpiDefinition The definition of the KPI.
899
+ * @param oMainModel The model used to load the data.
900
+ * @param oKPIModel The JSON model where the data will be stored
903
901
  * @param loadFull If not true, loads only data for the KPI tag
904
- * @returns {Promise} Returns the promise that is resolved when data is loaded.
902
+ * @returns Returns the promise that is resolved when data is loaded.
905
903
  */
906
904
  ;
907
905
 
@@ -912,7 +910,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
912
910
 
913
911
  // If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
914
912
  // If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
915
- var oListBinding = loadFull ? oMainModel.bindList("/" + kpiDefinition.entitySet) : oMainModel.bindList("/" + kpiDefinition.entitySet, undefined, undefined, undefined, {
913
+ var oListBinding = loadFull ? oMainModel.bindList("/".concat(kpiDefinition.entitySet)) : oMainModel.bindList("/".concat(kpiDefinition.entitySet), undefined, undefined, undefined, {
916
914
  $$groupId: "$auto.LongRunners"
917
915
  });
918
916
  var oAggregate = {}; // Main value + currency/unit
@@ -964,17 +962,17 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
964
962
 
965
963
  if (kpiDefinition.datapoint.unit && !rawUnit) {
966
964
  // A unit/currency is defined, but its value is undefined --> multi-unit situation
967
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValue", "*");
968
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueUnscaled", "*");
969
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueNoScale", "*");
970
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainValueScale", "");
971
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainUnit", undefined);
972
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainCriticality", MessageType.None);
973
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/mainState", "None");
974
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", "None");
975
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/targetNumber", undefined);
976
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/targetUnit", undefined);
977
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/deviationNumber", undefined);
965
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValue"), "*");
966
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueUnscaled"), "*");
967
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueNoScale"), "*");
968
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueScale"), "");
969
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), undefined);
970
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainCriticality"), MessageType.None);
971
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainState"), "None");
972
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/trend"), "None");
973
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetNumber"), undefined);
974
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetUnit"), undefined);
975
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), undefined);
978
976
  } else {
979
977
  _this2.updateDatapointValueAndCurrency(kpiDefinition, aContexts[0], oKPIModel);
980
978
 
@@ -992,17 +990,17 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
992
990
  /**
993
991
  * Loads card data for a KPI, and stores it in the JSON KPI model.
994
992
  *
995
- * @param {KPIDefinition} kpiDefinition The definition of the KPI.
996
- * @param {ODataModel} oMainModel The model used to load the data.
997
- * @param {JSONModel} oKPIModel The JSON model where the data will be stored
998
- * @returns {Promise} Returns the promise that is resolved when data is loaded.
993
+ * @param kpiDefinition The definition of the KPI.
994
+ * @param oMainModel The model used to load the data.
995
+ * @param oKPIModel The JSON model where the data will be stored
996
+ * @returns Returns the promise that is resolved when data is loaded.
999
997
  */
1000
998
  ;
1001
999
 
1002
1000
  _proto.loadKPICardData = function loadKPICardData(kpiDefinition, oMainModel, oKPIModel) {
1003
1001
  var _kpiDefinition$select3;
1004
1002
 
1005
- var oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
1003
+ var oListBinding = oMainModel.bindList("/".concat(kpiDefinition.entitySet));
1006
1004
  var oGroup = {};
1007
1005
  var oAggregate = {};
1008
1006
  kpiDefinition.chart.dimensions.forEach(function (dimension) {
@@ -1041,7 +1039,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
1041
1039
  });
1042
1040
  return oData;
1043
1041
  });
1044
- oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/chartData", chartData);
1042
+ oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/chartData"), chartData);
1045
1043
  });
1046
1044
  }
1047
1045
  /**
@@ -1115,7 +1113,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
1115
1113
  var oModel = oKPITag.getModel();
1116
1114
  var aPromises = [this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true), this.loadKPICardData(kpiDefinition, oModel, oKPIModel), this.getPopover(oKPITag)];
1117
1115
  Promise.all(aPromises).then(function (aResults) {
1118
- _this4.oCard.setManifest(oKPIModel.getProperty("/" + kpiID + "/manifest"));
1116
+ _this4.oCard.setManifest(oKPIModel.getProperty("/".concat(kpiID, "/manifest")));
1119
1117
 
1120
1118
  _this4.oCard.refresh();
1121
1119
 
@@ -1132,4 +1130,4 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "../helpers/ClassSupport",
1132
1130
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onKPIPressed", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "onKPIPressed"), _class2.prototype)), _class2)) || _class);
1133
1131
  return KPIManagementControllerExtension;
1134
1132
  }, false);
1135
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwibmFtZXMiOlsiTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIlZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGUiLCJOb25lIiwibWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24iLCJrcGlWYWx1ZSIsImFUaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIm1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24iLCJtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uIiwiZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSIsInRyZW5kVmFsdWUiLCJkZXZpYXRpb25JbmRpY2F0b3IiLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24iLCJyZWZlcmVuY2VWYWx1ZSIsImlzUmVsYXRpdmUiLCJjb21wVmFsdWUiLCJjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbiIsImZpbHRlckRlZmluaXRpb24iLCJyYW5nZXMiLCJsZW5ndGgiLCJGaWx0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiYVJhbmdlRmlsdGVycyIsIm1hcCIsInJhbmdlIiwiZmlsdGVycyIsImFuZCIsImdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uIiwiY3VycmVudExvY2FsZSIsIkxvY2FsZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZSIsInJlc0J1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJtZWFzdXJlcyIsImRpbWVuc2lvbnMiLCJ1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MiLCJjaGFydERlZmluaXRpb24iLCJvQ2hhcnRQcm9wZXJ0aWVzIiwiY2hhcnRUeXBlIiwiY2F0ZWdvcnlBeGlzIiwidGl0bGUiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJyb2xlIiwiZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMiLCJheGlzMU1lYXN1cmVzIiwiYXhpczJNZWFzdXJlcyIsImF4aXMzTWVhc3VyZXMiLCJvdGhlck1lYXN1cmVzIiwic2VyaWVzRGltZW5zaW9ucyIsInNoYXBlRGltZW5zaW9uIiwiZmluZCIsInhNZWFzdXJlIiwic2hpZnQiLCJ5TWVhc3VyZSIsInNpemVNZWFzdXJlIiwicHVzaCIsImdldENoYXJ0RmVlZHMiLCJnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdkluZm8iLCJvU2hlbGxTZXJ2aWNlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJnZXRMaW5rcyIsInRoZW4iLCJhTGlua3MiLCJnZXRQcmltYXJ5SW50ZW50Iiwib0xpbmsiLCJvSW5mbyIsInBhcnNlU2hlbGxIYXNoIiwiaW50ZW50IiwidW5hdmFpbGFibGVBY3Rpb25zIiwib3V0Ym91bmROYXZpZ2F0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvdXRib3VuZCIsIktQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImluaXRDYXJkTWFuaWZlc3QiLCJrcGlEZWZpbml0aW9uIiwib0tQSU1vZGVsIiwib0NhcmRNYW5pZmVzdCIsImlkIiwidGVjaG5vbG9neSIsImRhdGEiLCJqc29uIiwiaGVhZGVyIiwiZGF0YXBvaW50Iiwic3ViVGl0bGUiLCJkZXNjcmlwdGlvbiIsInVuaXRPZk1lYXN1cmVtZW50IiwibWFpbkluZGljYXRvciIsIm51bWJlciIsInVuaXQiLCJzdGF0ZSIsInRyZW5kIiwiY29udGVudCIsIm1pbkhlaWdodCIsImNoYXJ0UHJvcGVydGllcyIsInBhdGgiLCJ0YXJnZXRQYXRoIiwidGFyZ2V0VmFsdWUiLCJzaWRlSW5kaWNhdG9ycyIsInNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucyIsImFEZXNjcmlwdGlvbnMiLCJmb3JFYWNoIiwiZGVzYyIsImRldGFpbHMiLCJ0ZXh0IiwidmFsdWUiLCJuYW1lIiwibWVhc3VyZSIsImZlZWRzIiwic2V0UHJvcGVydHkiLCJtYW5pZmVzdCIsImluaXROYXZpZ2F0aW9uSW5mbyIsIm5hdmlnYXRpb24iLCJvTmF2SW5mbyIsInBhcmFtZXRlcnMiLCJvbkluaXQiLCJhS1BJRGVmaW5pdGlvbnMiLCJnZXRLUElEYXRhIiwib1ZpZXciLCJnZXRWaWV3Iiwib0FwcENvbXBvbmVudCIsImdldENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJzQ3VzdG9tRGF0YSIsImdldENvbnRlbnQiLCJ2RGF0YSIsIkpTT04iLCJwYXJzZSIsInVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3kiLCJrcGlDb250ZXh0IiwicmF3VW5pdCIsImlzUGF0aCIsImdldFByb3BlcnR5IiwiaXNQZXJjZW50YWdlIiwiaXNDdXJyZW5jeSIsInJhd1ZhbHVlIiwiTnVtYmVyIiwicGFyc2VGbG9hdCIsIk51bWJlckZvcm1hdCIsImdldEZsb2F0SW5zdGFuY2UiLCJtaW5GcmFjdGlvbkRpZ2l0cyIsIm1heEZyYWN0aW9uRGlnaXRzIiwic2hvd1NjYWxlIiwia3BpVmFsdWVVbnNjYWxlZCIsImdyb3VwaW5nRW5hYmxlZCIsImtwaVZhbHVlTm9TY2FsZSIsImtwaVZhbHVlU2NhbGUiLCJkZWNpbWFscyIsIm1heEludGVnZXJEaWdpdHMiLCJrcGlVbml0IiwiZ2V0VW5pdEluc3RhbmNlIiwic2hvd051bWJlciIsInVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5IiwiY3JpdGljYWxpdHlWYWx1ZSIsImNyaXRpY2FsaXR5UGF0aCIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUiLCJ1cGRhdGVEYXRhcG9pbnRUcmVuZCIsInRyZW5kUGF0aCIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRSZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsInVwZGF0ZVRhcmdldFZhbHVlIiwidGFyZ2V0UmF3VmFsdWUiLCJkZXZpYXRpb25SYXdWYWx1ZSIsInRhcmdldFNjYWxlIiwiZGV2aWF0aW9uVmFsdWUiLCJvTWFpbk1vZGVsIiwibG9hZEZ1bGwiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImVudGl0eVNldCIsIiQkZ3JvdXBJZCIsIm9BZ2dyZWdhdGUiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImFGaWx0ZXJzIiwicmVxdWVzdENvbnRleHRzIiwiYUNvbnRleHRzIiwibG9hZEtQSUNhcmREYXRhIiwib0dyb3VwIiwiZ3JvdXAiLCJzb3J0T3JkZXIiLCJzb3J0Iiwic29ydEluZm8iLCJTb3J0ZXIiLCJkZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJvUG9wb3ZlciIsInJlamVjdCIsImxvYWRMaWJyYXJ5IiwiYXN5bmMiLCJyZXF1aXJlIiwiQ2FyZCIsIkhvc3QiLCJvSG9zdCIsImF0dGFjaEFjdGlvbiIsIm9FdmVudCIsInNUeXBlIiwiZ2V0UGFyYW1ldGVyIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRlT3V0Ym91bmQiLCJvQ2FyZCIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SG9zdCIsIlBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiYWRkRGVwZW5kZW50Iiwib25LUElQcmVzc2VkIiwia3BpSUQiLCJvRGVmIiwib01vZGVsIiwiYVByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJzZXRNYW5pZmVzdCIsInJlZnJlc2giLCJvcGVuQnkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxNQUFNQSwwQkFBdUQsR0FBRztBQUMvRCxTQUFLQyxXQUFXLENBQUNDLEtBRDhDO0FBRS9ELFNBQUtELFdBQVcsQ0FBQ0UsT0FGOEM7QUFHL0QsU0FBS0YsV0FBVyxDQUFDRyxPQUg4QztBQUkvRCxTQUFLSCxXQUFXLENBQUNJO0FBSjhDLEdBQWhFO0FBT0EsTUFBTUMseUJBQXNELEdBQUc7QUFDOURKLElBQUFBLEtBQUssRUFBRSxPQUR1RDtBQUU5REMsSUFBQUEsT0FBTyxFQUFFLFVBRnFEO0FBRzlEQyxJQUFBQSxPQUFPLEVBQUUsTUFIcUQ7QUFJOURDLElBQUFBLFdBQVcsRUFBRSxNQUppRDtBQUs5REUsSUFBQUEsSUFBSSxFQUFFO0FBTHdELEdBQS9EO0FB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QUcsQ0FBQ0MsS0FBSixDQUFVRixHQUFWO0FBQ0EsV0FWRjtBQVdBO0FBQ0Q7QUFDRCxLOzs7SUF6bUI2Q2lILG1CO1NBNG1CaEMxSyxnQyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBLUElDaGFydERlZmluaXRpb24sIEtQSURlZmluaXRpb24sIE5hdmlnYXRpb25JbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgeyBGaWx0ZXJEZWZpbml0aW9uLCBSYW5nZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwic2FwL3VpL2NvcmUvTG9jYWxlXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEdlbmVyaWNUYWcgZnJvbSBcInNhcC9tL0dlbmVyaWNUYWdcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eTogUmVjb3JkPHN0cmluZywgTWVzc2FnZVR5cGU+ID0ge1xuXHRcIjFcIjogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFwiMlwiOiBNZXNzYWdlVHlwZS5XYXJuaW5nLFxuXHRcIjNcIjogTWVzc2FnZVR5cGUuU3VjY2Vzcyxcblx0XCI1XCI6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXG59O1xuXG5jb25zdCBWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlOiBSZWNvcmQ8TWVzc2FnZVR5cGUsIHN0cmluZz4gPSB7XG5cdEVycm9yOiBcIkVycm9yXCIsXG5cdFdhcm5pbmc6IFwiQ3JpdGljYWxcIixcblx0U3VjY2VzczogXCJHb29kXCIsXG5cdEluZm9ybWF0aW9uOiBcIk5vbmVcIixcblx0Tm9uZTogXCJOb25lXCJcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdUYXJnZXQnLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyB7TWVzc2FnZVR5cGV9IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s1XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzVdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s0XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzRdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01pbmltaXplJy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0ge251bWJlcltdfSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0FjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyB7TWVzc2FnZVR5cGV9IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNYXhpbWl6ZScuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIHtudW1iZXJbXX0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVdLlxuICogQHJldHVybnMge01lc3NhZ2VUeXBlfSBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciB2YWx1ZSBmcm9tIGEgdHJlbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB0cmVuZFZhbHVlIFRoZSBjcml0aWNhbGl0eSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKHRyZW5kVmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRzd2l0Y2ggKHRyZW5kVmFsdWUpIHtcblx0XHRjYXNlIDE6IC8vIFN0cm9uZ1VwXG5cdFx0Y2FzZSBcIjFcIjpcblx0XHRjYXNlIDI6IC8vIFVwXG5cdFx0Y2FzZSBcIjJcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSA0OiAvLyBEb3duXG5cdFx0Y2FzZSBcIjRcIjpcblx0XHRjYXNlIDU6IC8vIFN0cm9uZ0Rvd25cblx0XHRjYXNlIFwiNVwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIGZyb20gYSBUcmVuZENhbGN1bGF0aW9uLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSVxuICogQHBhcmFtIHJlZmVyZW5jZVZhbHVlIFRoZSByZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcGFyYW0gaXNSZWxhdGl2ZSBUcnVlIGlzIHRoZSBjb21wYXJpc29uIGlzIHJlbGF0aXZlXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgQXJyYXkgb2YgdGhyZXNob2xkcyBbU3Ryb25nRG93bkRpZmZlcmVuY2UsIERvd25EaWZmZXJlbmNlLCBVcERpZmZlcmVuY2UsIFN0cm9uZ1VwRGlmZmVyZW5jZV1cbiAqIEByZXR1cm5zIHtzYXAubS5EZXZpYXRpb25JbmRpY2F0b3J9IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0a3BpVmFsdWU6IG51bWJlcixcblx0cmVmZXJlbmNlVmFsdWU6IG51bWJlcixcblx0aXNSZWxhdGl2ZTogYm9vbGVhbixcblx0YVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0aWYgKCFhVGhyZXNob2xkcyB8fCAoaXNSZWxhdGl2ZSAmJiAhcmVmZXJlbmNlVmFsdWUpKSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG5cblx0Y29uc3QgY29tcFZhbHVlID0gaXNSZWxhdGl2ZSA/IChrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlKSAvIHJlZmVyZW5jZVZhbHVlIDoga3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMF0pIHtcblx0XHQvLyBTdHJvbmdEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMV0pIHtcblx0XHQvLyBEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbM10pIHtcblx0XHQvLyBTdHJvbmdVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbMl0pIHtcblx0XHQvLyBVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2lkZXdheXMgLS0+IE5vbmVcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSBhIGZpbHRlciBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJEZWZpbml0aW9uIFRoZSBmaWx0ZXIgZGVmaW5pdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZGVmaW5pdGlvbiwgb3IgdW5kZWZpbmVkIGlmIHRoZSBkZWZpbml0aW9uIGlzIGVtcHR5IChubyByYW5nZXMpXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcihcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUxvdyxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlSGlnaFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgYVJhbmdlRmlsdGVycyA9IGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcChyYW5nZSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFSYW5nZUZpbHRlcnMsXG5cdFx0XHRhbmQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKFxuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldENvbmZpZ3VyYXRpb24oKVxuXHRcdFx0LmdldExhbmd1YWdlKClcblx0KTtcblx0Y29uc3QgcmVzQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0Y29uc3QgZGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHsgc3R5bGU6IFwibWVkaXVtXCIgfSwgY3VycmVudExvY2FsZSk7XG5cblx0ZnVuY3Rpb24gZm9ybWF0UmFuZ2UocmFuZ2U6IFJhbmdlRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVMb3cgPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwID8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VMb3cpKSA6IHJhbmdlLnJhbmdlTG93O1xuXHRcdGNvbnN0IHZhbHVlSGlnaCA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgPyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUhpZ2gpKSA6IHJhbmdlLnJhbmdlSGlnaDtcblxuXHRcdHN3aXRjaCAocmFuZ2Uub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0XHRyZXR1cm4gXCJbXCIgKyB2YWx1ZUxvdyArIFwiIC0gXCIgKyB2YWx1ZUhpZ2ggKyBcIl1cIjtcblxuXHRcdFx0Y2FzZSBcIkNvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiBcIipcIiArIHZhbHVlTG93ICsgXCIqXCI7XG5cblx0XHRcdGNhc2UgXCJHRVwiOlxuXHRcdFx0XHRyZXR1cm4gXCJcXHUyMjY1XCIgKyB2YWx1ZUxvdztcblxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRcdHJldHVybiBcIj5cIiArIHZhbHVlTG93O1xuXG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdFx0cmV0dXJuIFwiXFx1MjI2NFwiICsgdmFsdWVMb3c7XG5cblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0XHRyZXR1cm4gXCI8XCIgKyB2YWx1ZUxvdztcblxuXHRcdFx0Y2FzZSBcIk5CXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtcIltcIiArIHZhbHVlTG93ICsgXCIgLSBcIiArIHZhbHVlSGlnaCArIFwiXVwiXSk7XG5cblx0XHRcdGNhc2UgXCJORVwiOlxuXHRcdFx0XHRyZXR1cm4gXCJcXHUyMjYwXCIgKyB2YWx1ZUxvdztcblxuXHRcdFx0Y2FzZSBcIk5vdENvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtcIipcIiArIHZhbHVlTG93ICsgXCIqXCJdKTtcblxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVMb3c7XG5cdFx0fVxuXHR9XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmFuZ2UoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIihcIiArIGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcChmb3JtYXRSYW5nZSkuam9pbihcIixcIikgKyBcIilcIjtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDaGFydFRpdGxlKGtwaURlZjogS1BJRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0ZnVuY3Rpb24gZm9ybWF0TGlzdChpdGVtczogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKSB7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpdGVtc1swXS5sYWJlbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IGl0ZW1zWzBdLmxhYmVsO1xuXHRcdFx0Zm9yIChsZXQgSSA9IDE7IEkgPCBpdGVtcy5sZW5ndGggLSAxOyBJKyspIHtcblx0XHRcdFx0cmVzICs9IFwiLCBcIiArIGl0ZW1zW0ldLmxhYmVsO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSVRFTVNMSVNUXCIsIFtyZXMsIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLmxhYmVsXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0NIQVJUVElUTEVcIiwgW2Zvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0Lm1lYXN1cmVzKSwgZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQuZGltZW5zaW9ucyldKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hhcnRMYWJlbFNldHRpbmdzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uLCBvQ2hhcnRQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHQvLyBTaG93IGRhdGEgbGFiZWxzLCBkbyBub3Qgc2hvdyBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwidmFsdWVcIixcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRfTUZEMlwiXG5cdFx0XHR9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0XHQvLyBTaG93IGF4aXMgdGl0bGUsIGJ1YmJsZSBzaXplIGxlZ2VuZCwgZG8gbm90IHNob3cgZGF0YSBsYWJlbHNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMubGVnZW5kR3JvdXAgPSB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdGFsaWdubWVudDogXCJ0b3BMZWZ0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuc2l6ZUxlZ2VuZCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0fVxufVxuZnVuY3Rpb24gZmlsdGVyTWFwKGFPYmplY3RzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W10sIGFSb2xlcz86IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmdbXSB7XG5cdGlmIChhUm9sZXMgJiYgYVJvbGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBhT2JqZWN0c1xuXHRcdFx0LmZpbHRlcihkaW1lbnNpb24gPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVJvbGVzLmluZGV4T2YoZGltZW5zaW9uLnJvbGUpID49IDA7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChkaW1lbnNpb24gPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzLm1hcChkaW1lbnNpb24gPT4ge1xuXHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRjb25zdCBheGlzMU1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczFcIl0pO1xuXHRjb25zdCBheGlzMk1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pO1xuXHRjb25zdCBheGlzM01lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczNcIl0pO1xuXHRjb25zdCBvdGhlck1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZF0pO1xuXHRjb25zdCBzZXJpZXNEaW1lbnNpb25zID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pO1xuXG5cdC8vIEdldCB0aGUgZmlyc3QgZGltZW5zaW9uIHdpdGggcm9sZSBcIkNhdGVnb3J5XCIgZm9yIHRoZSBzaGFwZVxuXHRjb25zdCBzaGFwZURpbWVuc2lvbiA9IGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLmZpbmQoZGltZW5zaW9uID0+IHtcblx0XHRyZXR1cm4gZGltZW5zaW9uLnJvbGUgPT09IFwiQ2F0ZWdvcnlcIjtcblx0fSk7XG5cblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHgtQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMxLCBvciBmb3IgQXhpczIgaWYgbm90IGZvdW5kLCBvciBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHhNZWFzdXJlID0gYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB5LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMiwgb3Igc2Vjb25kIG1lYXN1cmUgZm9yIEF4aXMxIGlmIG5vdCBmb3VuZCwgb3IgZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHlNZWFzdXJlID0gYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdGNvbnN0IHJlcyA9IFtcblx0XHR7XG5cdFx0XHRcInVpZFwiOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogW3hNZWFzdXJlXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0XCJ1aWRcIjogXCJ2YWx1ZUF4aXMyXCIsXG5cdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBbeU1lYXN1cmVdXG5cdFx0fVxuXHRdO1xuXG5cdGlmIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlID09PSBcImJ1YmJsZVwiKSB7XG5cdFx0Ly8gTWVhc3VyZSBmb3IgdGhlIHNpemUgb2YgdGhlIGJ1YmJsZTogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMsIG9yIHJlbWFpbmluZyBtZWFzdXJlIGZvciBBeGlzMS9BeGlzMiBpZiBub3QgZm91bmRcblx0XHRjb25zdCBzaXplTWVhc3VyZSA9IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdFwidWlkXCI6IFwiYnViYmxlV2lkdGhcIixcblx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFwidmFsdWVzXCI6IFtzaXplTWVhc3VyZV1cblx0XHR9KTtcblx0fVxuXG5cdC8vIENvbG9yIChvcHRpb25hbClcblx0aWYgKHNlcmllc0RpbWVuc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0XCJ1aWRcIjogXCJjb2xvclwiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBzZXJpZXNEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH1cblx0Ly8gU2hhcGUgKG9wdGlvbmFsKVxuXHRpZiAoc2hhcGVEaW1lbnNpb24pIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHRcInVpZFwiOiBcInNoYXBlXCIsXG5cdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFwidmFsdWVzXCI6IFtzaGFwZURpbWVuc2lvbi5sYWJlbF1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGxldCByZXM6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W107XG5cblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcInNpemVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY29sb3JcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMpXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0cmVzID0gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInZlcnRpY2FsX2J1bGxldFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJhY3R1YWxWYWx1ZXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZCwgXCJBeGlzMVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwidGFyZ2V0VmFsdWVzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0bmF2SW5mbzogTmF2aWdhdGlvbkluZm8sXG5cdG9TaGVsbFNlcnZpY2U6IGFueVxuKTogUHJvbWlzZTx7IHNlbWFudGljT2JqZWN0Pzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmc7IG91dGJvdW5kPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcblx0aWYgKG5hdkluZm8uc2VtYW50aWNPYmplY3QpIHtcblx0XHRpZiAobmF2SW5mby5hY3Rpb24pIHtcblx0XHRcdC8vIEFjdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZDogY2hlY2sgaWYgaXQncyBhdmFpbGFibGUgaW4gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRMaW5rcyh7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0pLnRoZW4oKGFMaW5rczogYW55W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggPyB7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgZ2V0IHRoZSBwcmltYXJ5IGludGVudCBmcm9tIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChuYXZJbmZvLnNlbWFudGljT2JqZWN0KS50aGVuKChvTGluazogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBObyBwcmltYXJ5IGludGVudC4uLlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0aGF0IHRoZSBwcmltYXJ5IGludGVudCBpcyBub3QgcGFydCBvZiB0aGUgdW5hdmFpbGFibGUgYWN0aW9uc1xuXHRcdFx0XHRjb25zdCBvSW5mbyA9IG9TaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2gob0xpbmsuaW50ZW50KTtcblx0XHRcdFx0cmV0dXJuIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zICYmIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zLmluZGV4T2Yob0luZm8uYWN0aW9uKSA+PSAwXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHsgc2VtYW50aWNPYmplY3Q6IG9JbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG9JbmZvLmFjdGlvbiB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE91dGJvdW5kIG5hdmlnYXRpb24gc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHJldHVybiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiA/IFByb21pc2UucmVzb2x2ZSh7IG91dGJvdW5kOiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiB9KSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQGNsYXNzIEEgY29udHJvbGxlciBleHRlbnNpb24gZm9yIG1hbmFnaW5nIHRoZSBLUElzIGluIGFuIGFuYWx5dGljYWwgbGlzdCBwYWdlXG4gKlxuICogQG5hbWUgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuS1BJTWFuYWdlbWVudFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICpcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS45My4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLktQSU1hbmFnZW1lbnRcIilcbmNsYXNzIEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBhS1BJRGVmaW5pdGlvbnM/OiBLUElEZWZpbml0aW9uW107XG5cdHByb3RlY3RlZCBvQ2FyZDogYW55O1xuXHRwcm90ZWN0ZWQgb1BvcG92ZXIhOiBQb3BvdmVyO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjYXJkIG1hbmlmZXN0IGZvciBhIEtQSSBkZWZpbml0aW9uIGFuZCBzdG9yZXMgaXQgaW4gYSBKU09OIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgS1BJIGRlZmluaXRpb25cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCBpbiB3aGljaCB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBzdG9yZWRcblx0ICovXG5cdHByb3RlY3RlZCBpbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NhcmRNYW5pZmVzdDogYW55ID0ge1xuXHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0aWQ6IFwic2FwLmZlXCIsXG5cdFx0XHRcdHR5cGU6IFwiY2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAudWlcIjoge1xuXHRcdFx0XHR0ZWNobm9sb2d5OiBcIlVJNVwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAuY2FyZFwiOiB7XG5cdFx0XHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0anNvbjoge31cblx0XHRcdFx0fSxcblx0XHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJOdW1lcmljXCIsXG5cdFx0XHRcdFx0dGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRpdGxlLFxuXHRcdFx0XHRcdHN1YlRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR1bml0T2ZNZWFzdXJlbWVudDogXCJ7bWFpblVuaXR9XCIsXG5cdFx0XHRcdFx0bWFpbkluZGljYXRvcjoge1xuXHRcdFx0XHRcdFx0bnVtYmVyOiBcInttYWluVmFsdWVOb1NjYWxlfVwiLFxuXHRcdFx0XHRcdFx0dW5pdDogXCJ7bWFpblZhbHVlU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHRzdGF0ZTogXCJ7bWFpblN0YXRlfVwiLFxuXHRcdFx0XHRcdFx0dHJlbmQ6IFwie3RyZW5kfVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0bWluSGVpZ2h0OiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0Y2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRwbG90QXJlYToge30sXG5cdFx0XHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwibGVmdFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIi9jaGFydERhdGFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBBZGQgc2lkZSBpbmRpY2F0b3JzIGluIHRoZSBjYXJkIGhlYWRlciBpZiBhIHRhcmdldCBpcyBkZWZpbmVkIGZvciB0aGUgS1BJXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuc2lkZUluZGljYXRvcnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX1RBUkdFVFwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie3RhcmdldE51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcInt0YXJnZXRVbml0fVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX0RFVklBVElPTlwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie2RldmlhdGlvbk51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcIiVcIlxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdC8vIERldGFpbHMgb2YgdGhlIGNhcmQ6IGZpbHRlciBkZXNjcmlwdGlvbnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLmZvckVhY2goZmlsdGVyRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoZGltZW5zaW9uID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsIHZhbHVlOiBcIntcIiArIGRpbWVuc2lvbi5uYW1lICsgXCJ9XCIgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5tZWFzdXJlcyA9IGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMubWFwKG1lYXN1cmUgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IG1lYXN1cmUubGFiZWwsIHZhbHVlOiBcIntcIiArIG1lYXN1cmUubmFtZSArIFwifVwiIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZmVlZHMgPSBnZXRDaGFydEZlZWRzKGtwaURlZmluaXRpb24uY2hhcnQpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCwge1xuXHRcdFx0bWFuaWZlc3Q6IG9DYXJkTWFuaWZlc3Rcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBpbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb0tQSU1vZGVsOiBKU09OTW9kZWwsIG9TaGVsbFNlcnZpY2U6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEFkZCBuYXZpZ2F0aW9uXG5cdFx0aWYgKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbiwgb1NoZWxsU2VydmljZSkudGhlbihvTmF2SW5mbyA9PiB7XG5cdFx0XHRcdGlmIChvTmF2SW5mbykge1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9oZWFkZXIvYWN0aW9uc1wiLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvTmF2SW5mb1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMgPSB0aGlzLmdldEtQSURhdGEoKTtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcikuZ2V0QXBwQ29tcG9uZW50KCkgYXMgYW55O1xuXG5cdFx0XHQvLyBDcmVhdGUgYSBKU09OIG1vZGVsIHRvIHN0b3JlIEtQSSBkYXRhXG5cdFx0XHRjb25zdCBvS1BJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0XHRvVmlldy5zZXRNb2RlbChvS1BJTW9kZWwsIFwia3BpTW9kZWxcIik7XG5cblx0XHRcdHRoaXMuYUtQSURlZmluaXRpb25zLmZvckVhY2goa3BpRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgbWFuaWZlc3QgZm9yIHRoZSBLUEkgY2FyZCBhbmQgc3RvcmUgaXQgaW4gdGhlIEtQSSBtb2RlbFxuXHRcdFx0XHR0aGlzLmluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIG5hdmlnYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdHRoaXMuaW5pdE5hdmlnYXRpb25JbmZvKGtwaURlZmluaXRpb24sIG9LUElNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkpLmNhdGNoKGZ1bmN0aW9uKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIExvYWQgdGFnIGRhdGEgZm9yIHRoZSBLUElcblx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvQXBwQ29tcG9uZW50LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCwgb0tQSU1vZGVsKS5jYXRjaChmdW5jdGlvbihlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAob0tQSU1vZGVsKSB7XG5cdFx0XHRvS1BJTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0S1BJRGF0YSgpOiBLUElEZWZpbml0aW9uW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRzQ3VzdG9tRGF0YSA9IG9WaWV3LmdldENvbnRlbnQoKVswXS5kYXRhKFwiS1BJRGF0YVwiKTtcblxuXHRcdGlmIChzQ3VzdG9tRGF0YSkge1xuXHRcdFx0Y29uc3QgdkRhdGEgPSB0eXBlb2Ygc0N1c3RvbURhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNDdXN0b21EYXRhKSA6IHNDdXN0b21EYXRhO1xuXHRcdFx0aWYgKFwiY3VzdG9tRGF0YVwiIGluIHZEYXRhKSB7XG5cdFx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdkRhdGE7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVwiLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRcIiwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZVwiLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlXCIsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdFwiLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRcIiwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eVwiLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlXCIsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZFwiLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblxuXHRcdGxldCB0YXJnZXRSYXdWYWx1ZTogbnVtYmVyO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBcIlwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGRldmlhdGlvblJhd1ZhbHVlID0gdGFyZ2V0UmF3VmFsdWUgIT09IDAgPyAoKHJhd1ZhbHVlIC0gdGFyZ2V0UmF3VmFsdWUpIC8gdGFyZ2V0UmF3VmFsdWUpICogMTAwIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9ybWF0dGluZ1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cdFx0Y29uc3QgdGFyZ2V0U2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlclwiLCB0YXJnZXRWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0XCIsIHRhcmdldFNjYWxlKTtcblxuXHRcdGlmIChkZXZpYXRpb25SYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZXZpYXRpb25WYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0XHQpLmZvcm1hdChkZXZpYXRpb25SYXdWYWx1ZSk7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlclwiLCBkZXZpYXRpb25WYWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyXCIsIFwiTi9BXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0YWcgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0tQSURlZmluaXRpb259IGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIHtPRGF0YU1vZGVsfSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSB7SlNPTk1vZGVsfSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHBhcmFtIGxvYWRGdWxsIElmIG5vdCB0cnVlLCBsb2FkcyBvbmx5IGRhdGEgZm9yIHRoZSBLUEkgdGFnXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCwgbG9hZEZ1bGw/OiBib29sZWFuKTogYW55IHtcblx0XHQvLyBJZiBsb2FkRnVsbD1mYWxzZSwgdGhlbiB3ZSdyZSBqdXN0IGxvYWRpbmcgZGF0YSBmb3IgdGhlIHRhZyBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgZ3JvdXBJRFxuXHRcdC8vIElmIGxvYWRGdWxsPXRydWUsIHdlJ3JlIGxvYWRpbmcgZGF0YSBmb3IgdGhlIHdob2xlIEtQSSAodGFnICsgY2FyZCkgYW5kIHdlIHVzZSB0aGUgZGVmYXVsdCAoXCIkYXV0b1wiKSBncm91cElEXG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gbG9hZEZ1bGxcblx0XHRcdD8gb01haW5Nb2RlbC5iaW5kTGlzdChcIi9cIiArIGtwaURlZmluaXRpb24uZW50aXR5U2V0KVxuXHRcdFx0OiBvTWFpbk1vZGVsLmJpbmRMaXN0KFwiL1wiICsga3BpRGVmaW5pdGlvbi5lbnRpdHlTZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoZmlsdGVyID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAxKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSkgPT4ge1xuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0XHRcdD8gYUNvbnRleHRzWzBdLmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiAhcmF3VW5pdCkge1xuXHRcdFx0XHRcdC8vIEEgdW5pdC9jdXJyZW5jeSBpcyBkZWZpbmVkLCBidXQgaXRzIHZhbHVlIGlzIHVuZGVmaW5lZCAtLT4gbXVsdGktdW5pdCBzaXR1YXRpb25cblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVwiLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZFwiLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlXCIsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlXCIsIFwiXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eVwiLCBNZXNzYWdlVHlwZS5Ob25lKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZVwiLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZFwiLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlclwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgY2FyZCBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7S1BJRGVmaW5pdGlvbn0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0ge09EYXRhTW9kZWx9IG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIHtKU09OTW9kZWx9IG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyB0aGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbG9hZEtQSUNhcmREYXRhKGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogYW55IHtcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvTWFpbk1vZGVsLmJpbmRMaXN0KFwiL1wiICsga3BpRGVmaW5pdGlvbi5lbnRpdHlTZXQpO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKGRpbWVuc2lvbiA9PiB7XG5cdFx0XHRvR3JvdXBbZGltZW5zaW9uLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKG1lYXN1cmUgPT4ge1xuXHRcdFx0b0FnZ3JlZ2F0ZVttZWFzdXJlLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHtcblx0XHRcdGdyb3VwOiBvR3JvdXAsXG5cdFx0XHRhZ2dyZWdhdGU6IG9BZ2dyZWdhdGVcblx0XHR9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcihmaWx0ZXIgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoc29ydEluZm8gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgU29ydGVyKHNvcnRJbmZvLm5hbWUsIHNvcnRJbmZvLmRlc2NlbmRpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1heEl0ZW1zKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSkgPT4ge1xuXHRcdFx0Y29uc3QgY2hhcnREYXRhID0gYUNvbnRleHRzLm1hcChmdW5jdGlvbihvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaChkaW1lbnNpb24gPT4ge1xuXHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaChtZWFzdXJlID0+IHtcblx0XHRcdFx0XHRvRGF0YVttZWFzdXJlLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkobWVhc3VyZS5uYW1lKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIG9EYXRhO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vY2hhcnREYXRhXCIsIGNoYXJ0RGF0YSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcG9wb3ZlciB0byBkaXNwbGF5IHRoZSBLUEkgY2FyZFxuXHQgKiBUaGUgcG9wb3ZlciBhbmQgdGhlIGNvbnRhaW5lZCBjYXJkIGZvciB0aGUgS1BJcyBhcmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuXG5cdCAqIFRoZSBwb3BvdmVyIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBLUElzLCBzbyBpdCdzIGNyZWF0ZWQgb25seSBvbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0tQSVRhZyBUaGUgdGFnIHRoYXQgdHJpZ2dlcmVkIHRoZSBwb3BvdmVyIG9wZW5pbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZWQgcG9wb3ZlciBhcyBhIHByb21pc2UuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0UG9wb3ZlcihvS1BJVGFnOiBHZW5lcmljVGFnKTogUHJvbWlzZTxQb3BvdmVyPiB7XG5cdFx0aWYgKCF0aGlzLm9Qb3BvdmVyKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQoQ29yZSBhcyBDb3JlRXgpXG5cdFx0XHRcdFx0LmxvYWRMaWJyYXJ5KFwic2FwL3VpL2ludGVncmF0aW9uXCIsIHsgYXN5bmM6IHRydWUgfSlcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdWkvaW50ZWdyYXRpb24vd2lkZ2V0cy9DYXJkXCIsIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIl0sIChDYXJkOiBhbnksIEhvc3Q6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvSG9zdCA9IG5ldyBIb3N0KCk7XG5cblx0XHRcdFx0XHRcdFx0b0hvc3QuYXR0YWNoQWN0aW9uKChvRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUeXBlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInR5cGVcIik7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwYXJhbWV0ZXJzXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIk5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbXMuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBhbnkpLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtcy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1zLmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBhbnkpLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVPdXRib3VuZChvUGFyYW1zLm91dGJvdW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQgPSBuZXcgQ2FyZCh7XG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg6IFwiMjVyZW1cIixcblx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldEhvc3Qob0hvc3QgYXMgYW55KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9Qb3BvdmVyID0gbmV3IFBvcG92ZXIoXCJrcGktUG9wb3ZlclwiLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBcIkF1dG9cIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBbdGhpcy5vQ2FyZF1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0b0tQSVRhZy5hZGREZXBlbmRlbnQodGhpcy5vUG9wb3Zlcik7IC8vIFRoZSBmaXJzdCBjbGlja2VkIHRhZyBnZXRzIHRoZSBwb3BvdmVyIGFzIGRlcGVuZGVudFxuXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBvbktQSVByZXNzZWQob0tQSVRhZzogYW55LCBrcGlJRDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gb0tQSVRhZy5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGtwaURlZmluaXRpb24gPSB0aGlzLmFLUElEZWZpbml0aW9ucy5maW5kKGZ1bmN0aW9uKG9EZWYpIHtcblx0XHRcdFx0cmV0dXJuIG9EZWYuaWQgPT09IGtwaUlEO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgYVByb21pc2VzID0gW1xuXHRcdFx0XHRcdHRoaXMubG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbiwgb01vZGVsLCBvS1BJTW9kZWwsIHRydWUpLFxuXHRcdFx0XHRcdHRoaXMubG9hZEtQSUNhcmREYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsKSxcblx0XHRcdFx0XHR0aGlzLmdldFBvcG92ZXIob0tQSVRhZylcblx0XHRcdFx0XTtcblxuXHRcdFx0XHRQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdFx0XHRcdFx0LnRoZW4oYVJlc3VsdHMgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRNYW5pZmVzdChvS1BJTW9kZWwuZ2V0UHJvcGVydHkoXCIvXCIgKyBrcGlJRCArIFwiL21hbmlmZXN0XCIpKTtcblx0XHRcdFx0XHRcdHRoaXMub0NhcmQucmVmcmVzaCgpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBvUG9wb3ZlciA9IGFSZXN1bHRzWzJdO1xuXHRcdFx0XHRcdFx0b1BvcG92ZXIub3BlbkJ5KG9LUElUYWcsIGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChlcnIgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
1133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwibmFtZXMiOlsiTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIlZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGUiLCJOb25lIiwibWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24iLCJrcGlWYWx1ZSIsImFUaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIm1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24iLCJtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uIiwiZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSIsInRyZW5kVmFsdWUiLCJkZXZpYXRpb25JbmRpY2F0b3IiLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24iLCJyZWZlcmVuY2VWYWx1ZSIsImlzUmVsYXRpdmUiLCJjb21wVmFsdWUiLCJjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbiIsImZpbHRlckRlZmluaXRpb24iLCJyYW5nZXMiLCJsZW5ndGgiLCJGaWx0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiYVJhbmdlRmlsdGVycyIsIm1hcCIsInJhbmdlIiwiZmlsdGVycyIsImFuZCIsImdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uIiwiY3VycmVudExvY2FsZSIsIkxvY2FsZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZSIsInJlc0J1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJtZWFzdXJlcyIsImRpbWVuc2lvbnMiLCJ1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MiLCJjaGFydERlZmluaXRpb24iLCJvQ2hhcnRQcm9wZXJ0aWVzIiwiY2hhcnRUeXBlIiwiY2F0ZWdvcnlBeGlzIiwidGl0bGUiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJyb2xlIiwiZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMiLCJheGlzMU1lYXN1cmVzIiwiYXhpczJNZWFzdXJlcyIsImF4aXMzTWVhc3VyZXMiLCJvdGhlck1lYXN1cmVzIiwic2VyaWVzRGltZW5zaW9ucyIsInNoYXBlRGltZW5zaW9uIiwiZmluZCIsInhNZWFzdXJlIiwic2hpZnQiLCJ5TWVhc3VyZSIsInNpemVNZWFzdXJlIiwicHVzaCIsImdldENoYXJ0RmVlZHMiLCJnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdkluZm8iLCJvU2hlbGxTZXJ2aWNlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJnZXRMaW5rcyIsInRoZW4iLCJhTGlua3MiLCJnZXRQcmltYXJ5SW50ZW50Iiwib0xpbmsiLCJvSW5mbyIsInBhcnNlU2hlbGxIYXNoIiwiaW50ZW50IiwidW5hdmFpbGFibGVBY3Rpb25zIiwib3V0Ym91bmROYXZpZ2F0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvdXRib3VuZCIsIktQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImluaXRDYXJkTWFuaWZlc3QiLCJrcGlEZWZpbml0aW9uIiwib0tQSU1vZGVsIiwib0NhcmRNYW5pZmVzdCIsImlkIiwidGVjaG5vbG9neSIsImRhdGEiLCJqc29uIiwiaGVhZGVyIiwiZGF0YXBvaW50Iiwic3ViVGl0bGUiLCJkZXNjcmlwdGlvbiIsInVuaXRPZk1lYXN1cmVtZW50IiwibWFpbkluZGljYXRvciIsIm51bWJlciIsInVuaXQiLCJzdGF0ZSIsInRyZW5kIiwiY29udGVudCIsIm1pbkhlaWdodCIsImNoYXJ0UHJvcGVydGllcyIsInBhdGgiLCJ0YXJnZXRQYXRoIiwidGFyZ2V0VmFsdWUiLCJzaWRlSW5kaWNhdG9ycyIsInNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucyIsImFEZXNjcmlwdGlvbnMiLCJmb3JFYWNoIiwiZGVzYyIsImRldGFpbHMiLCJ0ZXh0IiwidmFsdWUiLCJuYW1lIiwibWVhc3VyZSIsImZlZWRzIiwic2V0UHJvcGVydHkiLCJtYW5pZmVzdCIsImluaXROYXZpZ2F0aW9uSW5mbyIsIm5hdmlnYXRpb24iLCJvTmF2SW5mbyIsInBhcmFtZXRlcnMiLCJvbkluaXQiLCJhS1BJRGVmaW5pdGlvbnMiLCJnZXRLUElEYXRhIiwib1ZpZXciLCJnZXRWaWV3Iiwib0FwcENvbXBvbmVudCIsImdldENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJzQ3VzdG9tRGF0YSIsImdldENvbnRlbnQiLCJ2RGF0YSIsIkpTT04iLCJwYXJzZSIsInVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3kiLCJrcGlDb250ZXh0IiwicmF3VW5pdCIsImlzUGF0aCIsImdldFByb3BlcnR5IiwiaXNQZXJjZW50YWdlIiwiaXNDdXJyZW5jeSIsInJhd1ZhbHVlIiwiTnVtYmVyIiwicGFyc2VGbG9hdCIsIk51bWJlckZvcm1hdCIsImdldEZsb2F0SW5zdGFuY2UiLCJtaW5GcmFjdGlvbkRpZ2l0cyIsIm1heEZyYWN0aW9uRGlnaXRzIiwic2hvd1NjYWxlIiwia3BpVmFsdWVVbnNjYWxlZCIsImdyb3VwaW5nRW5hYmxlZCIsImtwaVZhbHVlTm9TY2FsZSIsImtwaVZhbHVlU2NhbGUiLCJkZWNpbWFscyIsIm1heEludGVnZXJEaWdpdHMiLCJrcGlVbml0IiwiZ2V0VW5pdEluc3RhbmNlIiwic2hvd051bWJlciIsInVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5IiwiY3JpdGljYWxpdHlWYWx1ZSIsImNyaXRpY2FsaXR5UGF0aCIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUiLCJ1cGRhdGVEYXRhcG9pbnRUcmVuZCIsInRyZW5kUGF0aCIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRSZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsInVwZGF0ZVRhcmdldFZhbHVlIiwidGFyZ2V0UmF3VmFsdWUiLCJkZXZpYXRpb25SYXdWYWx1ZSIsInRhcmdldFNjYWxlIiwiZGV2aWF0aW9uVmFsdWUiLCJvTWFpbk1vZGVsIiwibG9hZEZ1bGwiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImVudGl0eVNldCIsIiQkZ3JvdXBJZCIsIm9BZ2dyZWdhdGUiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImFGaWx0ZXJzIiwicmVxdWVzdENvbnRleHRzIiwiYUNvbnRleHRzIiwibG9hZEtQSUNhcmREYXRhIiwib0dyb3VwIiwiZ3JvdXAiLCJzb3J0T3JkZXIiLCJzb3J0Iiwic29ydEluZm8iLCJTb3J0ZXIiLCJkZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJvUG9wb3ZlciIsInJlamVjdCIsImxvYWRMaWJyYXJ5IiwiYXN5bmMiLCJyZXF1aXJlIiwiQ2FyZCIsIkhvc3QiLCJvSG9zdCIsImF0dGFjaEFjdGlvbiIsIm9FdmVudCIsInNUeXBlIiwiZ2V0UGFyYW1ldGVyIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRlT3V0Ym91bmQiLCJvQ2FyZCIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SG9zdCIsIlBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiYWRkRGVwZW5kZW50Iiwib25LUElQcmVzc2VkIiwia3BpSUQiLCJvRGVmIiwib01vZGVsIiwiYVByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJzZXRNYW5pZmVzdCIsInJlZnJlc2giLCJvcGVuQnkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxNQUFNQSwwQkFBdUQsR0FBRztBQUMvRCxTQUFLQyxXQUFXLENBQUNDLEtBRDhDO0FBRS9ELFNBQUtELFdBQVcsQ0FBQ0UsT0FGOEM7QUFHL0QsU0FBS0YsV0FBVyxDQUFDRyxPQUg4QztBQUkvRCxTQUFLSCxXQUFXLENBQUNJO0FBSjhDLEdBQWhFO0FBT0EsTUFBTUMseUJBQXNELEdBQUc7QUFDOURKLElBQUFBLEtBQUssRUFBRSxPQUR1RDtBQUU5REMsSUFBQUEsT0FBTyxFQUFFLFVBRnFEO0FBRzlEQyxJQUFBQSxPQUFPLEVBQUUsTUFIcUQ7QUFJOURDLElBQUFBLFdBQVcsRUFBRSxNQUppRDtBQUs5REUsSUFBQUEsSUFBSSxFQUFFO0FBTHdELEdBQS9EO0FB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QUksQ0FBQ2QsS0FBTCxDQUFXZSxXQUFYLENBQXVCakssU0FBUyxDQUFDbUUsV0FBVixZQUEwQndGLEtBQTFCLGVBQXZCOztBQUNBLFlBQUEsTUFBSSxDQUFDVCxLQUFMLENBQVdnQixPQUFYOztBQUVBLGdCQUFNaEMsUUFBUSxHQUFHOEIsUUFBUSxDQUFDLENBQUQsQ0FBekI7QUFDQTlCLFlBQUFBLFFBQVEsQ0FBQ2lDLE1BQVQsQ0FBZ0JsQyxPQUFoQixFQUF5QixLQUF6QjtBQUNBLFdBUEYsRUFRRS9FLEtBUkYsQ0FRUSxVQUFDQyxHQUFELEVBQVM7QUFDZkMsWUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVVGLEdBQVY7QUFDQSxXQVZGO0FBV0E7QUFDRDtBQUNELEs7OztJQS9sQjZDaUgsbUI7U0FrbUJoQzFLLGdDIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBLUElDaGFydERlZmluaXRpb24sIEtQSURlZmluaXRpb24sIE5hdmlnYXRpb25JbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uLCBSYW5nZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgR2VuZXJpY1RhZyBmcm9tIFwic2FwL20vR2VuZXJpY1RhZ1wiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcInNhcC91aS9jb3JlL0xvY2FsZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eTogUmVjb3JkPHN0cmluZywgTWVzc2FnZVR5cGU+ID0ge1xuXHRcIjFcIjogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFwiMlwiOiBNZXNzYWdlVHlwZS5XYXJuaW5nLFxuXHRcIjNcIjogTWVzc2FnZVR5cGUuU3VjY2Vzcyxcblx0XCI1XCI6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXG59O1xuXG5jb25zdCBWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlOiBSZWNvcmQ8TWVzc2FnZVR5cGUsIHN0cmluZz4gPSB7XG5cdEVycm9yOiBcIkVycm9yXCIsXG5cdFdhcm5pbmc6IFwiQ3JpdGljYWxcIixcblx0U3VjY2VzczogXCJHb29kXCIsXG5cdEluZm9ybWF0aW9uOiBcIk5vbmVcIixcblx0Tm9uZTogXCJOb25lXCJcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdUYXJnZXQnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzVdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s1XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s0XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzRdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbM10pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWluaW1pemUnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0FjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWF4aW1pemUnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZV0uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciB2YWx1ZSBmcm9tIGEgdHJlbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHRyZW5kVmFsdWUgVGhlIGNyaXRpY2FsaXR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUodHJlbmRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdHN3aXRjaCAodHJlbmRWYWx1ZSkge1xuXHRcdGNhc2UgMTogLy8gU3Ryb25nVXBcblx0XHRjYXNlIFwiMVwiOlxuXHRcdGNhc2UgMjogLy8gVXBcblx0XHRjYXNlIFwiMlwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIDQ6IC8vIERvd25cblx0XHRjYXNlIFwiNFwiOlxuXHRcdGNhc2UgNTogLy8gU3Ryb25nRG93blxuXHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgZnJvbSBhIFRyZW5kQ2FsY3VsYXRpb24uXG4gKlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJXG4gKiBAcGFyYW0gcmVmZXJlbmNlVmFsdWUgVGhlIHJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBpc1JlbGF0aXZlIFRydWUgaXMgdGhlIGNvbXBhcmlzb24gaXMgcmVsYXRpdmVcbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBBcnJheSBvZiB0aHJlc2hvbGRzIFtTdHJvbmdEb3duRGlmZmVyZW5jZSwgRG93bkRpZmZlcmVuY2UsIFVwRGlmZmVyZW5jZSwgU3Ryb25nVXBEaWZmZXJlbmNlXVxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRrcGlWYWx1ZTogbnVtYmVyLFxuXHRyZWZlcmVuY2VWYWx1ZTogbnVtYmVyLFxuXHRpc1JlbGF0aXZlOiBib29sZWFuLFxuXHRhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRpZiAoIWFUaHJlc2hvbGRzIHx8IChpc1JlbGF0aXZlICYmICFyZWZlcmVuY2VWYWx1ZSkpIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cblxuXHRjb25zdCBjb21wVmFsdWUgPSBpc1JlbGF0aXZlID8gKGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWUpIC8gcmVmZXJlbmNlVmFsdWUgOiBrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1swXSkge1xuXHRcdC8vIFN0cm9uZ0Rvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1sxXSkge1xuXHRcdC8vIERvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1szXSkge1xuXHRcdC8vIFN0cm9uZ1VwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1syXSkge1xuXHRcdC8vIFVwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBTaWRld2F5cyAtLT4gTm9uZVxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIGEgZmlsdGVyIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZpbHRlckRlZmluaXRpb24gVGhlIGZpbHRlciBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBkZWZpbml0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlIGRlZmluaXRpb24gaXMgZW1wdHkgKG5vIHJhbmdlcylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlTG93LFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VIaWdoXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBhUmFuZ2VGaWx0ZXJzID0gZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKChyYW5nZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhUmFuZ2VGaWx0ZXJzLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShzYXAudWkuZ2V0Q29yZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYW5ndWFnZSgpKTtcblx0Y29uc3QgcmVzQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0Y29uc3QgZGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHsgc3R5bGU6IFwibWVkaXVtXCIgfSwgY3VycmVudExvY2FsZSk7XG5cblx0ZnVuY3Rpb24gZm9ybWF0UmFuZ2UocmFuZ2U6IFJhbmdlRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVMb3cgPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwID8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VMb3cpKSA6IHJhbmdlLnJhbmdlTG93O1xuXHRcdGNvbnN0IHZhbHVlSGlnaCA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgPyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUhpZ2gpKSA6IHJhbmdlLnJhbmdlSGlnaDtcblxuXHRcdHN3aXRjaCAocmFuZ2Uub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0XHRyZXR1cm4gYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gO1xuXG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIGAqJHt2YWx1ZUxvd30qYDtcblxuXHRcdFx0Y2FzZSBcIkdFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NSR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRcdHJldHVybiBgPiR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRcdHJldHVybiBgPCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5CXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWBdKTtcblxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2MCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5vdENvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgKiR7dmFsdWVMb3d9KmBdKTtcblxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVMb3c7XG5cdFx0fVxuXHR9XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmFuZ2UoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgKCR7ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKGZvcm1hdFJhbmdlKS5qb2luKFwiLFwiKX0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDaGFydFRpdGxlKGtwaURlZjogS1BJRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0ZnVuY3Rpb24gZm9ybWF0TGlzdChpdGVtczogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKSB7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpdGVtc1swXS5sYWJlbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IGl0ZW1zWzBdLmxhYmVsO1xuXHRcdFx0Zm9yIChsZXQgSSA9IDE7IEkgPCBpdGVtcy5sZW5ndGggLSAxOyBJKyspIHtcblx0XHRcdFx0cmVzICs9IGAsICR7aXRlbXNbSV0ubGFiZWx9YDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lURU1TTElTVFwiLCBbcmVzLCBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5sYWJlbF0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9DSEFSVFRJVExFXCIsIFtmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5tZWFzdXJlcyksIGZvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0LmRpbWVuc2lvbnMpXSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbiwgb0NoYXJ0UHJvcGVydGllczogYW55KTogdm9pZCB7XG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0Ly8gU2hvdyBkYXRhIGxhYmVscywgZG8gbm90IHNob3cgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcInZhbHVlXCIsXG5cdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0X01GRDJcIlxuXHRcdFx0fTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdFx0Ly8gU2hvdyBheGlzIHRpdGxlLCBidWJibGUgc2l6ZSBsZWdlbmQsIGRvIG5vdCBzaG93IGRhdGEgbGFiZWxzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmxlZ2VuZEdyb3VwID0ge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwidG9wTGVmdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnNpemVMZWdlbmQgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdH1cbn1cbmZ1bmN0aW9uIGZpbHRlck1hcChhT2JqZWN0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHJvbGU/OiBzdHJpbmcgfVtdLCBhUm9sZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuXHRpZiAoYVJvbGVzICYmIGFSb2xlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gYU9iamVjdHNcblx0XHRcdC5maWx0ZXIoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVJvbGVzLmluZGV4T2YoZGltZW5zaW9uLnJvbGUpID49IDA7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYU9iamVjdHMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0Y29uc3QgYXhpczFNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMxXCJdKTtcblx0Y29uc3QgYXhpczJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKTtcblx0Y29uc3QgYXhpczNNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMzXCJdKTtcblx0Y29uc3Qgb3RoZXJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWRdKTtcblx0Y29uc3Qgc2VyaWVzRGltZW5zaW9ucyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKTtcblxuXHQvLyBHZXQgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIHJvbGUgXCJDYXRlZ29yeVwiIGZvciB0aGUgc2hhcGVcblx0Y29uc3Qgc2hhcGVEaW1lbnNpb24gPSBjaGFydERlZmluaXRpb24uZGltZW5zaW9ucy5maW5kKChkaW1lbnNpb24pID0+IHtcblx0XHRyZXR1cm4gZGltZW5zaW9uLnJvbGUgPT09IFwiQ2F0ZWdvcnlcIjtcblx0fSk7XG5cblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHgtQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMxLCBvciBmb3IgQXhpczIgaWYgbm90IGZvdW5kLCBvciBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHhNZWFzdXJlID0gYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB5LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMiwgb3Igc2Vjb25kIG1lYXN1cmUgZm9yIEF4aXMxIGlmIG5vdCBmb3VuZCwgb3IgZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHlNZWFzdXJlID0gYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdGNvbnN0IHJlcyA9IFtcblx0XHR7XG5cdFx0XHRcInVpZFwiOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogW3hNZWFzdXJlXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0XCJ1aWRcIjogXCJ2YWx1ZUF4aXMyXCIsXG5cdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBbeU1lYXN1cmVdXG5cdFx0fVxuXHRdO1xuXG5cdGlmIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlID09PSBcImJ1YmJsZVwiKSB7XG5cdFx0Ly8gTWVhc3VyZSBmb3IgdGhlIHNpemUgb2YgdGhlIGJ1YmJsZTogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMsIG9yIHJlbWFpbmluZyBtZWFzdXJlIGZvciBBeGlzMS9BeGlzMiBpZiBub3QgZm91bmRcblx0XHRjb25zdCBzaXplTWVhc3VyZSA9IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdFwidWlkXCI6IFwiYnViYmxlV2lkdGhcIixcblx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFwidmFsdWVzXCI6IFtzaXplTWVhc3VyZV1cblx0XHR9KTtcblx0fVxuXG5cdC8vIENvbG9yIChvcHRpb25hbClcblx0aWYgKHNlcmllc0RpbWVuc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0XCJ1aWRcIjogXCJjb2xvclwiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBzZXJpZXNEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH1cblx0Ly8gU2hhcGUgKG9wdGlvbmFsKVxuXHRpZiAoc2hhcGVEaW1lbnNpb24pIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHRcInVpZFwiOiBcInNoYXBlXCIsXG5cdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFwidmFsdWVzXCI6IFtzaGFwZURpbWVuc2lvbi5sYWJlbF1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGxldCByZXM6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W107XG5cblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcInNpemVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY29sb3JcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMpXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0cmVzID0gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInZlcnRpY2FsX2J1bGxldFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJhY3R1YWxWYWx1ZXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZCwgXCJBeGlzMVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwidGFyZ2V0VmFsdWVzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0bmF2SW5mbzogTmF2aWdhdGlvbkluZm8sXG5cdG9TaGVsbFNlcnZpY2U6IGFueVxuKTogUHJvbWlzZTx7IHNlbWFudGljT2JqZWN0Pzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmc7IG91dGJvdW5kPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcblx0aWYgKG5hdkluZm8uc2VtYW50aWNPYmplY3QpIHtcblx0XHRpZiAobmF2SW5mby5hY3Rpb24pIHtcblx0XHRcdC8vIEFjdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZDogY2hlY2sgaWYgaXQncyBhdmFpbGFibGUgaW4gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRMaW5rcyh7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0pLnRoZW4oKGFMaW5rczogYW55W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggPyB7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgZ2V0IHRoZSBwcmltYXJ5IGludGVudCBmcm9tIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChuYXZJbmZvLnNlbWFudGljT2JqZWN0KS50aGVuKChvTGluazogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBObyBwcmltYXJ5IGludGVudC4uLlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0aGF0IHRoZSBwcmltYXJ5IGludGVudCBpcyBub3QgcGFydCBvZiB0aGUgdW5hdmFpbGFibGUgYWN0aW9uc1xuXHRcdFx0XHRjb25zdCBvSW5mbyA9IG9TaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2gob0xpbmsuaW50ZW50KTtcblx0XHRcdFx0cmV0dXJuIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zICYmIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zLmluZGV4T2Yob0luZm8uYWN0aW9uKSA+PSAwXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHsgc2VtYW50aWNPYmplY3Q6IG9JbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG9JbmZvLmFjdGlvbiB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE91dGJvdW5kIG5hdmlnYXRpb24gc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHJldHVybiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiA/IFByb21pc2UucmVzb2x2ZSh7IG91dGJvdW5kOiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiB9KSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQGNsYXNzIEEgY29udHJvbGxlciBleHRlbnNpb24gZm9yIG1hbmFnaW5nIHRoZSBLUElzIGluIGFuIGFuYWx5dGljYWwgbGlzdCBwYWdlXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XCIpXG5jbGFzcyBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYUtQSURlZmluaXRpb25zPzogS1BJRGVmaW5pdGlvbltdO1xuXHRwcm90ZWN0ZWQgb0NhcmQ6IGFueTtcblx0cHJvdGVjdGVkIG9Qb3BvdmVyITogUG9wb3ZlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY2FyZCBtYW5pZmVzdCBmb3IgYSBLUEkgZGVmaW5pdGlvbiBhbmQgc3RvcmVzIGl0IGluIGEgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIEtQSSBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgaW4gd2hpY2ggdGhlIG1hbmlmZXN0IHdpbGwgYmUgc3RvcmVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IG9DYXJkTWFuaWZlc3Q6IGFueSA9IHtcblx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdGlkOiBcInNhcC5mZVwiLFxuXHRcdFx0XHR0eXBlOiBcImNhcmRcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLnVpXCI6IHtcblx0XHRcdFx0dGVjaG5vbG9neTogXCJVSTVcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLmNhcmRcIjoge1xuXHRcdFx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdGpzb246IHt9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGhlYWRlcjoge1xuXHRcdFx0XHRcdHR5cGU6IFwiTnVtZXJpY1wiLFxuXHRcdFx0XHRcdHRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50aXRsZSxcblx0XHRcdFx0XHRzdWJUaXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0dW5pdE9mTWVhc3VyZW1lbnQ6IFwie21haW5Vbml0fVwiLFxuXHRcdFx0XHRcdG1haW5JbmRpY2F0b3I6IHtcblx0XHRcdFx0XHRcdG51bWJlcjogXCJ7bWFpblZhbHVlTm9TY2FsZX1cIixcblx0XHRcdFx0XHRcdHVuaXQ6IFwie21haW5WYWx1ZVNjYWxlfVwiLFxuXHRcdFx0XHRcdFx0c3RhdGU6IFwie21haW5TdGF0ZX1cIixcblx0XHRcdFx0XHRcdHRyZW5kOiBcInt0cmVuZH1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdG1pbkhlaWdodDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdGNoYXJ0UHJvcGVydGllczoge1xuXHRcdFx0XHRcdFx0cGxvdEFyZWE6IHt9LFxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpZ25tZW50OiBcImxlZnRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0cGF0aDogXCIvY2hhcnREYXRhXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHNpZGUgaW5kaWNhdG9ycyBpbiB0aGUgY2FyZCBoZWFkZXIgaWYgYSB0YXJnZXQgaXMgZGVmaW5lZCBmb3IgdGhlIEtQSVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHJlc0J1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLnNpZGVJbmRpY2F0b3JzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9UQVJHRVRcIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcInt0YXJnZXROdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCJ7dGFyZ2V0VW5pdH1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9ERVZJQVRJT05cIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcIntkZXZpYXRpb25OdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCIlXCJcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHQvLyBEZXRhaWxzIG9mIHRoZSBjYXJkOiBmaWx0ZXIgZGVzY3JpcHRpb25zXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5mb3JFYWNoKChmaWx0ZXJEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IGRpbWVuc2lvbi5sYWJlbCwgdmFsdWU6IGB7JHtkaW1lbnNpb24ubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50Lm1lYXN1cmVzID0ga3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5tYXAoKG1lYXN1cmUpID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBtZWFzdXJlLmxhYmVsLCB2YWx1ZTogYHske21lYXN1cmUubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmZlZWRzID0gZ2V0Q2hhcnRGZWVkcyhrcGlEZWZpbml0aW9uLmNoYXJ0KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH1gLCB7XG5cdFx0XHRtYW5pZmVzdDogb0NhcmRNYW5pZmVzdFxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIGluaXROYXZpZ2F0aW9uSW5mbyhrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCwgb1NoZWxsU2VydmljZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQWRkIG5hdmlnYXRpb25cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uLCBvU2hlbGxTZXJ2aWNlKS50aGVuKChvTmF2SW5mbykgPT4ge1xuXHRcdFx0XHRpZiAob05hdkluZm8pIHtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2hlYWRlci9hY3Rpb25zYCwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb05hdkluZm9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYUtQSURlZmluaXRpb25zID0gdGhpcy5nZXRLUElEYXRhKCk7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXIpLmdldEFwcENvbXBvbmVudCgpIGFzIGFueTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGEgSlNPTiBtb2RlbCB0byBzdG9yZSBLUEkgZGF0YVxuXHRcdFx0Y29uc3Qgb0tQSU1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdFx0b1ZpZXcuc2V0TW9kZWwob0tQSU1vZGVsLCBcImtwaU1vZGVsXCIpO1xuXG5cdFx0XHR0aGlzLmFLUElEZWZpbml0aW9ucy5mb3JFYWNoKChrcGlEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgbWFuaWZlc3QgZm9yIHRoZSBLUEkgY2FyZCBhbmQgc3RvcmUgaXQgaW4gdGhlIEtQSSBtb2RlbFxuXHRcdFx0XHR0aGlzLmluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIG5hdmlnYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdHRoaXMuaW5pdE5hdmlnYXRpb25JbmZvKGtwaURlZmluaXRpb24sIG9LUElNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkpLmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyBMb2FkIHRhZyBkYXRhIGZvciB0aGUgS1BJXG5cdFx0XHRcdHRoaXMubG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbiwgb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsIG9LUElNb2RlbCkuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmIChvS1BJTW9kZWwpIHtcblx0XHRcdG9LUElNb2RlbC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRLUElEYXRhKCk6IEtQSURlZmluaXRpb25bXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKSxcblx0XHRcdHNDdXN0b21EYXRhID0gb1ZpZXcuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJLUElEYXRhXCIpO1xuXG5cdFx0aWYgKHNDdXN0b21EYXRhKSB7XG5cdFx0XHRjb25zdCB2RGF0YSA9IHR5cGVvZiBzQ3VzdG9tRGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc0N1c3RvbURhdGEpIDogc0N1c3RvbURhdGE7XG5cdFx0XHRpZiAoXCJjdXN0b21EYXRhXCIgaW4gdkRhdGEpIHtcblx0XHRcdFx0cmV0dXJuIHZEYXRhW1wiY3VzdG9tRGF0YVwiXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB2RGF0YTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShzYXAudWkuZ2V0Q29yZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYW5ndWFnZSgpKTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVgLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoc2FwLnVpLmdldENvcmUoKS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0TGFuZ3VhZ2UoKSk7XG5cblx0XHRsZXQgdGFyZ2V0UmF3VmFsdWU6IG51bWJlcjtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwgXCJcIikpO1xuXHRcdH1cblx0XHRjb25zdCBkZXZpYXRpb25SYXdWYWx1ZSA9IHRhcmdldFJhd1ZhbHVlICE9PSAwID8gKChyYXdWYWx1ZSAtIHRhcmdldFJhd1ZhbHVlKSAvIHRhcmdldFJhd1ZhbHVlKSAqIDEwMCA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEZvcm1hdHRpbmdcblx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXHRcdGNvbnN0IHRhcmdldFNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdGFyZ2V0VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB0YXJnZXRTY2FsZSk7XG5cblx0XHRpZiAoZGV2aWF0aW9uUmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdFx0KS5mb3JtYXQoZGV2aWF0aW9uUmF3VmFsdWUpO1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgZGV2aWF0aW9uVmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBcIk4vQVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGFnIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcGFyYW0gbG9hZEZ1bGwgSWYgbm90IHRydWUsIGxvYWRzIG9ubHkgZGF0YSBmb3IgdGhlIEtQSSB0YWdcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb01haW5Nb2RlbDogT0RhdGFNb2RlbCwgb0tQSU1vZGVsOiBKU09OTW9kZWwsIGxvYWRGdWxsPzogYm9vbGVhbik6IGFueSB7XG5cdFx0Ly8gSWYgbG9hZEZ1bGw9ZmFsc2UsIHRoZW4gd2UncmUganVzdCBsb2FkaW5nIGRhdGEgZm9yIHRoZSB0YWcgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Mb25nUnVubmVyc1wiIGdyb3VwSURcblx0XHQvLyBJZiBsb2FkRnVsbD10cnVlLCB3ZSdyZSBsb2FkaW5nIGRhdGEgZm9yIHRoZSB3aG9sZSBLUEkgKHRhZyArIGNhcmQpIGFuZCB3ZSB1c2UgdGhlIGRlZmF1bHQgKFwiJGF1dG9cIikgZ3JvdXBJRFxuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IGxvYWRGdWxsXG5cdFx0XHQ/IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWApXG5cdFx0XHQ6IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDEpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKSA9PiB7XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHRcdFx0PyBhQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmICFyYXdVbml0KSB7XG5cdFx0XHRcdFx0Ly8gQSB1bml0L2N1cnJlbmN5IGlzIGRlZmluZWQsIGJ1dCBpdHMgdmFsdWUgaXMgdW5kZWZpbmVkIC0tPiBtdWx0aS11bml0IHNpdHVhdGlvblxuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZGAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwgXCJcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjYXJkIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb01haW5Nb2RlbDogT0RhdGFNb2RlbCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiBhbnkge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWApO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0gPSB7fTtcblx0XHR9KTtcblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdG9BZ2dyZWdhdGVbbWVhc3VyZS5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7XG5cdFx0XHRncm91cDogb0dyb3VwLFxuXHRcdFx0YWdncmVnYXRlOiBvQWdncmVnYXRlXG5cdFx0fSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoKHNvcnRJbmZvKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBTb3J0ZXIoc29ydEluZm8ubmFtZSwgc29ydEluZm8uZGVzY2VuZGluZyk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIGtwaURlZmluaXRpb24uY2hhcnQubWF4SXRlbXMpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKSA9PiB7XG5cdFx0XHRjb25zdCBjaGFydERhdGEgPSBhQ29udGV4dHMubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRcdFx0b0RhdGFbbWVhc3VyZS5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG1lYXN1cmUubmFtZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBvRGF0YTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9jaGFydERhdGFgLCBjaGFydERhdGEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBvcG92ZXIgdG8gZGlzcGxheSB0aGUgS1BJIGNhcmRcblx0ICogVGhlIHBvcG92ZXIgYW5kIHRoZSBjb250YWluZWQgY2FyZCBmb3IgdGhlIEtQSXMgYXJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuXHQgKiBUaGUgcG9wb3ZlciBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgS1BJcywgc28gaXQncyBjcmVhdGVkIG9ubHkgb25jZS5cblx0ICpcblx0ICogQHBhcmFtIG9LUElUYWcgVGhlIHRhZyB0aGF0IHRyaWdnZXJlZCB0aGUgcG9wb3ZlciBvcGVuaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmVkIHBvcG92ZXIgYXMgYSBwcm9taXNlLlxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFBvcG92ZXIob0tQSVRhZzogR2VuZXJpY1RhZyk6IFByb21pc2U8UG9wb3Zlcj4ge1xuXHRcdGlmICghdGhpcy5vUG9wb3Zlcikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KVxuXHRcdFx0XHRcdC5sb2FkTGlicmFyeShcInNhcC91aS9pbnRlZ3JhdGlvblwiLCB7IGFzeW5jOiB0cnVlIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoQ2FyZDogYW55LCBIb3N0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0hvc3QgPSBuZXcgSG9zdCgpO1xuXG5cdFx0XHRcdFx0XHRcdG9Ib3N0LmF0dGFjaEFjdGlvbigob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVHlwZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ0eXBlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicGFyYW1ldGVyc1wiKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1zLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbXMuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtcy5hY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlT3V0Ym91bmQob1BhcmFtcy5vdXRib3VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkID0gbmV3IENhcmQoe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9Qb3BvdmVyID0gbmV3IFBvcG92ZXIoXCJrcGktUG9wb3ZlclwiLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBcIkF1dG9cIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBbdGhpcy5vQ2FyZF1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0b0tQSVRhZy5hZGREZXBlbmRlbnQodGhpcy5vUG9wb3Zlcik7IC8vIFRoZSBmaXJzdCBjbGlja2VkIHRhZyBnZXRzIHRoZSBwb3BvdmVyIGFzIGRlcGVuZGVudFxuXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgb25LUElQcmVzc2VkKG9LUElUYWc6IGFueSwga3BpSUQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBrcGlEZWZpbml0aW9uID0gdGhpcy5hS1BJRGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbiAob0RlZikge1xuXHRcdFx0XHRyZXR1cm4gb0RlZi5pZCA9PT0ga3BpSUQ7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24pIHtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0tQSVRhZy5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCwgdHJ1ZSksXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbiwgb01vZGVsLCBvS1BJTW9kZWwpLFxuXHRcdFx0XHRcdHRoaXMuZ2V0UG9wb3ZlcihvS1BJVGFnKVxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdFByb21pc2UuYWxsKGFQcm9taXNlcylcblx0XHRcdFx0XHQudGhlbigoYVJlc3VsdHMpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgb1BvcG92ZXIgPSBhUmVzdWx0c1syXTtcblx0XHRcdFx0XHRcdG9Qb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19