@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,19 +2,19 @@
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(["../../helpers/ID", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/formatters/TableFormatterTypes", "../../helpers/Aggregation", "sap/fe/core/converters/helpers/IssueManager", "./Criticality", "sap/fe/core/converters/helpers/SelectionVariantHelper"], function (ID, PropertyHelper, TableFormatterTypes, Aggregation, IssueManager, Criticality, SelectionVariantHelper) {
5
+ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/SelectionVariantHelper", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "../../helpers/ID", "./Criticality"], function (IssueManager, SelectionVariantHelper, TableFormatterTypes, PropertyHelper, Aggregation, ID, Criticality) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var getFilterDefinitionsFromSelectionVariant = SelectionVariantHelper.getFilterDefinitionsFromSelectionVariant;
10
9
  var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
10
+ var getKPIID = ID.getKPIID;
11
+ var AggregationHelper = Aggregation.AggregationHelper;
12
+ var isPathExpression = PropertyHelper.isPathExpression;
13
+ var MessageType = TableFormatterTypes.MessageType;
14
+ var getFilterDefinitionsFromSelectionVariant = SelectionVariantHelper.getFilterDefinitionsFromSelectionVariant;
11
15
  var IssueType = IssueManager.IssueType;
12
16
  var IssueSeverity = IssueManager.IssueSeverity;
13
17
  var IssueCategory = IssueManager.IssueCategory;
14
- var AggregationHelper = Aggregation.AggregationHelper;
15
- var MessageType = TableFormatterTypes.MessageType;
16
- var isPathExpression = PropertyHelper.isPathExpression;
17
- var KPIID = ID.KPIID;
18
18
 
19
19
  var DeviationIndicatorFromTrendType = {
20
20
  "UI.TrendType/StrongUp": "Up",
@@ -277,7 +277,7 @@ sap.ui.define(["../../helpers/ID", "sap/fe/core/templating/PropertyHelper", "sap
277
277
  function createKPIDefinition(kpiName, kpiConfig, converterContext) {
278
278
  var _datapointAnnotation$, _datapointAnnotation$2;
279
279
 
280
- var kpiConverterContext = converterContext.getConverterContextFor("/" + kpiConfig.entitySet);
280
+ var kpiConverterContext = converterContext.getConverterContextFor("/".concat(kpiConfig.entitySet));
281
281
  var aggregationHelper = new AggregationHelper(kpiConverterContext.getEntityType(), kpiConverterContext);
282
282
 
283
283
  if (!aggregationHelper.isAnalyticsSupported()) {
@@ -363,7 +363,7 @@ sap.ui.define(["../../helpers/ID", "sap/fe/core/templating/PropertyHelper", "sap
363
363
  }
364
364
 
365
365
  var kpiDef = {
366
- id: KPIID(kpiName),
366
+ id: getKPIID(kpiName),
367
367
  entitySet: kpiConfig.entitySet,
368
368
  datapoint: {
369
369
  propertyPath: datapointAnnotation.Value.path,
@@ -400,8 +400,8 @@ sap.ui.define(["../../helpers/ID", "sap/fe/core/templating/PropertyHelper", "sap
400
400
  /**
401
401
  * Creates the KPI definitions from the manifest and the annotations.
402
402
  *
403
- * @param {ConverterContext} converterContext The converter context for the page
404
- * @returns {KPIDefinition[]} Returns an array of KPI definitions
403
+ * @param converterContext The converter context for the page
404
+ * @returns Returns an array of KPI definitions
405
405
  */
406
406
 
407
407
 
@@ -421,4 +421,4 @@ sap.ui.define(["../../helpers/ID", "sap/fe/core/templating/PropertyHelper", "sap
421
421
  _exports.getKPIDefinitions = getKPIDefinitions;
422
422
  return _exports;
423
423
  }, false);
424
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSS50cyJdLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJNZWFzdXJlcyIsInVuZGVmaW5lZCIsImNoYXJEaW1lbnNpb25zIiwiRGltZW5zaW9ucyIsIm1hcCIsInByb3BlcnR5UGF0aCIsImRpbUF0dHJpYnV0ZSIsIkRpbWVuc2lvbkF0dHJpYnV0ZXMiLCJmaW5kIiwiYXR0cmlidXRlIiwiRGltZW5zaW9uIiwidmFsdWUiLCJuYW1lIiwibGFiZWwiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwicm9sZSIsIlJvbGUiLCJyZXBsYWNlIiwiY2hhcnRNZWFzdXJlcyIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmUiLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJQcm9wZXJ0eSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJNYXhJdGVtcyIsInZhbHVlT2YiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJ0YXJnZXRWYWx1ZVByb3BlcnR5IiwiVmFsdWUiLCJJU09DdXJyZW5jeSIsImN1cnJlbmN5IiwiaXNQYXRoRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsInVwZGF0ZUNyaXRpY2FsaXR5IiwiYWdncmVnYXRpb25IZWxwZXIiLCJDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJpc1Byb3BlcnR5QWdncmVnYXRhYmxlIiwiY3JpdGljYWxpdHlQYXRoIiwicGF0aCIsImNyaXRpY2FsaXR5VmFsdWUiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUiLCJJbXByb3ZlbWVudERpcmVjdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzIiwicHVzaCIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIkRldmlhdGlvblJhbmdlSGlnaFZhbHVlIiwidXBkYXRlVHJlbmQiLCJUcmVuZCIsInRyZW5kUHJvcGVydHkiLCJ0cmVuZFBhdGgiLCJ0cmVuZFZhbHVlIiwiVHJlbmRDYWxjdWxhdGlvbiIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwiSXNSZWxhdGl2ZURpZmZlcmVuY2UiLCJSZWZlcmVuY2VWYWx1ZSIsInJlZmVyZW5jZVByb3BlcnR5IiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzIiwiU3Ryb25nRG93bkRpZmZlcmVuY2UiLCJEb3duRGlmZmVyZW5jZSIsIlVwRGlmZmVyZW5jZSIsIlN0cm9uZ1VwRGlmZmVyZW5jZSIsInVwZGF0ZVRhcmdldCIsIlRhcmdldFZhbHVlIiwidGFyZ2V0UHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwidGFyZ2V0VmFsdWUiLCJnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eSIsInByb3BlcnR5Iiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJhbm5vdGF0aW9uS2V5IiwiYW5ub3RhdGlvbiIsInRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsImNyZWF0ZUtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwia3BpQ29uZmlnIiwiY29udmVydGVyQ29udGV4dCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZW50aXR5U2V0IiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIkRhdGFQb2ludCIsIlNlbGVjdGlvblZhcmlhbnQiLCJEZXRhaWwiLCJEZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsIlZpc3VhbGl6YXRpb25zIiwidml6IiwiJFR5cGUiLCJTZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJLUElfTk9UX0ZPVU5EIiwiS1BJX0RFVEFJTF9OT1RfRk9VTkQiLCJkYXRhcG9pbnRQcm9wZXJ0eSIsIk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSIsImNoYXJ0RGVmIiwiaWQiLCJLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRpdGxlIiwiVGl0bGUiLCJkZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwic2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zIiwiZ2V0RmlsdGVyRGVmaW5pdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsImNoYXJ0IiwiZGV0YWlsTmF2aWdhdGlvbiIsIm91dGJvdW5kTmF2aWdhdGlvbiIsIm5hdmlnYXRpb24iLCJnZXRLUElEZWZpbml0aW9ucyIsImtwaUNvbmZpZ3MiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRLUElDb25maWd1cmF0aW9uIiwia3BpRGVmcyIsIm9EZWYiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQTBFQSxNQUFNQSwrQkFBdUQsR0FBRztBQUMvRCw2QkFBeUIsSUFEc0M7QUFFL0QsdUJBQW1CLElBRjRDO0FBRy9ELCtCQUEyQixNQUhvQztBQUkvRCx5QkFBcUIsTUFKMEM7QUFLL0QsNkJBQXlCO0FBTHNDLEdBQWhFO0FBUUEsTUFBTUMsa0JBQTBDLEdBQUc7QUFDbEQsa0NBQThCLGVBRG9CO0FBRWxELCtCQUEyQixZQUZ1QjtBQUdsRCwwQkFBc0IsT0FINEI7QUFJbEQseUJBQXFCLE1BSjZCO0FBS2xELDJCQUF1QixRQUwyQjtBQU1sRCwyQkFBdUIsUUFOMkI7QUFPbEQsd0JBQW9CLEtBUDhCO0FBUWxELG1DQUErQixpQkFSbUI7QUFTbEQsZ0NBQTRCLGFBVHNCO0FBVWxELDRCQUF3QjtBQVYwQixHQUFuRDs7QUFhQSxXQUFTQyxlQUFULENBQXlCQyxlQUF6QixFQUFpREMsNkJBQWpELEVBQXFJO0FBQUE7O0FBQ3BJLFFBQUlELGVBQWUsQ0FBQ0UsUUFBaEIsS0FBNkJDLFNBQWpDLEVBQTRDO0FBQzNDO0FBQ0EsYUFBT0EsU0FBUDtBQUNBOztBQUVELFFBQU1DLGNBQWMsR0FBR0osZUFBZSxDQUFDSyxVQUFoQixHQUNuQkwsZUFBZSxDQUFDSyxVQUFqQixDQUErQ0MsR0FBL0MsQ0FBbUQsVUFBQUMsWUFBWSxFQUFJO0FBQUE7O0FBQ25FLFVBQU1DLFlBQVksNEJBQUdSLGVBQWUsQ0FBQ1MsbUJBQW5C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O0FBQ0E7QUFDRCxLQUxEO0FBT0EsV0FBT0QsT0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLUElDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRVSUFubm90YXRpb25UZXJtcyxcblx0VUlBbm5vdGF0aW9uVHlwZXMsXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHRJbXByb3ZlbWVudERpcmVjdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRLUElUeXBlLFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0RGF0YVBvaW50LFxuXHRDaGFydCxcblx0VHJlbmRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvRWRtXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBpc1BhdGhFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50LCBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMsIFNlbWFudGljT2JqZWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NvbW1vblwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdGRpbWVuc2lvbnM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0bWVhc3VyZXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0c29ydE9yZGVyPzogeyBuYW1lOiBzdHJpbmc7IGRlc2NlbmRpbmc6IGJvb2xlYW4gfVtdO1xuXHRtYXhJdGVtcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRkYXRhcG9pbnQ6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50KTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyAoY2hhcnRBbm5vdGF0aW9uLkRpbWVuc2lvbnMgYXMgUHJvcGVydHlQYXRoW10pLm1hcChwcm9wZXJ0eVBhdGggPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZChhdHRyaWJ1dGUgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBhdHRyaWJ1dGUuRGltZW5zaW9uPy52YWx1ZSA9PT0gcHJvcGVydHlQYXRoLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0bGFiZWw6IHByb3BlcnR5UGF0aC4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdHJvbGU6IGRpbUF0dHJpYnV0ZT8uUm9sZT8ucmVwbGFjZShcIlVJLkNoYXJ0RGltZW5zaW9uUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0ICB9KVxuXHRcdDogW107XG5cblx0Y29uc3QgY2hhcnRNZWFzdXJlcyA9IChjaGFydEFubm90YXRpb24uTWVhc3VyZXMgYXMgUHJvcGVydHlQYXRoW10pLm1hcChwcm9wZXJ0eVBhdGggPT4ge1xuXHRcdGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uTWVhc3VyZUF0dHJpYnV0ZXM/LmZpbmQoYXR0cmlidXRlID0+IHtcblx0XHRcdHJldHVybiBhdHRyaWJ1dGUuTWVhc3VyZT8udmFsdWUgPT09IHByb3BlcnR5UGF0aC52YWx1ZTtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0bGFiZWw6IHByb3BlcnR5UGF0aC4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0cm9sZTogbWVhc3VyZUF0dHJpYnV0ZT8uUm9sZT8ucmVwbGFjZShcIlVJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL1wiLCBcIlwiKVxuXHRcdH07XG5cdH0pO1xuXG5cdHJldHVybiB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoc29ydE9yZGVyID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IHNvcnRPcmRlci5Qcm9wZXJ0eT8udmFsdWUgfHwgXCJcIiwgZGVzY2VuZGluZzogISFzb3J0T3JkZXIuRGVzY2VuZGluZyB9O1xuXHRcdH0pLFxuXHRcdG1heEl0ZW1zOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXM/LnZhbHVlT2YoKSBhcyBudW1iZXJcblx0fTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3VycmVuY3koZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50LCBrcGlEZWY6IEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0Y29uc3QgY3VycmVuY3kgPSB0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0XHRpZiAoaXNQYXRoRXhwcmVzc2lvbihjdXJyZW5jeSkpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6ICgoY3VycmVuY3kuJHRhcmdldCBhcyB1bmtub3duKSBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEV4cHJlc3Npb24odW5pdCkpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6ICgodW5pdC4kdGFyZ2V0IGFzIHVua25vd24pIGFzIFByb3BlcnR5KS5uYW1lLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiBmYWxzZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiB1bml0LnRvU3RyaW5nKCksXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDcml0aWNhbGl0eShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnQsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZVxuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eSA9ICgoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSBhcyBhbnkpIGFzIFByb3BlcnR5UGF0aCkuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4pLnBhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgaXNuJ3QgYWdncmVnYXRhYmxlIC0tPiB3ZSBpZ25vcmUgaXRcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYW4gZW51bSBWYWx1ZSAtLT4gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkltcHJvdmVtZW50RGlyZWN0aW9uO1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMgPSBbXTtcblx0XHRzd2l0Y2ggKGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvVGFyZ2V0XCI6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWluaW1pemVcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnQsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZVxuXHRcdFx0Y29uc3QgdHJlbmRQcm9wZXJ0eSA9ICgoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCBhcyBhbnkpIGFzIFByb3BlcnR5UGF0aCkuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmQgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFRyZW5kVHlwZT4pLnBhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgaXNuJ3QgYWdncmVnYXRhYmxlIC0tPiB3ZSBpZ25vcmUgaXRcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyZW5kIGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGVbZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZF0gfHwgXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uSXNSZWxhdGl2ZURpZmZlcmVuY2UgPyB0cnVlIDogZmFsc2U7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnR5ID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShyZWZlcmVuY2VQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0IGFuZCBzd2l0Y2ggYmFjayB0byB0cmVuZCAnTm9uZSdcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJlZmVyZW5jZSB2YWx1ZSBpcyBhIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWU7XG5cdFx0fVxuXHRcdGlmIChrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoICE9PSB1bmRlZmluZWQgfHwga3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzID0gW1xuXHRcdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uU3Ryb25nRG93bkRpZmZlcmVuY2UudmFsdWVPZigpIGFzIG51bWJlcixcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSBhcyBudW1iZXIsXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5VcERpZmZlcmVuY2UudmFsdWVPZigpIGFzIG51bWJlcixcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ1VwRGlmZmVyZW5jZS52YWx1ZU9mKCkgYXMgbnVtYmVyXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50LCBhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsIGtwaURlZjogS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZSkge1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQpIHtcblx0XHRcdC8vIFRhcmdldCB2YWx1ZSBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZSAob3RoZXJ3aXNlIGlnbm9yZSlcblx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUodGFyZ2V0UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0UGF0aCA9IGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUucGF0aDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRhcmdldFZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkocHJvcGVydHk6IFByb3BlcnR5KTogTmF2aWdhdGlvbkluZm8gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvblRlcm08YW55Pj4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9uc1tcIkNvbW1vblwiXSB8fCB7fTtcblxuXHQvLyBMb29rIGZvciB0aGUgc2VtYW50aWNPYmplY3QgYW5ub3RhdGlvbiAoaWYgYW55KVxuXHRsZXQgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uOiBBbm5vdGF0aW9uVGVybTxTZW1hbnRpY09iamVjdD4gfCB1bmRlZmluZWQ7XG5cdE9iamVjdC5rZXlzKGFubm90YXRpb25zKS5mb3JFYWNoKGFubm90YXRpb25LZXkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5XTtcblx0XHRpZiAoYW5ub3RhdGlvbi50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdGlmICghYW5ub3RhdGlvbi5xdWFsaWZpZXIgfHwgIXNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdFx0XHQvLyBXZSBhbHdheXMgdGFrZSB0aGUgYW5ub3RhdGlvbiB3aXRob3V0IHF1YWxpZmllciBpZiB0aGVyZSdzIG9uZSwgb3RoZXJ3aXNlIHdlIHRha2UgdGhlIGZpcnN0IG9uZVxuXHRcdFx0XHRzZW1hbnRpY09iamVjdEFubm90YXRpb24gPSBhbm5vdGF0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzZW1hbnRpY09iamVjdEFubm90YXRpb24udG9TdHJpbmcoKSxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogW11cblx0XHR9O1xuXG5cdFx0Ly8gTG9vayBmb3IgdGhlIHVuYXZhaWxhYmxlIGFjdGlvbnMgKGlmIGFueSlcblx0XHRjb25zdCBhbm5vdGF0aW9uS2V5ID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbnMpLmZpbmQoa2V5ID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGFubm90YXRpb25zW2tleV0udGVybSA9PT0gQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zICYmXG5cdFx0XHRcdGFubm90YXRpb25zW2tleV0ucXVhbGlmaWVyID09PSBzZW1hbnRpY09iamVjdEFubm90YXRpb24/LnF1YWxpZmllclxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRpZiAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0cmVzdWx0LnVuYXZhaWxhYmxlQWN0aW9ucyA9IGFubm90YXRpb25zW2Fubm90YXRpb25LZXldO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVLUElEZWZpbml0aW9uKGtwaU5hbWU6IHN0cmluZywga3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogS1BJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGtwaUNvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBrcGlDb25maWcuZW50aXR5U2V0KTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoa3BpQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGtwaUNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdC8vIFRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllc1xuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuTk9fQU5BTFlUSUNTICsga3BpQ29uZmlnLmVudGl0eVNldCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRsZXQgZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50IHwgdW5kZWZpbmVkO1xuXHRsZXQgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEFubm90YXRpb25UZXJtPEtQSVR5cGU+W107XG5cdGNvbnN0IHRhcmdldEtQSSA9IGFLUElBbm5vdGF0aW9ucy5maW5kKGtwaSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6OiBhbnkpID0+IHtcblx0XHRcdHJldHVybiB2aXouJHRhcmdldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZTtcblx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblxuXHRcdGlmICh0YXJnZXRLUEkuRGV0YWlsPy5TZW1hbnRpY09iamVjdCkge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0OiB0YXJnZXRLUEkuRGV0YWlsLlNlbWFudGljT2JqZWN0LnRvU3RyaW5nKCksXG5cdFx0XHRcdGFjdGlvbjogdGFyZ2V0S1BJLkRldGFpbC5BY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogW11cblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZhbGxiYWNrOiB0cnkgdG8gZmluZCBhIFNQViB3aXRoIHRoZSBzYW1lIHF1YWxpZmllclxuXHRcdGNvbnN0IGFTUFZBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIlVJXCIsXG5cdFx0XHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0KSBhcyBBbm5vdGF0aW9uVGVybTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZT5bXTtcblx0XHRjb25zdCB0YXJnZXRTUFYgPSBhU1BWQW5ub3RhdGlvbnMuZmluZChzcHYgPT4ge1xuXHRcdFx0cmV0dXJuIHNwdi5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKHRhcmdldFNQVikge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRTUFYuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXo6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdml6LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpejogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiB2aXouJHRhcmdldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZTtcblx0XHRcdH0pPy4kdGFyZ2V0IGFzIENoYXJ0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDb3VsZG4ndCBmaW5kIGEgS1BJIG9yIGEgU1BWIGFubm90YXRpb24gd2l0aCB0aGUgcXVhbGlmaWVyIGZyb20gdGhlIG1hbmlmZXN0XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5LUElfTk9UX0ZPVU5EICsga3BpQ29uZmlnLnF1YWxpZmllcik7XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiB8fCAhZGF0YXBvaW50QW5ub3RhdGlvbiB8fCAhY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0Ly8gQ291bGRuJ3QgZmluZCBhIGNoYXJ0IG9yIGRhdGFwb2ludCBkZWZpbml0aW9uXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5LUElfREVUQUlMX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGRhdGFwb2ludFByb3BlcnR5ID0gZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUoZGF0YXBvaW50UHJvcGVydHkpKSB7XG5cdFx0Ly8gVGhlIG1haW4gcHJvcGVydHkgb2YgdGhlIEtQSSBpcyBub3QgYWdncmVnYXRhYmxlIC0tPiBXZSBjYW4ndCBjYWxjdWxhdGUgaXRzIHZhbHVlIHNvIHdlIGlnbm9yZSB0aGUgS1BJXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShcblx0XHRcdFx0SXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0SXNzdWVUeXBlLktQSV9JU1NVRVMuTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFICsga3BpQ29uZmlnLnF1YWxpZmllclxuXHRcdFx0KTtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gQ2hhcnQgZGVmaW5pdGlvblxuXHRjb25zdCBjaGFydERlZiA9IGNvbnZlcnRLUElDaGFydChjaGFydEFubm90YXRpb24sIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKTtcblx0aWYgKCFjaGFydERlZikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBrcGlEZWY6IEtQSURlZmluaXRpb24gPSB7XG5cdFx0aWQ6IEtQSUlEKGtwaU5hbWUpLFxuXHRcdGVudGl0eVNldDoga3BpQ29uZmlnLmVudGl0eVNldCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHQvLyBOYXZpZ2F0aW9uXG5cdGlmICghbmF2aWdhdGlvbkluZm8pIHtcblx0XHQvLyBObyBuYXZpZ2F0aW9uSW5mbyB3YXMgZm91bmQgaW4gdGhlIEtQSSBhbm5vdGF0aW9uIC0tPiB0cnkgdGhlIG91dGJvdW5kIG5hdmlnYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRpZiAoa3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb24pIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRvdXRib3VuZE5hdmlnYXRpb246IGtwaUNvbmZpZy5kZXRhaWxOYXZpZ2F0aW9uXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBvdXRib3VuZCBuYXZpZ2F0aW9uIGluIHRoZSBtYW5pZmVzdCAtLT4gdHJ5IHRoZSBzZW1hbnRpYyBvYmplY3Qgb24gdGhlIERhdGFwb2ludCB2YWx1ZVxuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShkYXRhcG9pbnRQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cdGlmIChuYXZpZ2F0aW9uSW5mbykge1xuXHRcdGtwaURlZi5uYXZpZ2F0aW9uID0gbmF2aWdhdGlvbkluZm87XG5cdH1cblxuXHR1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uLCBrcGlEZWYpO1xuXHR1cGRhdGVDcml0aWNhbGl0eShkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVHJlbmQoZGF0YXBvaW50QW5ub3RhdGlvbiwgYWdncmVnYXRpb25IZWxwZXIsIGtwaURlZik7XG5cdHVwZGF0ZVRhcmdldChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblxuXHRyZXR1cm4ga3BpRGVmO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIEtQSSBkZWZpbml0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyB7S1BJRGVmaW5pdGlvbltdfSBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEtQSURlZmluaXRpb25bXSB7XG5cdGNvbnN0IGtwaUNvbmZpZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEtQSUNvbmZpZ3VyYXRpb24oKSxcblx0XHRrcGlEZWZzOiBLUElEZWZpbml0aW9uW10gPSBbXTtcblxuXHRPYmplY3Qua2V5cyhrcGlDb25maWdzKS5mb3JFYWNoKGtwaU5hbWUgPT4ge1xuXHRcdGNvbnN0IG9EZWYgPSBjcmVhdGVLUElEZWZpbml0aW9uKGtwaU5hbWUsIGtwaUNvbmZpZ3Nba3BpTmFtZV0sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChvRGVmKSB7XG5cdFx0XHRrcGlEZWZzLnB1c2gob0RlZik7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ga3BpRGVmcztcbn1cbiJdfQ==
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSS50cyJdLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJNZWFzdXJlcyIsInVuZGVmaW5lZCIsImNoYXJEaW1lbnNpb25zIiwiRGltZW5zaW9ucyIsIm1hcCIsInByb3BlcnR5UGF0aCIsImRpbUF0dHJpYnV0ZSIsIkRpbWVuc2lvbkF0dHJpYnV0ZXMiLCJmaW5kIiwiYXR0cmlidXRlIiwiRGltZW5zaW9uIiwidmFsdWUiLCJuYW1lIiwibGFiZWwiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwicm9sZSIsIlJvbGUiLCJyZXBsYWNlIiwiY2hhcnRNZWFzdXJlcyIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmUiLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJQcm9wZXJ0eSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJNYXhJdGVtcyIsInZhbHVlT2YiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJ0YXJnZXRWYWx1ZVByb3BlcnR5IiwiVmFsdWUiLCJJU09DdXJyZW5jeSIsImN1cnJlbmN5IiwiaXNQYXRoRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsInVwZGF0ZUNyaXRpY2FsaXR5IiwiYWdncmVnYXRpb25IZWxwZXIiLCJDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJpc1Byb3BlcnR5QWdncmVnYXRhYmxlIiwiY3JpdGljYWxpdHlQYXRoIiwicGF0aCIsImNyaXRpY2FsaXR5VmFsdWUiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUiLCJJbXByb3ZlbWVudERpcmVjdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzIiwicHVzaCIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIkRldmlhdGlvblJhbmdlSGlnaFZhbHVlIiwidXBkYXRlVHJlbmQiLCJUcmVuZCIsInRyZW5kUHJvcGVydHkiLCJ0cmVuZFBhdGgiLCJ0cmVuZFZhbHVlIiwiVHJlbmRDYWxjdWxhdGlvbiIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwiSXNSZWxhdGl2ZURpZmZlcmVuY2UiLCJSZWZlcmVuY2VWYWx1ZSIsInJlZmVyZW5jZVByb3BlcnR5IiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzIiwiU3Ryb25nRG93bkRpZmZlcmVuY2UiLCJEb3duRGlmZmVyZW5jZSIsIlVwRGlmZmVyZW5jZSIsIlN0cm9uZ1VwRGlmZmVyZW5jZSIsInVwZGF0ZVRhcmdldCIsIlRhcmdldFZhbHVlIiwidGFyZ2V0UHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwidGFyZ2V0VmFsdWUiLCJnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eSIsInByb3BlcnR5Iiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJhbm5vdGF0aW9uS2V5IiwiYW5ub3RhdGlvbiIsInRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsImNyZWF0ZUtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwia3BpQ29uZmlnIiwiY29udmVydGVyQ29udGV4dCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZW50aXR5U2V0IiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIkRhdGFQb2ludCIsIlNlbGVjdGlvblZhcmlhbnQiLCJEZXRhaWwiLCJEZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsIlZpc3VhbGl6YXRpb25zIiwidml6IiwiJFR5cGUiLCJTZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJLUElfTk9UX0ZPVU5EIiwiS1BJX0RFVEFJTF9OT1RfRk9VTkQiLCJkYXRhcG9pbnRQcm9wZXJ0eSIsIk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSIsImNoYXJ0RGVmIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRpdGxlIiwiVGl0bGUiLCJkZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwic2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zIiwiZ2V0RmlsdGVyRGVmaW5pdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsImNoYXJ0IiwiZGV0YWlsTmF2aWdhdGlvbiIsIm91dGJvdW5kTmF2aWdhdGlvbiIsIm5hdmlnYXRpb24iLCJnZXRLUElEZWZpbml0aW9ucyIsImtwaUNvbmZpZ3MiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRLUElDb25maWd1cmF0aW9uIiwia3BpRGVmcyIsIm9EZWYiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQXNFQSxNQUFNQSwrQkFBdUQsR0FBRztBQUMvRCw2QkFBeUIsSUFEc0M7QUFFL0QsdUJBQW1CLElBRjRDO0FBRy9ELCtCQUEyQixNQUhvQztBQUkvRCx5QkFBcUIsTUFKMEM7QUFLL0QsNkJBQXlCO0FBTHNDLEdBQWhFO0FBUUEsTUFBTUMsa0JBQTBDLEdBQUc7QUFDbEQsa0NBQThCLGVBRG9CO0FBRWxELCtCQUEyQixZQUZ1QjtBQUdsRCwwQkFBc0IsT0FINEI7QUFJbEQseUJBQXFCLE1BSjZCO0FBS2xELDJCQUF1QixRQUwyQjtBQU1sRCwyQkFBdUIsUUFOMkI7QUFPbEQsd0JBQW9CLEtBUDhCO0FBUWxELG1DQUErQixpQkFSbUI7QUFTbEQsZ0NBQTRCLGFBVHNCO0FBVWxELDRCQUF3QjtBQVYwQixHQUFuRDs7QUFhQSxXQUFTQyxlQUFULENBQXlCQyxlQUF6QixFQUFpREMsNkJBQWpELEVBQXFJO0FBQUE7O0FBQ3BJLFFBQUlELGVBQWUsQ0FBQ0UsUUFBaEIsS0FBNkJDLFNBQWpDLEVBQTRDO0FBQzNDO0FBQ0EsYUFBT0EsU0FBUDtBQUNBOztBQUVELFFBQU1DLGNBQWMsR0FBR0osZUFBZSxDQUFDSyxVQUFoQixHQUNwQkwsZUFBZSxDQUFDSyxVQUFoQixDQUEyQkMsR0FBM0IsQ0FBK0IsVUFBQ0MsWUFBRCxFQUFrQjtBQUFBOztBQUNqRCxVQUFNQyxZQUFZLDRCQUFHUixlQUFlLENBQUNTLG1C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YjtBQUNBO0FBQ0QsS0FMRDtBQU9BLFdBQU9ELE9BQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFQb2ludCxcblx0SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlLFxuXHRLUElUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0VHJlbmRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyRGVmaW5pdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgeyBpc1BhdGhFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGdldEtQSUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdGRpbWVuc2lvbnM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0bWVhc3VyZXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0c29ydE9yZGVyPzogeyBuYW1lOiBzdHJpbmc7IGRlc2NlbmRpbmc6IGJvb2xlYW4gfVtdO1xuXHRtYXhJdGVtcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRkYXRhcG9pbnQ6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50KTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdFx0XHRsYWJlbDogcHJvcGVydHlQYXRoLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdHJvbGU6IG1lYXN1cmVBdHRyaWJ1dGU/LlJvbGU/LnJlcGxhY2UoXCJVSS5DaGFydE1lYXN1cmVSb2xlVHlwZS9cIiwgXCJcIilcblx0XHR9O1xuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGNoYXJ0VHlwZTogS1BJQ2hhcnRUeXBlRnJvbVVJW2NoYXJ0QW5ub3RhdGlvbi5DaGFydFR5cGVdIHx8IFwiTGluZVwiLFxuXHRcdGRpbWVuc2lvbnM6IGNoYXJEaW1lbnNpb25zLFxuXHRcdG1lYXN1cmVzOiBjaGFydE1lYXN1cmVzLFxuXHRcdHNvcnRPcmRlcjogcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlNvcnRPcmRlcj8ubWFwKChzb3J0T3JkZXIpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IHNvcnRPcmRlci5Qcm9wZXJ0eT8udmFsdWUgfHwgXCJcIiwgZGVzY2VuZGluZzogISFzb3J0T3JkZXIuRGVzY2VuZGluZyB9O1xuXHRcdH0pLFxuXHRcdG1heEl0ZW1zOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXM/LnZhbHVlT2YoKSBhcyBudW1iZXJcblx0fTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3VycmVuY3koZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50LCBrcGlEZWY6IEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0Y29uc3QgY3VycmVuY3kgPSB0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0XHRpZiAoaXNQYXRoRXhwcmVzc2lvbihjdXJyZW5jeSkpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IChjdXJyZW5jeS4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IHRydWUsXG5cdFx0XHRcdGlzUGF0aDogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogY3VycmVuY3kudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdCkge1xuXHRcdGNvbnN0IHVuaXQgPSB0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0O1xuXHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludCwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkpIHtcblx0XHRpZiAodHlwZW9mIGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eVByb3BlcnR5ID0gKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgYW55IGFzIFByb3BlcnR5UGF0aCkuJHRhcmdldDtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4pLnBhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgaXNuJ3QgYWdncmVnYXRhYmxlIC0tPiB3ZSBpZ25vcmUgaXRcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYW4gZW51bSBWYWx1ZSAtLT4gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkltcHJvdmVtZW50RGlyZWN0aW9uO1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMgPSBbXTtcblx0XHRzd2l0Y2ggKGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvVGFyZ2V0XCI6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWluaW1pemVcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnQsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZVxuXHRcdFx0Y29uc3QgdHJlbmRQcm9wZXJ0eSA9IChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kIGFzIGFueSBhcyBQcm9wZXJ0eVBhdGgpLiR0YXJnZXQ7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0cmVuZFByb3BlcnR5KSkge1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kUGF0aCA9IChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUcmVuZFR5cGU+KS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSBhcyBudW1iZXIsXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5Eb3duRGlmZmVyZW5jZS52YWx1ZU9mKCkgYXMgbnVtYmVyLFxuXHRcdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uVXBEaWZmZXJlbmNlLnZhbHVlT2YoKSBhcyBudW1iZXIsXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpIGFzIG51bWJlclxuXHRcdFx0XTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludCwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUpIHtcblx0XHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGUgKG90aGVyd2lzZSBpZ25vcmUpXG5cdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRhcmdldFByb3BlcnR5KSkge1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRhcmdldFBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLnBhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRhcmdldCB2YWx1ZSBpcyBhIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRWYWx1ZSA9IGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSk6IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25UZXJtPGFueT4+ID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cblx0Ly8gTG9vayBmb3IgdGhlIHNlbWFudGljT2JqZWN0IGFubm90YXRpb24gKGlmIGFueSlcblx0bGV0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbjogQW5ub3RhdGlvblRlcm08U2VtYW50aWNPYmplY3Q+IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5XTtcblx0XHRpZiAoYW5ub3RhdGlvbi50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdGlmICghYW5ub3RhdGlvbi5xdWFsaWZpZXIgfHwgIXNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdFx0XHQvLyBXZSBhbHdheXMgdGFrZSB0aGUgYW5ub3RhdGlvbiB3aXRob3V0IHF1YWxpZmllciBpZiB0aGVyZSdzIG9uZSwgb3RoZXJ3aXNlIHdlIHRha2UgdGhlIGZpcnN0IG9uZVxuXHRcdFx0XHRzZW1hbnRpY09iamVjdEFubm90YXRpb24gPSBhbm5vdGF0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzZW1hbnRpY09iamVjdEFubm90YXRpb24udG9TdHJpbmcoKSxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogW11cblx0XHR9O1xuXG5cdFx0Ly8gTG9vayBmb3IgdGhlIHVuYXZhaWxhYmxlIGFjdGlvbnMgKGlmIGFueSlcblx0XHRjb25zdCBhbm5vdGF0aW9uS2V5ID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbnMpLmZpbmQoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YW5ub3RhdGlvbnNba2V5XS50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgJiZcblx0XHRcdFx0YW5ub3RhdGlvbnNba2V5XS5xdWFsaWZpZXIgPT09IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbj8ucXVhbGlmaWVyXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdGlmIChhbm5vdGF0aW9uS2V5KSB7XG5cdFx0XHRyZXN1bHQudW5hdmFpbGFibGVBY3Rpb25zID0gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbktleV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oa3BpTmFtZTogc3RyaW5nLCBrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBLUElEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qga3BpQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihgLyR7a3BpQ29uZmlnLmVudGl0eVNldH1gKTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoa3BpQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGtwaUNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdC8vIFRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllc1xuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuTk9fQU5BTFlUSUNTICsga3BpQ29uZmlnLmVudGl0eVNldCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRsZXQgZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50IHwgdW5kZWZpbmVkO1xuXHRsZXQgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEFubm90YXRpb25UZXJtPEtQSVR5cGU+W107XG5cdGNvbnN0IHRhcmdldEtQSSA9IGFLUElBbm5vdGF0aW9ucy5maW5kKChrcGkpID0+IHtcblx0XHRyZXR1cm4ga3BpLnF1YWxpZmllciA9PT0ga3BpQ29uZmlnLnF1YWxpZmllcjtcblx0fSk7XG5cdGlmICh0YXJnZXRLUEkpIHtcblx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uID0gdGFyZ2V0S1BJLkRhdGFQb2ludDtcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5TZWxlY3Rpb25WYXJpYW50O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0S1BJLkRldGFpbD8uRGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0Y2hhcnRBbm5vdGF0aW9uID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXo6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIHZpei4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlO1xuXHRcdH0pPy4kdGFyZ2V0IGFzIENoYXJ0O1xuXG5cdFx0aWYgKHRhcmdldEtQSS5EZXRhaWw/LlNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHRhcmdldEtQSS5EZXRhaWwuU2VtYW50aWNPYmplY3QudG9TdHJpbmcoKSxcblx0XHRcdFx0YWN0aW9uOiB0YXJnZXRLUEkuRGV0YWlsLkFjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRmFsbGJhY2s6IHRyeSB0byBmaW5kIGEgU1BWIHdpdGggdGhlIHNhbWUgcXVhbGlmaWVyXG5cdFx0Y29uc3QgYVNQVkFubm90YXRpb25zID0ga3BpQ29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFwiVUlcIixcblx0XHRcdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHQpIGFzIEFubm90YXRpb25UZXJtPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlPltdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6OiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHZpei4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlO1xuXHRcdFx0fSk/LiR0YXJnZXQgYXMgRGF0YVBvaW50O1xuXHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXo6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdml6LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNoYXJ0RGVmaW5pdGlvblR5cGU7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbik7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBLUElEZWZpbml0aW9uID0ge1xuXHRcdGlkOiBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRlbnRpdHlTZXQ6IGtwaUNvbmZpZy5lbnRpdHlTZXQsXG5cdFx0ZGF0YXBvaW50OiB7XG5cdFx0XHRwcm9wZXJ0eVBhdGg6IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUucGF0aCxcblx0XHRcdGFubm90YXRpb25QYXRoOiBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YXBvaW50QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0dGl0bGU6IGRhdGFwb2ludEFubm90YXRpb24uVGl0bGU/LnRvU3RyaW5nKCksXG5cdFx0XHRkZXNjcmlwdGlvbjogZGF0YXBvaW50QW5ub3RhdGlvbi5EZXNjcmlwdGlvbj8udG9TdHJpbmcoKVxuXHRcdH0sXG5cdFx0c2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zOiBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHRcdFx0PyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKVxuXHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0Y2hhcnQ6IGNoYXJ0RGVmXG5cdH07XG5cblx0Ly8gTmF2aWdhdGlvblxuXHRpZiAoIW5hdmlnYXRpb25JbmZvKSB7XG5cdFx0Ly8gTm8gbmF2aWdhdGlvbkluZm8gd2FzIGZvdW5kIGluIHRoZSBLUEkgYW5ub3RhdGlvbiAtLT4gdHJ5IHRoZSBvdXRib3VuZCBuYXZpZ2F0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdFx0aWYgKGtwaUNvbmZpZy5kZXRhaWxOYXZpZ2F0aW9uKSB7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IHtcblx0XHRcdFx0b3V0Ym91bmROYXZpZ2F0aW9uOiBrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvblxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gb3V0Ym91bmQgbmF2aWdhdGlvbiBpbiB0aGUgbWFuaWZlc3QgLS0+IHRyeSB0aGUgc2VtYW50aWMgb2JqZWN0IG9uIHRoZSBEYXRhcG9pbnQgdmFsdWVcblx0XHRcdG5hdmlnYXRpb25JbmZvID0gZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkoZGF0YXBvaW50UHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRpZiAobmF2aWdhdGlvbkluZm8pIHtcblx0XHRrcGlEZWYubmF2aWdhdGlvbiA9IG5hdmlnYXRpb25JbmZvO1xuXHR9XG5cblx0dXBkYXRlQ3VycmVuY3koZGF0YXBvaW50QW5ub3RhdGlvbiwga3BpRGVmKTtcblx0dXBkYXRlQ3JpdGljYWxpdHkoZGF0YXBvaW50QW5ub3RhdGlvbiwgYWdncmVnYXRpb25IZWxwZXIsIGtwaURlZik7XG5cdHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbiwgYWdncmVnYXRpb25IZWxwZXIsIGtwaURlZik7XG5cblx0cmV0dXJuIGtwaURlZjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBLUEkgZGVmaW5pdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEtQSURlZmluaXRpb25bXSB7XG5cdGNvbnN0IGtwaUNvbmZpZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEtQSUNvbmZpZ3VyYXRpb24oKSxcblx0XHRrcGlEZWZzOiBLUElEZWZpbml0aW9uW10gPSBbXTtcblxuXHRPYmplY3Qua2V5cyhrcGlDb25maWdzKS5mb3JFYWNoKChrcGlOYW1lKSA9PiB7XG5cdFx0Y29uc3Qgb0RlZiA9IGNyZWF0ZUtQSURlZmluaXRpb24oa3BpTmFtZSwga3BpQ29uZmlnc1trcGlOYW1lXSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0aWYgKG9EZWYpIHtcblx0XHRcdGtwaURlZnMucHVzaChvRGVmKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBrcGlEZWZzO1xufVxuIl19
@@ -1,32 +1,28 @@
1
- import { KPIConfiguration } from "../../ManifestSettings";
2
- import { Property } from "@sap-ux/annotation-converter";
3
- import {
4
- AnnotationTerm,
5
- UIAnnotationTerms,
6
- UIAnnotationTypes,
7
- PathAnnotationExpression,
1
+ import type { AnnotationTerm, PathAnnotationExpression, Property, PropertyPath } from "@sap-ux/vocabularies-types";
2
+ import type { SemanticObject } from "@sap-ux/vocabularies-types/vocabularies/Common";
3
+ import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Common";
4
+ import type {
5
+ Chart,
8
6
  CriticalityType,
9
- ImprovementDirectionType
10
- } from "@sap-ux/vocabularies-types";
11
- import {
7
+ DataPoint,
8
+ ImprovementDirectionType,
12
9
  KPIType,
13
- SelectionPresentationVariantType,
14
10
  PresentationVariant,
11
+ SelectionPresentationVariantType,
15
12
  SelectionVariant,
16
- DataPoint,
17
- Chart,
18
13
  TrendType
19
- } from "@sap-ux/vocabularies-types/dist/generated/UI";
20
- import { PropertyPath } from "@sap-ux/vocabularies-types/dist/Edm";
21
- import ConverterContext from "sap/fe/core/converters/ConverterContext";
22
- import { KPIID } from "../../helpers/ID";
23
- import { isPathExpression } from "sap/fe/core/templating/PropertyHelper";
14
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
15
+ import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
16
+ import type ConverterContext from "sap/fe/core/converters/ConverterContext";
17
+ import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
18
+ import type { FilterDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
19
+ import { getFilterDefinitionsFromSelectionVariant } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
24
20
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
21
+ import { isPathExpression } from "sap/fe/core/templating/PropertyHelper";
25
22
  import { AggregationHelper } from "../../helpers/Aggregation";
26
- import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
23
+ import { getKPIID } from "../../helpers/ID";
24
+ import type { KPIConfiguration } from "../../ManifestSettings";
27
25
  import { getMessageTypeFromCriticalityType } from "./Criticality";
28
- import { getFilterDefinitionsFromSelectionVariant, FilterDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
29
- import { CommonAnnotationTerms, SemanticObject } from "@sap-ux/vocabularies-types/dist/generated/Common";
30
26
 
31
27
  export type NavigationInfo = {
32
28
  semanticObject?: string;
@@ -102,8 +98,8 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
102
98
  }
103
99
 
104
100
  const charDimensions = chartAnnotation.Dimensions
105
- ? (chartAnnotation.Dimensions as PropertyPath[]).map(propertyPath => {
106
- const dimAttribute = chartAnnotation.DimensionAttributes?.find(attribute => {
101
+ ? chartAnnotation.Dimensions.map((propertyPath) => {
102
+ const dimAttribute = chartAnnotation.DimensionAttributes?.find((attribute) => {
107
103
  return attribute.Dimension?.value === propertyPath.value;
108
104
  });
109
105
  return {
@@ -114,8 +110,8 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
114
110
  })
115
111
  : [];
116
112
 
117
- const chartMeasures = (chartAnnotation.Measures as PropertyPath[]).map(propertyPath => {
118
- const measureAttribute = chartAnnotation.MeasureAttributes?.find(attribute => {
113
+ const chartMeasures = chartAnnotation.Measures.map((propertyPath) => {
114
+ const measureAttribute = chartAnnotation.MeasureAttributes?.find((attribute) => {
119
115
  return attribute.Measure?.value === propertyPath.value;
120
116
  });
121
117
  return {
@@ -129,7 +125,7 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
129
125
  chartType: KPIChartTypeFromUI[chartAnnotation.ChartType] || "Line",
130
126
  dimensions: charDimensions,
131
127
  measures: chartMeasures,
132
- sortOrder: presentationVariantAnnotation?.SortOrder?.map(sortOrder => {
128
+ sortOrder: presentationVariantAnnotation?.SortOrder?.map((sortOrder) => {
133
129
  return { name: sortOrder.Property?.value || "", descending: !!sortOrder.Descending };
134
130
  }),
135
131
  maxItems: presentationVariantAnnotation?.MaxItems?.valueOf() as number
@@ -142,7 +138,7 @@ function updateCurrency(datapointAnnotation: DataPoint, kpiDef: KPIDefinition):
142
138
  const currency = targetValueProperty.annotations.Measures?.ISOCurrency;
143
139
  if (isPathExpression(currency)) {
144
140
  kpiDef.datapoint.unit = {
145
- value: ((currency.$target as unknown) as Property).name,
141
+ value: (currency.$target as unknown as Property).name,
146
142
  isCurrency: true,
147
143
  isPath: true
148
144
  };
@@ -157,7 +153,7 @@ function updateCurrency(datapointAnnotation: DataPoint, kpiDef: KPIDefinition):
157
153
  const unit = targetValueProperty.annotations.Measures?.Unit;
158
154
  if (isPathExpression(unit)) {
159
155
  kpiDef.datapoint.unit = {
160
- value: ((unit.$target as unknown) as Property).name,
156
+ value: (unit.$target as unknown as Property).name,
161
157
  isCurrency: false,
162
158
  isPath: true
163
159
  };
@@ -175,7 +171,7 @@ function updateCriticality(datapointAnnotation: DataPoint, aggregationHelper: Ag
175
171
  if (datapointAnnotation.Criticality) {
176
172
  if (typeof datapointAnnotation.Criticality === "object") {
177
173
  // Criticality is a path --> check if the corresponding property is aggregatable
178
- const criticalityProperty = ((datapointAnnotation.Criticality as any) as PropertyPath).$target as Property;
174
+ const criticalityProperty = (datapointAnnotation.Criticality as any as PropertyPath).$target;
179
175
  if (aggregationHelper.isPropertyAggregatable(criticalityProperty)) {
180
176
  kpiDef.datapoint.criticalityPath = (datapointAnnotation.Criticality as PathAnnotationExpression<CriticalityType>).path;
181
177
  } else {
@@ -220,7 +216,7 @@ function updateTrend(datapointAnnotation: DataPoint, aggregationHelper: Aggregat
220
216
  if (datapointAnnotation.Trend) {
221
217
  if (typeof datapointAnnotation.Trend === "object") {
222
218
  // Trend is a path --> check if the corresponding property is aggregatable
223
- const trendProperty = ((datapointAnnotation.Trend as any) as PropertyPath).$target as Property;
219
+ const trendProperty = (datapointAnnotation.Trend as any as PropertyPath).$target;
224
220
  if (aggregationHelper.isPropertyAggregatable(trendProperty)) {
225
221
  kpiDef.datapoint.trendPath = (datapointAnnotation.Trend as PathAnnotationExpression<TrendType>).path;
226
222
  } else {
@@ -279,7 +275,7 @@ function getNavigationInfoFromProperty(property: Property): NavigationInfo | und
279
275
 
280
276
  // Look for the semanticObject annotation (if any)
281
277
  let semanticObjectAnnotation: AnnotationTerm<SemanticObject> | undefined;
282
- Object.keys(annotations).forEach(annotationKey => {
278
+ Object.keys(annotations).forEach((annotationKey) => {
283
279
  const annotation = annotations[annotationKey];
284
280
  if (annotation.term === CommonAnnotationTerms.SemanticObject) {
285
281
  if (!annotation.qualifier || !semanticObjectAnnotation) {
@@ -296,7 +292,7 @@ function getNavigationInfoFromProperty(property: Property): NavigationInfo | und
296
292
  };
297
293
 
298
294
  // Look for the unavailable actions (if any)
299
- const annotationKey = Object.keys(annotations).find(key => {
295
+ const annotationKey = Object.keys(annotations).find((key) => {
300
296
  return (
301
297
  annotations[key].term === CommonAnnotationTerms.SemanticObjectUnavailableActions &&
302
298
  annotations[key].qualifier === semanticObjectAnnotation?.qualifier
@@ -313,7 +309,7 @@ function getNavigationInfoFromProperty(property: Property): NavigationInfo | und
313
309
  }
314
310
 
315
311
  function createKPIDefinition(kpiName: string, kpiConfig: KPIConfiguration, converterContext: ConverterContext): KPIDefinition | undefined {
316
- const kpiConverterContext = converterContext.getConverterContextFor("/" + kpiConfig.entitySet);
312
+ const kpiConverterContext = converterContext.getConverterContextFor(`/${kpiConfig.entitySet}`);
317
313
  const aggregationHelper = new AggregationHelper(kpiConverterContext.getEntityType(), kpiConverterContext);
318
314
 
319
315
  if (!aggregationHelper.isAnalyticsSupported()) {
@@ -333,7 +329,7 @@ function createKPIDefinition(kpiName: string, kpiConfig: KPIConfiguration, conve
333
329
 
334
330
  // Search for a KPI with the qualifier frmo the manifest
335
331
  const aKPIAnnotations = kpiConverterContext.getAnnotationsByTerm("UI", UIAnnotationTerms.KPI) as AnnotationTerm<KPIType>[];
336
- const targetKPI = aKPIAnnotations.find(kpi => {
332
+ const targetKPI = aKPIAnnotations.find((kpi) => {
337
333
  return kpi.qualifier === kpiConfig.qualifier;
338
334
  });
339
335
  if (targetKPI) {
@@ -357,7 +353,7 @@ function createKPIDefinition(kpiName: string, kpiConfig: KPIConfiguration, conve
357
353
  "UI",
358
354
  UIAnnotationTerms.SelectionPresentationVariant
359
355
  ) as AnnotationTerm<SelectionPresentationVariantType>[];
360
- const targetSPV = aSPVAnnotations.find(spv => {
356
+ const targetSPV = aSPVAnnotations.find((spv) => {
361
357
  return spv.qualifier === kpiConfig.qualifier;
362
358
  });
363
359
  if (targetSPV) {
@@ -408,7 +404,7 @@ function createKPIDefinition(kpiName: string, kpiConfig: KPIConfiguration, conve
408
404
  }
409
405
 
410
406
  const kpiDef: KPIDefinition = {
411
- id: KPIID(kpiName),
407
+ id: getKPIID(kpiName),
412
408
  entitySet: kpiConfig.entitySet,
413
409
  datapoint: {
414
410
  propertyPath: datapointAnnotation.Value.path,
@@ -449,14 +445,14 @@ function createKPIDefinition(kpiName: string, kpiConfig: KPIConfiguration, conve
449
445
  /**
450
446
  * Creates the KPI definitions from the manifest and the annotations.
451
447
  *
452
- * @param {ConverterContext} converterContext The converter context for the page
453
- * @returns {KPIDefinition[]} Returns an array of KPI definitions
448
+ * @param converterContext The converter context for the page
449
+ * @returns Returns an array of KPI definitions
454
450
  */
455
451
  export function getKPIDefinitions(converterContext: ConverterContext): KPIDefinition[] {
456
452
  const kpiConfigs = converterContext.getManifestWrapper().getKPIConfiguration(),
457
453
  kpiDefs: KPIDefinition[] = [];
458
454
 
459
- Object.keys(kpiConfigs).forEach(kpiName => {
455
+ Object.keys(kpiConfigs).forEach((kpiName) => {
460
456
  const oDef = createKPIDefinition(kpiName, kpiConfigs[kpiName], converterContext);
461
457
  if (oDef) {
462
458
  kpiDefs.push(oDef);