@sapui5/sap.fe.core 1.100.0 → 1.102.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 (295) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AppComponent.js +23 -30
  4. package/src/sap/fe/core/AppComponent.ts +35 -40
  5. package/src/sap/fe/core/AppStateHandler.js +8 -8
  6. package/src/sap/fe/core/AppStateHandler.ts +11 -11
  7. package/src/sap/fe/core/BaseController.js +9 -9
  8. package/src/sap/fe/core/BaseController.ts +3 -4
  9. package/src/sap/fe/core/CommonUtils.js +122 -101
  10. package/src/sap/fe/core/CommonUtils.ts +239 -193
  11. package/src/sap/fe/core/ExtensionAPI.js +12 -13
  12. package/src/sap/fe/core/ExtensionAPI.ts +21 -31
  13. package/src/sap/fe/core/PageController.js +19 -13
  14. package/src/sap/fe/core/PageController.ts +40 -34
  15. package/src/sap/fe/core/TemplateComponent.js +198 -123
  16. package/src/sap/fe/core/TemplateComponent.ts +109 -121
  17. package/src/sap/fe/core/TemplateModel.js +7 -9
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  27. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  28. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  29. package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
  30. package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  33. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
  34. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
  35. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
  36. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
  37. package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
  38. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
  39. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  40. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  41. package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
  42. package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
  43. package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
  44. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
  45. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  46. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  47. package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
  48. package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  50. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  51. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  52. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  53. package/src/sap/fe/core/controllerextensions/Share.js +34 -16
  54. package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
  55. package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
  56. package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
  57. package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
  58. package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  61. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
  63. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
  65. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
  67. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
  68. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  69. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
  70. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
  71. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
  74. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  77. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
  78. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
  79. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  80. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  82. package/src/sap/fe/core/controls/Any.js +28 -0
  83. package/src/sap/fe/core/controls/Any.ts +30 -0
  84. package/src/sap/fe/core/controls/CommandExecution.js +50 -16
  85. package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
  86. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  87. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  88. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
  89. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
  90. package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
  91. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
  93. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
  95. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  96. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  97. package/src/sap/fe/core/controls/FileWrapper.js +360 -0
  98. package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
  99. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  100. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  101. package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
  102. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
  103. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  104. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  105. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  106. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  107. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  108. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  109. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  110. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  111. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  112. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  113. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
  114. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
  117. package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
  118. package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
  119. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  120. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  121. package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
  127. package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
  128. package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
  129. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  130. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  131. package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
  132. package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
  133. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
  135. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
  137. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  138. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  139. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
  140. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  143. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  145. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  147. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  149. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  151. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
  153. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  154. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  155. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  156. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  157. package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
  158. package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  161. package/src/sap/fe/core/fpm/Component.js +46 -17
  162. package/src/sap/fe/core/fpm/Component.ts +11 -16
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  165. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  166. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  167. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  168. package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
  169. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  170. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  171. package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
  172. package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
  173. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  174. package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
  175. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  176. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  177. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  178. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  179. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  181. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
  182. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
  183. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  184. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  185. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  186. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  187. package/src/sap/fe/core/library.js +13 -5
  188. package/src/sap/fe/core/library.ts +26 -17
  189. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  190. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  191. package/src/sap/fe/core/messagebundle.properties +135 -180
  192. package/src/sap/fe/core/messagebundle_ar.properties +31 -64
  193. package/src/sap/fe/core/messagebundle_bg.properties +31 -64
  194. package/src/sap/fe/core/messagebundle_ca.properties +31 -64
  195. package/src/sap/fe/core/messagebundle_cs.properties +31 -64
  196. package/src/sap/fe/core/messagebundle_cy.properties +32 -65
  197. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  198. package/src/sap/fe/core/messagebundle_de.properties +29 -62
  199. package/src/sap/fe/core/messagebundle_el.properties +32 -65
  200. package/src/sap/fe/core/messagebundle_en.properties +32 -65
  201. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
  202. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
  203. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
  204. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
  205. package/src/sap/fe/core/messagebundle_es.properties +31 -64
  206. package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
  207. package/src/sap/fe/core/messagebundle_et.properties +31 -64
  208. package/src/sap/fe/core/messagebundle_fi.properties +29 -62
  209. package/src/sap/fe/core/messagebundle_fr.properties +36 -69
  210. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
  211. package/src/sap/fe/core/messagebundle_hi.properties +29 -62
  212. package/src/sap/fe/core/messagebundle_hr.properties +32 -65
  213. package/src/sap/fe/core/messagebundle_hu.properties +30 -63
  214. package/src/sap/fe/core/messagebundle_id.properties +32 -65
  215. package/src/sap/fe/core/messagebundle_it.properties +31 -64
  216. package/src/sap/fe/core/messagebundle_iw.properties +31 -64
  217. package/src/sap/fe/core/messagebundle_ja.properties +29 -62
  218. package/src/sap/fe/core/messagebundle_kk.properties +31 -64
  219. package/src/sap/fe/core/messagebundle_ko.properties +31 -64
  220. package/src/sap/fe/core/messagebundle_lt.properties +31 -64
  221. package/src/sap/fe/core/messagebundle_lv.properties +32 -65
  222. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  223. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  224. package/src/sap/fe/core/messagebundle_no.properties +31 -64
  225. package/src/sap/fe/core/messagebundle_pl.properties +34 -67
  226. package/src/sap/fe/core/messagebundle_pt.properties +32 -65
  227. package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
  228. package/src/sap/fe/core/messagebundle_ro.properties +33 -66
  229. package/src/sap/fe/core/messagebundle_ru.properties +33 -66
  230. package/src/sap/fe/core/messagebundle_sh.properties +31 -64
  231. package/src/sap/fe/core/messagebundle_sk.properties +31 -64
  232. package/src/sap/fe/core/messagebundle_sl.properties +29 -62
  233. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  234. package/src/sap/fe/core/messagebundle_th.properties +31 -64
  235. package/src/sap/fe/core/messagebundle_tr.properties +31 -64
  236. package/src/sap/fe/core/messagebundle_uk.properties +32 -65
  237. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  238. package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
  239. package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
  240. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  241. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  243. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  244. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
  245. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
  246. package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
  247. package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
  248. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  249. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
  251. package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
  252. package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
  253. package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
  254. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  255. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
  257. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
  258. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  259. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  260. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  261. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  262. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  263. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  264. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  265. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
  266. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  267. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  268. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  269. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  270. package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
  271. package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
  272. package/src/sap/fe/core/templating/UIFormatters.js +133 -22
  273. package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
  274. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  275. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  276. package/src/sap/fe/core/type/Email.js +26 -8
  277. package/src/sap/fe/core/type/Email.ts +8 -7
  278. package/src/sap/fe/core/AnnotationHelper.js +0 -312
  279. package/src/sap/fe/core/AnnotationHelper.ts +0 -315
  280. package/src/sap/fe/core/RouterProxy.js +0 -926
  281. package/src/sap/fe/core/TransactionHelper.js +0 -1562
  282. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
  283. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
  284. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
  285. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
  286. package/src/sap/fe/core/actions/draft.js +0 -523
  287. package/src/sap/fe/core/actions/messageHandling.js +0 -567
  288. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  289. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  290. package/src/sap/fe/core/actions/operations.js +0 -1096
  291. package/src/sap/fe/core/actions/sticky.js +0 -130
  292. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  293. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
  294. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  295. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -0,0 +1,371 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/SemanticDateOperators", "sap/ui/base/ManagedObjectObserver", "sap/ui/core/Control", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValidated", "sap/ui/mdc/field/ConditionsType", "sap/ui/model/json/JSONModel"], function (ClassSupport, SemanticDateOperators, ManagedObjectObserver, Control, Condition, ConditionValidated, ConditionsType, JSONModel) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _class3, _temp;
9
+
10
+ var _exports = {};
11
+ var property = ClassSupport.property;
12
+ var implementInterface = ClassSupport.implementInterface;
13
+ var event = ClassSupport.event;
14
+ var defineUI5Class = ClassSupport.defineUI5Class;
15
+ var aggregation = ClassSupport.aggregation;
16
+
17
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
18
+
19
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
20
+
21
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
22
+
23
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
24
+
25
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
26
+
27
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
28
+
29
+ var CustomFilterFieldContentWrapper = (
30
+ /**
31
+ * @class
32
+ * Creates an <code>sap.fe.core.controls.CustomFilterFieldContentWrapper</code> object.
33
+ * This is used in the {@link sap.ui.mdc.FilterField FilterField} as a filter content.
34
+ * @extends sap.ui.core.Control
35
+ * @private
36
+ * @alias sap.fe.core.controls.CustomFilterFieldContentWrapper
37
+ */
38
+ _dec = defineUI5Class("sap.fe.core.controls.CustomFilterFieldContentWrapper"), _dec2 = implementInterface("sap.ui.core.IFormContent"), _dec3 = property({
39
+ type: "sap.ui.core.CSSSize",
40
+ defaultValue: null
41
+ }), _dec4 = property({
42
+ type: "boolean",
43
+ defaultValue: false
44
+ }), _dec5 = property({
45
+ type: "object[]",
46
+ defaultValue: []
47
+ }), _dec6 = aggregation({
48
+ type: "sap.ui.core.Control",
49
+ multiple: false,
50
+ isDefault: true
51
+ }), _dec7 = event(), _dec(_class = (_class2 = (_temp = _class3 = /*#__PURE__*/function (_Control) {
52
+ _inheritsLoose(CustomFilterFieldContentWrapper, _Control);
53
+
54
+ function CustomFilterFieldContentWrapper() {
55
+ var _this;
56
+
57
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
58
+ args[_key] = arguments[_key];
59
+ }
60
+
61
+ _this = _Control.call.apply(_Control, [this].concat(args)) || this;
62
+
63
+ _initializerDefineProperty(_this, "__implements__sap_ui_core_IFormContent", _descriptor, _assertThisInitialized(_this));
64
+
65
+ _initializerDefineProperty(_this, "width", _descriptor2, _assertThisInitialized(_this));
66
+
67
+ _initializerDefineProperty(_this, "formDoNotAdjustWidth", _descriptor3, _assertThisInitialized(_this));
68
+
69
+ _initializerDefineProperty(_this, "conditions", _descriptor4, _assertThisInitialized(_this));
70
+
71
+ _initializerDefineProperty(_this, "content", _descriptor5, _assertThisInitialized(_this));
72
+
73
+ _initializerDefineProperty(_this, "conditionsChange", _descriptor6, _assertThisInitialized(_this));
74
+
75
+ return _this;
76
+ }
77
+
78
+ _exports = CustomFilterFieldContentWrapper;
79
+
80
+ CustomFilterFieldContentWrapper.render = function render(renderManager, control) {
81
+ renderManager.openStart("div", control);
82
+ renderManager.style("min-height", "1rem");
83
+ renderManager.style("width", control.width);
84
+ renderManager.openEnd();
85
+ renderManager.renderControl(control.getContent()); // render the child Control
86
+
87
+ renderManager.close("div"); // end of the complete Control
88
+ }
89
+ /**
90
+ * Maps an array of filter values to an array of conditions.
91
+ *
92
+ * @param {Array | string} filterValues Array of filter value bindings or a filter value string
93
+ * @param {string} [operator] The operator to be used (optional) - if not set, the default operator (EQ) will be used
94
+ * @private
95
+ * @returns {Array} Array of filter conditions
96
+ */
97
+ ;
98
+
99
+ CustomFilterFieldContentWrapper._filterValuesToConditions = function _filterValuesToConditions(filterValues, operator) {
100
+ var formatOptions = {
101
+ operators: []
102
+ },
103
+ conditions = [];
104
+
105
+ if (operator) {
106
+ formatOptions = {
107
+ operators: [operator]
108
+ };
109
+ }
110
+
111
+ if (filterValues === "") {
112
+ filterValues = [];
113
+ } else if (typeof filterValues === "object" && filterValues.hasOwnProperty("operator") && filterValues.hasOwnProperty("values")) {
114
+ formatOptions = {
115
+ operators: [filterValues.operator]
116
+ };
117
+ filterValues = filterValues.values;
118
+ } else if (filterValues !== undefined && typeof filterValues !== "object" && typeof filterValues !== "string") {
119
+ throw new Error("FilterUtils.js#_filterValuesToConditions: Unexpected type of input parameter vValues: " + typeof filterValues);
120
+ }
121
+
122
+ var conditionsType = new ConditionsType(formatOptions);
123
+ var conditionValues = Array.isArray(filterValues) ? filterValues : [filterValues]; // Shortcut for operator without values and semantic date operations
124
+
125
+ if (typeof operator === "string" && (conditionValues.length === 0 || SemanticDateOperators.getSemanticDateOperations().includes(operator))) {
126
+ conditions = [Condition.createCondition(operator, conditionValues, null, null, ConditionValidated.NotValidated)];
127
+ } else {
128
+ conditions = conditionValues.map(function (conditionValue) {
129
+ var stringValue = conditionValue === null || conditionValue === void 0 ? void 0 : conditionValue.toString(),
130
+ parsedConditions = conditionsType.parseValue(stringValue, "any");
131
+ return parsedConditions === null || parsedConditions === void 0 ? void 0 : parsedConditions[0];
132
+ }).filter(function (conditionValue) {
133
+ return conditionValue !== undefined;
134
+ });
135
+ }
136
+
137
+ return conditions;
138
+ }
139
+ /**
140
+ * Maps an array of conditions to a comma separated list of filter values.
141
+ *
142
+ * @param {object[]} conditions Array of filter conditions
143
+ * @param {object} formatOptions Format options that specifies a condition type
144
+ * @private
145
+ * @returns {string} Concatenated string of filter values
146
+ */
147
+ ;
148
+
149
+ CustomFilterFieldContentWrapper._conditionsToFilterModelString = function _conditionsToFilterModelString(conditions, formatOptions) {
150
+ var conditionsType = new ConditionsType(formatOptions);
151
+ return conditions.map(function (condition) {
152
+ return conditionsType.formatValue([condition], "any") || "";
153
+ }).filter(function (stringValue) {
154
+ return stringValue !== "";
155
+ }).join(",");
156
+ }
157
+ /**
158
+ * Listens to filter model changes and updates wrapper property "conditions".
159
+ *
160
+ * @param {object} changeEvent Event triggered by a filter model change
161
+ * @private
162
+ */
163
+ ;
164
+
165
+ var _proto = CustomFilterFieldContentWrapper.prototype;
166
+
167
+ _proto._handleFilterModelChange = function _handleFilterModelChange(changeEvent) {
168
+ var propertyPath = this.getObjectBinding("filterValues").getPath(),
169
+ values = changeEvent.getSource().getProperty(propertyPath);
170
+ this.updateConditionsByFilterValues(values, "");
171
+ }
172
+ /**
173
+ * Listens to "conditions" changes and updates the filter model.
174
+ *
175
+ * @param {object} conditions Event triggered by a "conditions" change
176
+ * @private
177
+ */
178
+ ;
179
+
180
+ _proto._handleConditionsChange = function _handleConditionsChange(conditions) {
181
+ this.updateFilterModelByConditions(conditions);
182
+ }
183
+ /**
184
+ * Initialize CustomFilterFieldContentWrapper control and register observer.
185
+ */
186
+ ;
187
+
188
+ _proto.init = function init() {
189
+ _Control.prototype.init.call(this);
190
+
191
+ this._conditionsObserver = new ManagedObjectObserver(this._observeChanges.bind(this));
192
+
193
+ this._conditionsObserver.observe(this, {
194
+ properties: ["conditions"]
195
+ });
196
+
197
+ this._filterModel = new JSONModel();
198
+
199
+ this._filterModel.attachPropertyChange(this._handleFilterModelChange, this);
200
+
201
+ this.setModel(this._filterModel, CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS);
202
+ }
203
+ /**
204
+ * Overrides {@link sap.ui.core.Control#clone Control.clone} to clone additional
205
+ * internal states.
206
+ *
207
+ * @param {string} [sIdSuffix] A suffix to be appended to the cloned control id
208
+ * @param {string[]} [aLocalIds] An array of local IDs within the cloned hierarchy (internally used)
209
+ * @returns {CustomFilterFieldContentWrapper} Reference to the newly created clone
210
+ * @protected
211
+ */
212
+ ;
213
+
214
+ _proto.clone = function clone(sIdSuffix, aLocalIds) {
215
+ var clone = _Control.prototype.clone.call(this, sIdSuffix, aLocalIds); // During cloning, the old model will be copied and overwrites any new model (same alias) that
216
+ // you introduce during init(); hence you need to overwrite it again by the new one that you've
217
+ // created during init() (i.e. clone._filterModel); that standard behaviour of super.clone()
218
+ // can't even be suppressed in an own constructor; for a detailed investigation of the cloning,
219
+ // please overwrite the setModel() method and check the list of callers and steps induced by them.
220
+
221
+
222
+ clone.setModel(clone._filterModel, CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS);
223
+ return clone;
224
+ }
225
+ /**
226
+ * Listens to property changes.
227
+ *
228
+ * @param {any} changes Property changes
229
+ * @private
230
+ */
231
+ ;
232
+
233
+ _proto._observeChanges = function _observeChanges(changes) {
234
+ if (changes.name === "conditions") {
235
+ this._handleConditionsChange(changes.current);
236
+ }
237
+ }
238
+ /**
239
+ * Gets the content of this wrapper control.
240
+ *
241
+ * @returns {sap.ui.core.Control} The wrapper content
242
+ * @private
243
+ */
244
+ ;
245
+
246
+ _proto.getContent = function getContent() {
247
+ return this.getAggregation("content");
248
+ }
249
+ /**
250
+ * Gets the value for control property 'conditions'.
251
+ *
252
+ * @returns {object[]} Array of filter conditions
253
+ * @private
254
+ */
255
+ ;
256
+
257
+ _proto.getConditions = function getConditions() {
258
+ return this.getProperty("conditions");
259
+ }
260
+ /**
261
+ * Sets the value for control property 'conditions'.
262
+ *
263
+ * @param {object[]} [conditions] Array of filter conditions
264
+ * @returns {CustomFilterFieldContentWrapper} Reference to this wrapper
265
+ * @private
266
+ */
267
+ ;
268
+
269
+ _proto.setConditions = function setConditions(conditions) {
270
+ this.setProperty("conditions", conditions || []);
271
+ return this;
272
+ }
273
+ /**
274
+ * Gets the filter model alias 'filterValues'.
275
+ *
276
+ * @returns {string} The filter model
277
+ * @private
278
+ */
279
+ ;
280
+
281
+ _proto.getFilterModelAlias = function getFilterModelAlias() {
282
+ return CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS;
283
+ }
284
+ /**
285
+ * Updates the property "conditions" with filter values
286
+ * sent by ExtensionAPI#setFilterValues().
287
+ *
288
+ * @param {any} values The filter values
289
+ * @param {string} [operator] The operator name
290
+ * @private
291
+ */
292
+ ;
293
+
294
+ _proto.updateConditionsByFilterValues = function updateConditionsByFilterValues(values, operator) {
295
+ var conditions = CustomFilterFieldContentWrapper._filterValuesToConditions(values, operator);
296
+
297
+ this.setConditions(conditions);
298
+ }
299
+ /**
300
+ * Updates filter model with conditions
301
+ * sent by the {@link sap.ui.mdc.FilterField FilterField}.
302
+ *
303
+ * @param {Array} conditions Array of filter conditions
304
+ * @private
305
+ */
306
+ ;
307
+
308
+ _proto.updateFilterModelByConditions = function updateFilterModelByConditions(conditions) {
309
+ var _conditions$;
310
+
311
+ var operator = ((_conditions$ = conditions[0]) === null || _conditions$ === void 0 ? void 0 : _conditions$.operator) || "";
312
+ var formatOptions = operator !== "" ? {
313
+ operators: [operator]
314
+ } : {
315
+ operators: []
316
+ };
317
+
318
+ if (this.getBindingContext(CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS)) {
319
+ var _this$getBindingConte;
320
+
321
+ var stringValue = CustomFilterFieldContentWrapper._conditionsToFilterModelString(conditions, formatOptions);
322
+
323
+ this._filterModel.setProperty((_this$getBindingConte = this.getBindingContext(CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS)) === null || _this$getBindingConte === void 0 ? void 0 : _this$getBindingConte.getPath(), stringValue);
324
+ }
325
+ };
326
+
327
+ _proto.getAccessibilityInfo = function getAccessibilityInfo() {
328
+ var _content$getAccessibi;
329
+
330
+ var content = this.getContent();
331
+ return (content === null || content === void 0 ? void 0 : (_content$getAccessibi = content.getAccessibilityInfo) === null || _content$getAccessibi === void 0 ? void 0 : _content$getAccessibi.call(content)) || {};
332
+ };
333
+
334
+ return CustomFilterFieldContentWrapper;
335
+ }(Control), _class3.FILTER_MODEL_ALIAS = "filterValues", _temp), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IFormContent", [_dec2], {
336
+ configurable: true,
337
+ enumerable: true,
338
+ writable: true,
339
+ initializer: function () {
340
+ return true;
341
+ }
342
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "width", [_dec3], {
343
+ configurable: true,
344
+ enumerable: true,
345
+ writable: true,
346
+ initializer: null
347
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "formDoNotAdjustWidth", [_dec4], {
348
+ configurable: true,
349
+ enumerable: true,
350
+ writable: true,
351
+ initializer: null
352
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "conditions", [_dec5], {
353
+ configurable: true,
354
+ enumerable: true,
355
+ writable: true,
356
+ initializer: null
357
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec6], {
358
+ configurable: true,
359
+ enumerable: true,
360
+ writable: true,
361
+ initializer: null
362
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "conditionsChange", [_dec7], {
363
+ configurable: true,
364
+ enumerable: true,
365
+ writable: true,
366
+ initializer: null
367
+ })), _class2)) || _class);
368
+ _exports = CustomFilterFieldContentWrapper;
369
+ return _exports;
370
+ }, false);
371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkN1c3RvbUZpbHRlckZpZWxkQ29udGVudFdyYXBwZXIudHMiXSwibmFtZXMiOlsiQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlciIsImRlZmluZVVJNUNsYXNzIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImV2ZW50IiwicmVuZGVyIiwicmVuZGVyTWFuYWdlciIsImNvbnRyb2wiLCJvcGVuU3RhcnQiLCJzdHlsZSIsIndpZHRoIiwib3BlbkVuZCIsInJlbmRlckNvbnRyb2wiLCJnZXRDb250ZW50IiwiY2xvc2UiLCJfZmlsdGVyVmFsdWVzVG9Db25kaXRpb25zIiwiZmlsdGVyVmFsdWVzIiwib3BlcmF0b3IiLCJmb3JtYXRPcHRpb25zIiwib3BlcmF0b3JzIiwiY29uZGl0aW9ucyIsImhhc093blByb3BlcnR5IiwidmFsdWVzIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJjb25kaXRpb25zVHlwZSIsIkNvbmRpdGlvbnNUeXBlIiwiY29uZGl0aW9uVmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImluY2x1ZGVzIiwiQ29uZGl0aW9uIiwiY3JlYXRlQ29uZGl0aW9uIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiTm90VmFsaWRhdGVkIiwibWFwIiwiY29uZGl0aW9uVmFsdWUiLCJzdHJpbmdWYWx1ZSIsInRvU3RyaW5nIiwicGFyc2VkQ29uZGl0aW9ucyIsInBhcnNlVmFsdWUiLCJmaWx0ZXIiLCJfY29uZGl0aW9uc1RvRmlsdGVyTW9kZWxTdHJpbmciLCJjb25kaXRpb24iLCJmb3JtYXRWYWx1ZSIsImpvaW4iLCJfaGFuZGxlRmlsdGVyTW9kZWxDaGFuZ2UiLCJjaGFuZ2VFdmVudCIsInByb3BlcnR5UGF0aCIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXRoIiwiZ2V0U291cmNlIiwiZ2V0UHJvcGVydHkiLCJ1cGRhdGVDb25kaXRpb25zQnlGaWx0ZXJWYWx1ZXMiLCJfaGFuZGxlQ29uZGl0aW9uc0NoYW5nZSIsInVwZGF0ZUZpbHRlck1vZGVsQnlDb25kaXRpb25zIiwiaW5pdCIsIl9jb25kaXRpb25zT2JzZXJ2ZXIiLCJNYW5hZ2VkT2JqZWN0T2JzZXJ2ZXIiLCJfb2JzZXJ2ZUNoYW5nZXMiLCJiaW5kIiwib2JzZXJ2ZSIsInByb3BlcnRpZXMiLCJfZmlsdGVyTW9kZWwiLCJKU09OTW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsInNldE1vZGVsIiwiRklMVEVSX01PREVMX0FMSUFTIiwiY2xvbmUiLCJzSWRTdWZmaXgiLCJhTG9jYWxJZHMiLCJjaGFuZ2VzIiwibmFtZSIsImN1cnJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImdldENvbmRpdGlvbnMiLCJzZXRDb25kaXRpb25zIiwic2V0UHJvcGVydHkiLCJnZXRGaWx0ZXJNb2RlbEFsaWFzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRBY2Nlc3NpYmlsaXR5SW5mbyIsImNvbnRlbnQiLCJDb250cm9sIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BOEJxQkEsK0I7QUFUckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtTQUNDQyxjQUFjLENBQUMsc0RBQUQsQyxVQUViQyxrQkFBa0IsQ0FBQywwQkFBRCxDLFVBSWxCQyxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFLHFCQUFSO0FBQStCQyxJQUFBQSxZQUFZLEVBQUU7QUFBN0MsR0FBRCxDLFVBR1JGLFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUUsU0FBUjtBQUFtQkMsSUFBQUEsWUFBWSxFQUFFO0FBQWpDLEdBQUQsQyxVQUdSRixRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFLFVBQVI7QUFBb0JDLElBQUFBLFlB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QVEsS0FBSyxFQUFiLEdBQWtCO0FBQUVFLFFBQUFBLFNBQVMsRUFBRSxDQUFDRixRQUFEO0FBQWIsT0FBbEIsR0FBOEM7QUFBRUUsUUFBQUEsU0FBUyxFQUFFO0FBQWIsT0FBdkY7O0FBQ0EsVUFBSSxLQUFLK0QsaUJBQUwsQ0FBdUJ2RiwrQkFBK0IsQ0FBQzJFLGtCQUF2RCxDQUFKLEVBQWdGO0FBQUE7O0FBQy9FLFlBQU05QixXQUFXLEdBQUc3QywrQkFBK0IsQ0FBQ2tELDhCQUFoQyxDQUErRHpCLFVBQS9ELEVBQTJFRixhQUEzRSxDQUFwQjs7QUFDQSxhQUFLZ0QsWUFBTCxDQUFrQmMsV0FBbEIsMEJBQ0MsS0FBS0UsaUJBQUwsQ0FBdUJ2RiwrQkFBK0IsQ0FBQzJFLGtCQUF2RCxDQURELDBEQUNDLHNCQUE0RWpCLE9BQTVFLEVBREQsRUFFQ2IsV0FGRDtBQUlBO0FBQ0QsSzs7V0FFRDJDLG9CLEdBQUEsZ0NBQTRCO0FBQUE7O0FBQzNCLFVBQU1DLE9BQU8sR0FBRyxLQUFLdkUsVUFBTCxFQUFoQjtBQUNBLGFBQU8sQ0FBQXVFLE9BQU8sU0FBUCxJQUFBQSxPQUFPLFdBQVAscUNBQUFBLE9BQU8sQ0FBRUQsb0JBQVQscUZBQUFDLE9BQU8sTUFBOEIsRUFBNUM7QUFDQSxLOzs7SUF4UDJEQyxPLFdBeUJwQ2Ysa0IsR0FBcUIsYzs7Ozs7YUF0QkosSSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiAke2NvcHlyaWdodH1cbiAqL1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0T2JzZXJ2ZXIgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RPYnNlcnZlclwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjsgLy9pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VcIjtcbmltcG9ydCB7IElGb3JtQ29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IENvbmRpdGlvbiwgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgQ29uZGl0aW9uVmFsaWRhdGVkIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vQ29uZGl0aW9uVmFsaWRhdGVkXCI7XG5pbXBvcnQgQ29uZGl0aW9uc1R5cGUgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvQ29uZGl0aW9uc1R5cGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG4vKipcbiAqIFR5cGUgdXNlZCBmb3IgZm9ybWF0IG9wdGlvbnNcbiAqXG4gKiBAdHlwZWRlZiBGb3JtYXRPcHRpb25zVHlwZVxuICovXG50eXBlIEZvcm1hdE9wdGlvbnNUeXBlID0ge1xuXHRvcGVyYXRvcnM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIENyZWF0ZXMgYW4gPGNvZGU+c2FwLmZlLmNvcmUuY29udHJvbHMuQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlcjwvY29kZT4gb2JqZWN0LlxuICogVGhpcyBpcyB1c2VkIGluIHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gYXMgYSBmaWx0ZXIgY29udGVudC5cbiAqIEBleHRlbmRzIHNhcC51aS5jb3JlLkNvbnRyb2xcbiAqIEBwcml2YXRlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbHMuQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlclxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5DdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyIGV4dGVuZHMgQ29udHJvbCBpbXBsZW1lbnRzIElGb3JtQ29udGVudCB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lGb3JtQ29udGVudCA9IHRydWU7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkuY29yZS5DU1NTaXplXCIsIGRlZmF1bHRWYWx1ZTogbnVsbCB9KVxuXHR3aWR0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRmb3JtRG9Ob3RBZGp1c3RXaWR0aCE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RbXVwiLCBkZWZhdWx0VmFsdWU6IFtdIH0pXG5cdGNvbmRpdGlvbnMhOiBDb25kaXRpb25PYmplY3RbXTtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0Y29uZGl0aW9uc0NoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdC8vIE5vdGU6IEZpZWxkQmFzZSBtaWdodCBiZSB1c2VkIGFzIGJhc2UgY29udHJvbCAoaW5zdGVhZCBvZiBDb250cm9sKSBpbiBhIGxhdGVyIHZlcnNpb247XG5cdC8vIGluIHRoYXQgY2FzZSwgeW91IHNob3VsZCBhZGQgYSAnY2hhbmdlJyBldmVudCBhbmQgYnViYmxlIGl0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXJzXG5cblx0cHJpdmF0ZSBfZmlsdGVyTW9kZWw6IGFueTtcblx0cHJpdmF0ZSBfY29uZGl0aW9uc09ic2VydmVyOiBhbnk7XG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJTFRFUl9NT0RFTF9BTElBUyA9IFwiZmlsdGVyVmFsdWVzXCI7XG5cblx0c3RhdGljIHJlbmRlcihyZW5kZXJNYW5hZ2VyOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBDdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyKTogdm9pZCB7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuU3RhcnQoXCJkaXZcIiwgY29udHJvbCk7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcIm1pbi1oZWlnaHRcIiwgXCIxcmVtXCIpO1xuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJ3aWR0aFwiLCBjb250cm9sLndpZHRoKTtcblx0XHRyZW5kZXJNYW5hZ2VyLm9wZW5FbmQoKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woY29udHJvbC5nZXRDb250ZW50KCkpOyAvLyByZW5kZXIgdGhlIGNoaWxkIENvbnRyb2xcblx0XHRyZW5kZXJNYW5hZ2VyLmNsb3NlKFwiZGl2XCIpOyAvLyBlbmQgb2YgdGhlIGNvbXBsZXRlIENvbnRyb2xcblx0fVxuXG5cdC8qKlxuXHQgKiBNYXBzIGFuIGFycmF5IG9mIGZpbHRlciB2YWx1ZXMgdG8gYW4gYXJyYXkgb2YgY29uZGl0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheSB8IHN0cmluZ30gZmlsdGVyVmFsdWVzIEFycmF5IG9mIGZpbHRlciB2YWx1ZSBiaW5kaW5ncyBvciBhIGZpbHRlciB2YWx1ZSBzdHJpbmdcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwcml2YXRlXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2YgZmlsdGVyIGNvbmRpdGlvbnNcblx0ICovXG5cdHN0YXRpYyBfZmlsdGVyVmFsdWVzVG9Db25kaXRpb25zKGZpbHRlclZhbHVlczogYW55IHwgYW55W10sIG9wZXJhdG9yPzogc3RyaW5nKTogQ29uZGl0aW9uT2JqZWN0W10ge1xuXHRcdGxldCBmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zVHlwZSA9IHsgb3BlcmF0b3JzOiBbXSB9LFxuXHRcdFx0Y29uZGl0aW9ucyA9IFtdO1xuXG5cdFx0aWYgKG9wZXJhdG9yKSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zID0geyBvcGVyYXRvcnM6IFtvcGVyYXRvcl0gfTtcblx0XHR9XG5cdFx0aWYgKGZpbHRlclZhbHVlcyA9PT0gXCJcIikge1xuXHRcdFx0ZmlsdGVyVmFsdWVzID0gW107XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyVmFsdWVzID09PSBcIm9iamVjdFwiICYmIGZpbHRlclZhbHVlcy5oYXNPd25Qcm9wZXJ0eShcIm9wZXJhdG9yXCIpICYmIGZpbHRlclZhbHVlcy5oYXNPd25Qcm9wZXJ0eShcInZhbHVlc1wiKSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9IHsgb3BlcmF0b3JzOiBbZmlsdGVyVmFsdWVzLm9wZXJhdG9yXSB9O1xuXHRcdFx0ZmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWVzLnZhbHVlcztcblx0XHR9IGVsc2UgaWYgKGZpbHRlclZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBmaWx0ZXJWYWx1ZXMgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGZpbHRlclZhbHVlcyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRmlsdGVyVXRpbHMuanMjX2ZpbHRlclZhbHVlc1RvQ29uZGl0aW9uczogVW5leHBlY3RlZCB0eXBlIG9mIGlucHV0IHBhcmFtZXRlciB2VmFsdWVzOiBcIiArIHR5cGVvZiBmaWx0ZXJWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmRpdGlvbnNUeXBlOiBhbnkgPSBuZXcgQ29uZGl0aW9uc1R5cGUoZm9ybWF0T3B0aW9ucyk7XG5cdFx0Y29uc3QgY29uZGl0aW9uVmFsdWVzID0gQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZXMpID8gZmlsdGVyVmFsdWVzIDogW2ZpbHRlclZhbHVlc107XG5cblx0XHQvLyBTaG9ydGN1dCBmb3Igb3BlcmF0b3Igd2l0aG91dCB2YWx1ZXMgYW5kIHNlbWFudGljIGRhdGUgb3BlcmF0aW9uc1xuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBvcGVyYXRvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0KGNvbmRpdGlvblZhbHVlcy5sZW5ndGggPT09IDAgfHwgU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKS5pbmNsdWRlcyhvcGVyYXRvcikpXG5cdFx0KSB7XG5cdFx0XHRjb25kaXRpb25zID0gW0NvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24ob3BlcmF0b3IsIGNvbmRpdGlvblZhbHVlcywgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25kaXRpb25zID0gY29uZGl0aW9uVmFsdWVzXG5cdFx0XHRcdC5tYXAoKGNvbmRpdGlvblZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RyaW5nVmFsdWUgPSBjb25kaXRpb25WYWx1ZT8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdHBhcnNlZENvbmRpdGlvbnMgPSBjb25kaXRpb25zVHlwZS5wYXJzZVZhbHVlKHN0cmluZ1ZhbHVlLCBcImFueVwiKTtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VkQ29uZGl0aW9ucz8uWzBdO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmlsdGVyKChjb25kaXRpb25WYWx1ZSkgPT4gY29uZGl0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbmRpdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogTWFwcyBhbiBhcnJheSBvZiBjb25kaXRpb25zIHRvIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZmlsdGVyIHZhbHVlcy5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3RbXX0gY29uZGl0aW9ucyBBcnJheSBvZiBmaWx0ZXIgY29uZGl0aW9uc1xuXHQgKiBAcGFyYW0ge29iamVjdH0gZm9ybWF0T3B0aW9ucyBGb3JtYXQgb3B0aW9ucyB0aGF0IHNwZWNpZmllcyBhIGNvbmRpdGlvbiB0eXBlXG5cdCAqIEBwcml2YXRlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBzdHJpbmcgb2YgZmlsdGVyIHZhbHVlc1xuXHQgKi9cblx0c3RhdGljIF9jb25kaXRpb25zVG9GaWx0ZXJNb2RlbFN0cmluZyhjb25kaXRpb25zOiBvYmplY3RbXSwgZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbmRpdGlvbnNUeXBlID0gbmV3IENvbmRpdGlvbnNUeXBlKGZvcm1hdE9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIGNvbmRpdGlvbnNcblx0XHRcdC5tYXAoKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29uZGl0aW9uc1R5cGUuZm9ybWF0VmFsdWUoW2NvbmRpdGlvbl0sIFwiYW55XCIpIHx8IFwiXCI7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoc3RyaW5nVmFsdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZ1ZhbHVlICE9PSBcIlwiO1xuXHRcdFx0fSlcblx0XHRcdC5qb2luKFwiLFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMaXN0ZW5zIHRvIGZpbHRlciBtb2RlbCBjaGFuZ2VzIGFuZCB1cGRhdGVzIHdyYXBwZXIgcHJvcGVydHkgXCJjb25kaXRpb25zXCIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VFdmVudCBFdmVudCB0cmlnZ2VyZWQgYnkgYSBmaWx0ZXIgbW9kZWwgY2hhbmdlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlRmlsdGVyTW9kZWxDaGFuZ2UoY2hhbmdlRXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHRoaXMuZ2V0T2JqZWN0QmluZGluZyhcImZpbHRlclZhbHVlc1wiKS5nZXRQYXRoKCksXG5cdFx0XHR2YWx1ZXMgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKS5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpO1xuXHRcdHRoaXMudXBkYXRlQ29uZGl0aW9uc0J5RmlsdGVyVmFsdWVzKHZhbHVlcywgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogTGlzdGVucyB0byBcImNvbmRpdGlvbnNcIiBjaGFuZ2VzIGFuZCB1cGRhdGVzIHRoZSBmaWx0ZXIgbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zIEV2ZW50IHRyaWdnZXJlZCBieSBhIFwiY29uZGl0aW9uc1wiIGNoYW5nZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZUNvbmRpdGlvbnNDaGFuZ2UoY29uZGl0aW9uczogYW55KTogdm9pZCB7XG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJNb2RlbEJ5Q29uZGl0aW9ucyhjb25kaXRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIEN1c3RvbUZpbHRlckZpZWxkQ29udGVudFdyYXBwZXIgY29udHJvbCBhbmQgcmVnaXN0ZXIgb2JzZXJ2ZXIuXG5cdCAqL1xuXHRpbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLmluaXQoKTtcblx0XHR0aGlzLl9jb25kaXRpb25zT2JzZXJ2ZXIgPSBuZXcgTWFuYWdlZE9iamVjdE9ic2VydmVyKHRoaXMuX29ic2VydmVDaGFuZ2VzLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuX2NvbmRpdGlvbnNPYnNlcnZlci5vYnNlcnZlKHRoaXMsIHtcblx0XHRcdHByb3BlcnRpZXM6IFtcImNvbmRpdGlvbnNcIl1cblx0XHR9KTtcblx0XHR0aGlzLl9maWx0ZXJNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHR0aGlzLl9maWx0ZXJNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSh0aGlzLl9oYW5kbGVGaWx0ZXJNb2RlbENoYW5nZSwgdGhpcyk7XG5cdFx0dGhpcy5zZXRNb2RlbCh0aGlzLl9maWx0ZXJNb2RlbCwgQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlci5GSUxURVJfTU9ERUxfQUxJQVMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlcyB7QGxpbmsgc2FwLnVpLmNvcmUuQ29udHJvbCNjbG9uZSBDb250cm9sLmNsb25lfSB0byBjbG9uZSBhZGRpdGlvbmFsXG5cdCAqIGludGVybmFsIHN0YXRlcy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzSWRTdWZmaXhdIEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBjbG9uZWQgY29udHJvbCBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYUxvY2FsSWRzXSBBbiBhcnJheSBvZiBsb2NhbCBJRHMgd2l0aGluIHRoZSBjbG9uZWQgaGllcmFyY2h5IChpbnRlcm5hbGx5IHVzZWQpXG5cdCAqIEByZXR1cm5zIHtDdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyfSBSZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgY2xvbmVcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0Y2xvbmUoc0lkU3VmZml4OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFMb2NhbElkczogc3RyaW5nW10gfCB1bmRlZmluZWQpOiB0aGlzIHtcblx0XHRjb25zdCBjbG9uZSA9IHN1cGVyLmNsb25lKHNJZFN1ZmZpeCwgYUxvY2FsSWRzKTtcblx0XHQvLyBEdXJpbmcgY2xvbmluZywgdGhlIG9sZCBtb2RlbCB3aWxsIGJlIGNvcGllZCBhbmQgb3ZlcndyaXRlcyBhbnkgbmV3IG1vZGVsIChzYW1lIGFsaWFzKSB0aGF0XG5cdFx0Ly8geW91IGludHJvZHVjZSBkdXJpbmcgaW5pdCgpOyBoZW5jZSB5b3UgbmVlZCB0byBvdmVyd3JpdGUgaXQgYWdhaW4gYnkgdGhlIG5ldyBvbmUgdGhhdCB5b3UndmVcblx0XHQvLyBjcmVhdGVkIGR1cmluZyBpbml0KCkgKGkuZS4gY2xvbmUuX2ZpbHRlck1vZGVsKTsgdGhhdCBzdGFuZGFyZCBiZWhhdmlvdXIgb2Ygc3VwZXIuY2xvbmUoKVxuXHRcdC8vIGNhbid0IGV2ZW4gYmUgc3VwcHJlc3NlZCBpbiBhbiBvd24gY29uc3RydWN0b3I7IGZvciBhIGRldGFpbGVkIGludmVzdGlnYXRpb24gb2YgdGhlIGNsb25pbmcsXG5cdFx0Ly8gcGxlYXNlIG92ZXJ3cml0ZSB0aGUgc2V0TW9kZWwoKSBtZXRob2QgYW5kIGNoZWNrIHRoZSBsaXN0IG9mIGNhbGxlcnMgYW5kIHN0ZXBzIGluZHVjZWQgYnkgdGhlbS5cblx0XHRjbG9uZS5zZXRNb2RlbChjbG9uZS5fZmlsdGVyTW9kZWwsIEN1c3RvbUZpbHRlckZpZWxkQ29udGVudFdyYXBwZXIuRklMVEVSX01PREVMX0FMSUFTKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH1cblxuXHQvKipcblx0ICogTGlzdGVucyB0byBwcm9wZXJ0eSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FueX0gY2hhbmdlcyBQcm9wZXJ0eSBjaGFuZ2VzXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfb2JzZXJ2ZUNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZXMubmFtZSA9PT0gXCJjb25kaXRpb25zXCIpIHtcblx0XHRcdHRoaXMuX2hhbmRsZUNvbmRpdGlvbnNDaGFuZ2UoY2hhbmdlcy5jdXJyZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGVudCBvZiB0aGlzIHdyYXBwZXIgY29udHJvbC5cblx0ICpcblx0ICogQHJldHVybnMge3NhcC51aS5jb3JlLkNvbnRyb2x9IFRoZSB3cmFwcGVyIGNvbnRlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldENvbnRlbnQoKTogQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIENvbnRyb2w7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmFsdWUgZm9yIGNvbnRyb2wgcHJvcGVydHkgJ2NvbmRpdGlvbnMnLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0W119IEFycmF5IG9mIGZpbHRlciBjb25kaXRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRDb25kaXRpb25zKCk6IG9iamVjdFtdIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShcImNvbmRpdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFsdWUgZm9yIGNvbnRyb2wgcHJvcGVydHkgJ2NvbmRpdGlvbnMnLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdFtdfSBbY29uZGl0aW9uc10gQXJyYXkgb2YgZmlsdGVyIGNvbmRpdGlvbnNcblx0ICogQHJldHVybnMge0N1c3RvbUZpbHRlckZpZWxkQ29udGVudFdyYXBwZXJ9IFJlZmVyZW5jZSB0byB0aGlzIHdyYXBwZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldENvbmRpdGlvbnMoY29uZGl0aW9uczogb2JqZWN0W10pOiB0aGlzIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiY29uZGl0aW9uc1wiLCBjb25kaXRpb25zIHx8IFtdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmaWx0ZXIgbW9kZWwgYWxpYXMgJ2ZpbHRlclZhbHVlcycuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmaWx0ZXIgbW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEZpbHRlck1vZGVsQWxpYXMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlci5GSUxURVJfTU9ERUxfQUxJQVM7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgcHJvcGVydHkgXCJjb25kaXRpb25zXCIgd2l0aCBmaWx0ZXIgdmFsdWVzXG5cdCAqIHNlbnQgYnkgRXh0ZW5zaW9uQVBJI3NldEZpbHRlclZhbHVlcygpLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FueX0gdmFsdWVzIFRoZSBmaWx0ZXIgdmFsdWVzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3BlcmF0b3JdIFRoZSBvcGVyYXRvciBuYW1lXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHR1cGRhdGVDb25kaXRpb25zQnlGaWx0ZXJWYWx1ZXModmFsdWVzOiBhbnksIG9wZXJhdG9yPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IEN1c3RvbUZpbHRlckZpZWxkQ29udGVudFdyYXBwZXIuX2ZpbHRlclZhbHVlc1RvQ29uZGl0aW9ucyh2YWx1ZXMsIG9wZXJhdG9yKTtcblx0XHR0aGlzLnNldENvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBmaWx0ZXIgbW9kZWwgd2l0aCBjb25kaXRpb25zXG5cdCAqIHNlbnQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gY29uZGl0aW9ucyBBcnJheSBvZiBmaWx0ZXIgY29uZGl0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0dXBkYXRlRmlsdGVyTW9kZWxCeUNvbmRpdGlvbnMoY29uZGl0aW9uczogYW55W10pOiB2b2lkIHtcblx0XHRjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbnNbMF0/Lm9wZXJhdG9yIHx8IFwiXCI7XG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgPSBvcGVyYXRvciAhPT0gXCJcIiA/IHsgb3BlcmF0b3JzOiBbb3BlcmF0b3JdIH0gOiB7IG9wZXJhdG9yczogW10gfTtcblx0XHRpZiAodGhpcy5nZXRCaW5kaW5nQ29udGV4dChDdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyLkZJTFRFUl9NT0RFTF9BTElBUykpIHtcblx0XHRcdGNvbnN0IHN0cmluZ1ZhbHVlID0gQ3VzdG9tRmlsdGVyRmllbGRDb250ZW50V3JhcHBlci5fY29uZGl0aW9uc1RvRmlsdGVyTW9kZWxTdHJpbmcoY29uZGl0aW9ucywgZm9ybWF0T3B0aW9ucyk7XG5cdFx0XHR0aGlzLl9maWx0ZXJNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0dGhpcy5nZXRCaW5kaW5nQ29udGV4dChDdXN0b21GaWx0ZXJGaWVsZENvbnRlbnRXcmFwcGVyLkZJTFRFUl9NT0RFTF9BTElBUyk/LmdldFBhdGgoKSxcblx0XHRcdFx0c3RyaW5nVmFsdWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0QWNjZXNzaWJpbGl0eUluZm8oKTogYW55IHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIGNvbnRlbnQ/LmdldEFjY2Vzc2liaWxpdHlJbmZvPy4oKSB8fCB7fTtcblx0fVxufVxuIl19