@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
@@ -65,7 +65,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
65
65
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
66
66
  // @ts-ignore
67
67
  delete this._oAppComponent;
68
- this._oContainer && this._oContainer.removeEventDelegate(this._fnContainerDelegate);
68
+
69
+ if (this._oContainer) {
70
+ this._oContainer.removeEventDelegate(this._fnContainerDelegate);
71
+ }
69
72
  };
70
73
 
71
74
  _proto.waitFor = function waitFor(oPromise) {
@@ -93,7 +96,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
93
96
  if (!this._bAfterBindingAlreadyApplied) {
94
97
  this._bAfterBindingAlreadyApplied = true;
95
98
  var aBoundElements = [];
96
- var aNotBoundMDCTables = [];
99
+ var aMDCTables = [];
100
+ var aNotBoundMDCCharts = [];
97
101
  var iRequested = 0;
98
102
  var iReceived = 0;
99
103
 
@@ -130,40 +134,73 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
130
134
  }
131
135
  };
132
136
 
137
+ var fnAttachDataEvents = function (event, oData) {
138
+ var binding = oData.binding ? oData.binding : oData.table.getRowBinding();
139
+
140
+ if (binding) {
141
+ binding.attachDataRequested(fnRequested);
142
+ binding.attachDataReceived(function (dataReceivedEvent) {
143
+ fnReceived(dataReceivedEvent);
144
+ _this3._bSeachTriggered = oData.isSeachTriggered ? !oData.isSeachTriggered : _this3._bSeachTriggered;
145
+ });
146
+ aBoundElements.push(binding);
147
+ }
148
+ };
149
+
133
150
  var fnSearch = function (oEvent) {
134
- var aMDCTables = aNotBoundMDCTables.filter(function (oElem) {
151
+ var aMDCTableLinkedToFilterBar = aMDCTables.filter(function (oElem) {
135
152
  if (oEvent.getSource().sId === oElem.getFilter() && oElem.getVisible()) {
136
153
  return true;
137
154
  }
138
155
 
139
156
  return false;
140
157
  });
158
+ var aMDCCharts = aNotBoundMDCCharts.filter(function (oElem) {
159
+ if (oEvent.getSource().sId === oElem.getFilter() && oElem.getVisible()) {
160
+ return true;
161
+ }
141
162
 
142
- if (aMDCTables.length > 0) {
163
+ return false;
164
+ });
165
+
166
+ if (aMDCTableLinkedToFilterBar.length > 0 || aMDCCharts.length > 0) {
143
167
  _this3._bSeachTriggered = true;
144
168
  }
145
169
 
146
- aMDCTables.forEach(function (oMDCTable) {
170
+ aMDCTableLinkedToFilterBar.forEach(function (oMDCTable) {
147
171
  var oRowBinding = oMDCTable.getRowBinding();
148
172
 
149
- var fnAttachDataEvents = function () {
150
- oRowBinding.attachDataRequested(fnRequested);
151
- oRowBinding.attachDataReceived(function (oEvent) {
152
- fnReceived(oEvent);
153
- _this3._bSeachTriggered = false;
154
- });
155
- aBoundElements.push(oRowBinding);
156
- };
157
-
158
173
  if (oRowBinding) {
159
- fnAttachDataEvents();
174
+ fnAttachDataEvents(null, {
175
+ table: oMDCTable,
176
+ isSeachTriggered: true
177
+ });
160
178
  } else {
161
- oMDCTable.attachEventOnce("bindingUpdated", null, function () {
162
- oRowBinding = oMDCTable.getRowBinding();
163
- fnAttachDataEvents();
164
- }, null);
179
+ oMDCTable.attachEventOnce("bindingUpdated", {
180
+ table: oMDCTable,
181
+ isSeachTriggered: true
182
+ }, fnAttachDataEvents, null);
165
183
  }
166
184
  });
185
+ aMDCCharts.forEach(function (oMDCChart) {
186
+ oMDCChart.innerChartBoundPromise.then(function () {
187
+ var oBinding = oMDCChart.getControlDelegate().getInnerChart(oMDCChart).getBinding("data");
188
+
189
+ if (oBinding) {
190
+ fnAttachDataEvents(null, {
191
+ binding: oBinding,
192
+ isSeachTriggered: true
193
+ });
194
+ } else {
195
+ oMDCChart.attachEventOnce("bindingUpdated", {
196
+ binding: oBinding,
197
+ isSeachTriggered: true
198
+ }, fnAttachDataEvents, null);
199
+ }
200
+ }).catch(function (oError) {
201
+ Log.error("Cannot find a inner bound chart", oError);
202
+ });
203
+ });
167
204
  };
168
205
 
169
206
  if (this.isContextExpected() && oBindingContext === undefined) {
@@ -179,6 +216,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
179
216
  oElement.detachEvent("dataRequested", fnRequested);
180
217
  oElement.detachEvent("dataReceived", fnReceived);
181
218
  oElement.detachEvent("search", fnSearch);
219
+ oElement.detachEvent("bindingUpdated", fnAttachDataEvents);
182
220
  });
183
221
  _this3._bAfterBindingAlreadyApplied = false;
184
222
  aBoundElements = [];
@@ -192,6 +230,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
192
230
  }
193
231
 
194
232
  var aTableInitializedPromises = [];
233
+ var aChartInitializedPromises = [];
195
234
 
196
235
  this._oView.findAggregatedObjects(true, function (oElement) {
197
236
  var oObjectBinding = oElement.getObjectBinding();
@@ -222,18 +261,38 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
222
261
  _this3.bTablesLoaded = false; // access binding only after table is bound
223
262
 
224
263
  aTableInitializedPromises.push(oElement.initialized().then(function () {
264
+ aMDCTables.push(oElement);
225
265
  var oRowBinding = oElement.getRowBinding();
226
266
 
227
267
  if (oRowBinding) {
228
- oRowBinding.attachDataRequested(fnRequested);
229
- oRowBinding.attachDataReceived(fnReceived);
230
- aBoundElements.push(oRowBinding);
268
+ fnAttachDataEvents(null, {
269
+ table: oElement
270
+ });
231
271
  } else {
232
- aNotBoundMDCTables.push(oElement);
272
+ oElement.attachEventOnce("bindingUpdated", {
273
+ table: oElement
274
+ }, fnAttachDataEvents);
233
275
  }
234
276
  }).catch(function (oError) {
235
277
  Log.error("Cannot find a bound table", oError);
236
278
  }));
279
+ } else if (oElement.isA("sap.ui.mdc.Chart")) {
280
+ _this3.bChartsLoaded = false; // access binding only after table is bound
281
+
282
+ aChartInitializedPromises.push(oElement.initialized().then(function () {
283
+ var oInnerChart = oElement.getControlDelegate().getInnerChart(oElement);
284
+ var oBinding = oInnerChart && oInnerChart.getBinding("data");
285
+
286
+ if (oBinding) {
287
+ oBinding.attachDataRequested(fnRequested);
288
+ oBinding.attachDataReceived(fnReceived);
289
+ aBoundElements.push(oBinding);
290
+ } else {
291
+ aNotBoundMDCCharts.push(oElement);
292
+ }
293
+ }).catch(function (oError) {
294
+ Log.error("Cannot find a bound chart", oError);
295
+ }));
237
296
  } else if (oElement.isA("sap.fe.core.controls.FilterBar")) {
238
297
  oElement.attachEvent("search", fnSearch);
239
298
  aBoundElements.push(oElement);
@@ -252,6 +311,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
252
311
  _this3.checkPageReadyDebounced();
253
312
  });
254
313
  }
314
+
315
+ if (aChartInitializedPromises.length > 0) {
316
+ Promise.all(aChartInitializedPromises).then(function () {
317
+ _this3.bChartsLoaded = true;
318
+
319
+ _this3.checkPageReadyDebounced();
320
+ }).catch(function (oError) {
321
+ Log.info("There was an error with one or multiple charts", oError);
322
+ _this3.bChartsLoaded = true;
323
+
324
+ _this3.checkPageReadyDebounced();
325
+ });
326
+ }
255
327
  }
256
328
  };
257
329
 
@@ -355,7 +427,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
355
427
  }
356
428
  };
357
429
 
358
- if (this.bShown && this.bDataReceived !== false && this.bTablesLoaded !== false && (!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
430
+ if (this.bShown && this.bDataReceived !== false && this.bTablesLoaded !== false && this.bChartsLoaded !== false && (!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
359
431
  ) {
360
432
  if (this.bDataReceived === true && !bFromNav && !this._bWaitingForRefresh && Core.getUIDirty()) {
361
433
  // If we requested data we get notified as soon as the data arrived, so before the next rendering tick
@@ -381,4 +453,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
381
453
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitFor", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "waitFor"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatched", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatched"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatchedFinished", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatchedFinished"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isPageReady", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "isPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitPageReady", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "waitPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEventOnce", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEventOnce"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEvent", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "detachEvent", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "detachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isContextExpected", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "isContextExpected"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "checkPageReadyDebounced", [_dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "checkPageReadyDebounced"), _class2.prototype)), _class2)) || _class);
382
454
  return PageReadyControllerExtension;
383
455
  }, false);
384
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBhZ2VSZWFkeS50cyJdLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJvbkluaXQiLCJfbmJXYWl0cyIsIl9iU2VhY2hUcmlnZ2VyZWQiLCJfb0V2ZW50UHJvdmlkZXIiLCJFdmVudFByb3ZpZGVyIiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29QYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJvUm9vdENvbnRyb2xDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwib1BsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkIiwiYXR0YWNoRXZlbnQiLCJnZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMiLCJpUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAiLCJEYXRlIiwibm93IiwiaUhlcm9lc0JhdGNoUmVjZWl2ZWRFdmVudFRpbWVzdGFtcCIsIm9uRXhpdCIsIl9vQ29udGFpbmVyIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwid2FpdEZvciIsIm9Qcm9taXNlIiwiZmluYWxseSIsInNldFRpbWVvdXQiLCJjYXRjaCIsIm9uUm91dGVNYXRjaGVkIiwiX2JJc1BhZ2VSZWFkeSIsIm9uUm91dGVNYXRjaGVkRmluaXNoZWQiLCJjaGVja1BhZ2VSZWFkeURlYm91bmNlZCIsIm9uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCIsImFCb3VuZEVsZW1lbnRzIiwiYU5vdEJvdW5kTURDVGFibGVzIiwiaVJlcXVlc3RlZCIsImlSZWNlaXZlZCIsImZuUmVxdWVzdGVkIiwiZ2V0U291cmNlIiwiZGV0YWNoRGF0YVJlcXVlc3RlZCIsImJEYXRhUmVjZWl2ZWQiLCJmblJlY2VpdmVkIiwic0dyb3VwSWQiLCJmaXJlRXZlbnQiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJmblNlYXJjaCIsImFNRENUYWJsZXMiLCJmaWx0ZXIiLCJvRWxlbSIsInNJZCIsImdldEZpbHRlciIsImdldFZpc2libGUiLCJsZW5ndGgiLCJmb3JFYWNoIiwib01EQ1RhYmxlIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZm5BdHRhY2hEYXRhRXZlbnRzIiwiYXR0YWNoRGF0YVJlcXVlc3RlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInB1c2giLCJhdHRhY2hFdmVudE9uY2UiLCJpc0NvbnRleHRFeHBlY3RlZCIsInVuZGVmaW5lZCIsImJIYXNDb250ZXh0Iiwib0VsZW1lbnQiLCJkZXRhY2hFdmVudCIsIm1haW5PYmplY3RCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJvT2JqZWN0QmluZGluZyIsImdldE9iamVjdEJpbmRpbmciLCJhQmluZGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwibUJpbmRpbmdJbmZvcyIsInNQcm9wZXJ0eU5hbWUiLCJvTGlzdEJpbmRpbmciLCJiaW5kaW5nIiwiaXNBIiwiYlRhYmxlc0xvYWRlZCIsImluaXRpYWxpemVkIiwidGhlbiIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiUHJvbWlzZSIsImFsbCIsImluZm8iLCJpc1BhZ2VSZWFkeSIsIndhaXRQYWdlUmVhZHkiLCJyZXNvbHZlIiwic0V2ZW50SWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJvQ29udGFpbmVyIiwib25CZWZvcmVTaG93IiwiYlNob3duIiwib25CZWZvcmVIaWRlIiwib25BZnRlclNob3ciLCJfY2hlY2tQYWdlUmVhZHkiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5VGltZXIiLCJjbGVhclRpbWVvdXQiLCJiRnJvbU5hdiIsImZuVUlVcGRhdGVkIiwiQ29yZSIsImdldFVJRGlydHkiLCJfYldhaXRpbmdGb3JSZWZyZXNoIiwiY2hlY2tVSVVwZGF0ZWQiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWVNQSw0QixXQURMQyxjQUFjLENBQUMsNENBQUQsQyxVQW1CYkMsY0FBYyxFLFVBcUNkQSxjQUFjLEUsVUFRZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVdkRixjQUFjLENBQUMsVUFBRCxDLFVBSWRBLGNBQWMsQ0FBQyxVQUFELEMsVUFLZEEsY0FBYyxDQUFDLFVBQUQsQyxVQStKZEMsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQUtkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0JkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBS2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FLZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQXdCZEMsZ0JBQWdCLEUsV0FDaEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQW5CLEMsV0FLVkwsZUFBZSxFOzs7Ozs7Ozs7V0FwU1RNLE0sR0FEUCxrQkFDZ0I7QUFBQTs7QUFDZixXQUFLQyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsV0FBS0MsZ0JBQUwsR0FBd0IsS0FBeEI7QUFDQSxXQUFLQyxlQUFMLEdBQXVCLEtBQUtBLGVBQUwsR0FBdUIsS0FBS0EsZUFBNUIsR0FB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QXVYNUJ4SSw0QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlBhZ2VSZWFkeVwiKVxuY2xhc3MgUGFnZVJlYWR5Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9vRXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cdHByaXZhdGUgX29WaWV3OiBhbnk7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdHByaXZhdGUgX29QYWdlQ29tcG9uZW50ITogYW55O1xuXHRwcml2YXRlIF9vQ29udGFpbmVyITogYW55O1xuXHRwcml2YXRlIF9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQhOiBib29sZWFuO1xuXHRwcml2YXRlIF9mbkNvbnRhaW5lckRlbGVnYXRlOiBhbnk7XG5cdHByaXZhdGUgX25iV2FpdHMhOiBudW1iZXI7XG5cdHByaXZhdGUgX2JTZWFjaFRyaWdnZXJlZCE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2JJc1BhZ2VSZWFkeSE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2JXYWl0aW5nRm9yUmVmcmVzaCE6IGJvb2xlYW47XG5cdHByaXZhdGUgYlNob3duITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiSGFzQ29udGV4dCE6IGJvb2xlYW47XG5cdHByaXZhdGUgYkRhdGFSZWNlaXZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBiVGFibGVzTG9hZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHBhZ2VSZWFkeVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCkge1xuXHRcdHRoaXMuX25iV2FpdHMgPSAwO1xuXHRcdHRoaXMuX2JTZWFjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX29FdmVudFByb3ZpZGVyID0gdGhpcy5fb0V2ZW50UHJvdmlkZXIgPyB0aGlzLl9vRXZlbnRQcm92aWRlciA6IG5ldyBFdmVudFByb3ZpZGVyKCk7XG5cdFx0dGhpcy5fb1ZpZXcgPSAodGhpcyBhcyBhbnkpLmJhc2UuZ2V0VmlldygpO1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fb1ZpZXcpO1xuXHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX29WaWV3KTtcblxuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5hdHRhY2hDb250YWluZXJEZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5hdHRhY2hDb250YWluZXJEZWZpbmVkKChvRXZlbnQ6IEV2ZW50KSA9PiB0aGlzLnJlZ2lzdGVyQ29udGFpbmVyKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250YWluZXJcIikpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcih0aGlzLl9vVmlldyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Jvb3RDb250cm9sQ29udHJvbGxlciA9ICh0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkgYXMgVmlldykuZ2V0Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRjb25zdCBvUGxhY2Vob2xkZXIgPSBvUm9vdENvbnRyb2xDb250cm9sbGVyLmdldFBsYWNlaG9sZGVyICYmIG9Sb290Q29udHJvbENvbnRyb2xsZXIuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRpZiAob1BsYWNlaG9sZGVyPy5pc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRvUGxhY2Vob2xkZXIuZ2V0UGxhY2Vob2xkZXJEZWJ1Z1N0YXRzKCkuaVBhZ2VSZWFkeUV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0b1BsYWNlaG9sZGVyLmdldFBsYWNlaG9sZGVyRGVidWdTdGF0cygpLmlIZXJvZXNCYXRjaFJlY2VpdmVkRXZlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLl9vQ29udGFpbmVyICYmIHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgd2FpdEZvcihvUHJvbWlzZTogYW55KSB7XG5cdFx0dGhpcy5fbmJXYWl0cysrO1xuXHRcdG9Qcm9taXNlXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX25iV2FpdHMtLTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKG51bGwpO1xuXHR9XG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uUm91dGVNYXRjaGVkKCkge1xuXHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHR9XG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKSB7XG5cdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKFwiX3JvdXRpbmdcIilcblx0b25BZnRlckJpbmRpbmcob0JpbmRpbmdDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0aWYgKCF0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQpIHtcblx0XHRcdHRoaXMuX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCA9IHRydWU7XG5cdFx0XHRsZXQgYUJvdW5kRWxlbWVudHM6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBhTm90Qm91bmRNRENUYWJsZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgaVJlcXVlc3RlZCA9IDA7XG5cdFx0XHRsZXQgaVJlY2VpdmVkID0gMDtcblx0XHRcdGNvbnN0IGZuUmVxdWVzdGVkID0gKG9FdmVudDogRXZlbnQpID0+IHtcblx0XHRcdFx0KG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLmRldGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRpUmVxdWVzdGVkKys7XG5cdFx0XHRcdHRoaXMuYkRhdGFSZWNlaXZlZCA9IGZhbHNlO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuUmVjZWl2ZWQgPSAob0V2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zR3JvdXBJZCkge1xuXHRcdFx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdFx0XHR0aGlzLl9vRXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJ3b3JrZXJzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcImhlcm9lc0JhdGNoUmVjZWl2ZWRcIik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdGlSZWNlaXZlZCsrO1xuXHRcdFx0XHRpZiAoaVJlY2VpdmVkID49IGlSZXF1ZXN0ZWQgJiYgaVJlcXVlc3RlZCAhPT0gMCkge1xuXHRcdFx0XHRcdGlSZXF1ZXN0ZWQgPSAwO1xuXHRcdFx0XHRcdGlSZWNlaXZlZCA9IDA7XG5cdFx0XHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBmblNlYXJjaCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFNRENUYWJsZXMgPSBhTm90Qm91bmRNRENUYWJsZXMuZmlsdGVyKChvRWxlbSkgPT4ge1xuXHRcdFx0XHRcdGlmICgob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvRWxlbS5nZXRGaWx0ZXIoKSAmJiBvRWxlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYU1EQ1RhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhTURDVGFibGVzLmZvckVhY2goKG9NRENUYWJsZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IG9Sb3dCaW5kaW5nID0gb01EQ1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRjb25zdCBmbkF0dGFjaERhdGFFdmVudHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRvUm93QmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZCgob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0Zm5SZWNlaXZlZChvRXZlbnQpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMucHVzaChvUm93QmluZGluZyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGZuQXR0YWNoRGF0YUV2ZW50cygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvTURDVGFibGUuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFx0XHRcImJpbmRpbmdVcGRhdGVkXCIsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRvUm93QmluZGluZyA9IG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm5BdHRhY2hEYXRhRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG51bGxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0XHRpZiAodGhpcy5pc0NvbnRleHRFeHBlY3RlZCgpICYmIG9CaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIEZvcmNlIHRvIG1lbnRpb24gd2UgYXJlIGV4cGVjdGluZyBkYXRhXG5cdFx0XHRcdHRoaXMuYkhhc0NvbnRleHQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5iSGFzQ29udGV4dCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcInBhZ2VSZWFkeVwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0XHRcdG9FbGVtZW50LmRldGFjaEV2ZW50KFwiZGF0YVJlY2VpdmVkXCIsIGZuUmVjZWl2ZWQpO1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJzZWFyY2hcIiwgZm5TZWFyY2gpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMuX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGFCb3VuZEVsZW1lbnRzID0gW107XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG1haW5PYmplY3RCaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dCBhcyBhbnkpLmdldEJpbmRpbmcoKTtcblx0XHRcdFx0bWFpbk9iamVjdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdG1haW5PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0YUJvdW5kRWxlbWVudHMucHVzaChtYWluT2JqZWN0QmluZGluZyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XG5cdFx0XHR0aGlzLl9vVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG9FbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdEJpbmRpbmcgPSBvRWxlbWVudC5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvT2JqZWN0QmluZGluZykge1xuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIGFsbCBvYmplY3QgYmluZGluZyAobW9zdGx5IHVzZWQgb24gb2JqZWN0IHBhZ2VzKVxuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9PYmplY3RCaW5kaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhQmluZGluZ0tleXMgPSBPYmplY3Qua2V5cyhvRWxlbWVudC5tQmluZGluZ0luZm9zKTtcblx0XHRcdFx0XHRpZiAoYUJpbmRpbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFCaW5kaW5nS2V5cy5mb3JFYWNoKChzUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9FbGVtZW50Lm1CaW5kaW5nSW5mb3Nbc1Byb3BlcnR5TmFtZV0uYmluZGluZztcblx0XHRcdFx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gYWxsIGxpc3QgYmluZGluZywgZ29vZCBmb3IgYmFzaWMgdGFibGVzLCBwcm9ibGVtYXRpYyBmb3IgTURDLCBzZWUgYWJvdmVcblx0XHRcdFx0XHRcdFx0aWYgKG9MaXN0QmluZGluZyAmJiBvTGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvTGlzdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9MaXN0QmluZGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGlzIGlzIGRpcnR5IGJ1dCBNREMgVGFibGUgaGFzIGEgd2VpcmQgbG9hZGluZyBsaWZlY3ljbGVcblx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0aGlzLmJUYWJsZXNMb2FkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFx0YVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0b0VsZW1lbnRcblx0XHRcdFx0XHRcdFx0LmluaXRpYWxpemVkKClcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW1lbnQuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1Jvd0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvUm93QmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9Sb3dCaW5kaW5nKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YU5vdEJvdW5kTURDVGFibGVzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IEVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBib3VuZCB0YWJsZVwiLCBvRXJyb3IgYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9FbGVtZW50LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50KFwic2VhcmNoXCIsIGZuU2VhcmNoKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFByb21pc2UuYWxsKGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIlRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIG9uZSBvciBtdWx0aXBsZSB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUGFnZVJlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9iSXNQYWdlUmVhZHk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRQYWdlUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZShzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogYW55LCBmbkZ1bmN0aW9uPzogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkLCBvRGF0YSwgZm5GdW5jdGlvbiBhcyBGdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBhbnksIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoc0V2ZW50SWQsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgZGV0YWNoRXZlbnQoc0V2ZW50SWQ6IHN0cmluZywgZm5GdW5jdGlvbjogRnVuY3Rpb24pIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KHNFdmVudElkLCBmbkZ1bmN0aW9uKTtcblx0fVxuXHRwcml2YXRlIHJlZ2lzdGVyQ29udGFpbmVyKG9Db250YWluZXI6IE1hbmFnZWRPYmplY3QpIHtcblx0XHR0aGlzLl9vQ29udGFpbmVyID0gb0NvbnRhaW5lcjtcblx0XHR0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVTaG93OiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYlNob3duID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdG9uQmVmb3JlSGlkZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyU2hvdzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fb0NvbnRhaW5lci5hZGRFdmVudERlbGVnYXRlKHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNDb250ZXh0RXhwZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpIHtcblx0XHRpZiAodGhpcy5wYWdlUmVhZHlUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucGFnZVJlYWR5VGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdH0sIDIwMCk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrUGFnZVJlYWR5KGJGcm9tTmF2OiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBmblVJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIFVJIGlzIG5vIGxvbmdlciBkaXJ0eVxuXHRcdFx0aWYgKCFDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHQoQ29yZSBhcyBDb3JlRXgpLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KCk7XG5cdFx0XHRcdH0sIDIwKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gSW4gY2FzZSBVSVVwZGF0ZSBkb2VzIG5vdCBnZXQgY2FsbGVkLCBjaGVjayBpZiBVSSBpcyBub3QgZGlydHkgYW5kIHRoZW4gY2FsbCBfY2hlY2tQYWdlUmVhZHlcblx0XHRjb25zdCBjaGVja1VJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdGlmIChDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJTaG93biAmJlxuXHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0KCF0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgfHwgdGhpcy5iSGFzQ29udGV4dCkgLy8gRWl0aGVyIG5vIGNvbnRleHQgaXMgZXhwZWN0ZWQgb3IgdGhlcmUgaXMgb25lXG5cdFx0KSB7XG5cdFx0XHRpZiAodGhpcy5iRGF0YVJlY2VpdmVkID09PSB0cnVlICYmICFiRnJvbU5hdiAmJiAhdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoICYmIENvcmUuZ2V0VUlEaXJ0eSgpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHJlcXVlc3RlZCBkYXRhIHdlIGdldCBub3RpZmllZCBhcyBzb29uIGFzIHRoZSBkYXRhIGFycml2ZWQsIHNvIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJpbmcgdGlja1xuXHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgQ29yZS5nZXRVSURpcnR5KCkpIHx8XG5cdFx0XHRcdHRoaXMuX25iV2FpdHMgIT09IDAgfHxcblx0XHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSA+IDAgfHxcblx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KS5hdHRhY2hFdmVudChcIlVJVXBkYXRlZFwiLCBmblVJVXBkYXRlZCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tVSVVwZGF0ZWQsIDUwMCk7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugd2UncmUgbm90IHdhaXRpbmcgZm9yIGFueSBkYXRhIChuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2FkZWQpXG5cdFx0XHRcdC8vIGp1c3Qgd2FpdCBmb3IgYSBmcmFtZSB0byBmaXJlIHRoZSBldmVudC5cblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
456
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBhZ2VSZWFkeS50cyJdLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJvbkluaXQiLCJfbmJXYWl0cyIsIl9iU2VhY2hUcmlnZ2VyZWQiLCJfb0V2ZW50UHJvdmlkZXIiLCJFdmVudFByb3ZpZGVyIiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29QYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJvUm9vdENvbnRyb2xDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwib1BsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkIiwiYXR0YWNoRXZlbnQiLCJnZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMiLCJpUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAiLCJEYXRlIiwibm93IiwiaUhlcm9lc0JhdGNoUmVjZWl2ZWRFdmVudFRpbWVzdGFtcCIsIm9uRXhpdCIsIl9vQ29udGFpbmVyIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwid2FpdEZvciIsIm9Qcm9taXNlIiwiZmluYWxseSIsInNldFRpbWVvdXQiLCJjYXRjaCIsIm9uUm91dGVNYXRjaGVkIiwiX2JJc1BhZ2VSZWFkeSIsIm9uUm91dGVNYXRjaGVkRmluaXNoZWQiLCJjaGVja1BhZ2VSZWFkeURlYm91bmNlZCIsIm9uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCIsImFCb3VuZEVsZW1lbnRzIiwiYU1EQ1RhYmxlcyIsImFOb3RCb3VuZE1EQ0NoYXJ0cyIsImlSZXF1ZXN0ZWQiLCJpUmVjZWl2ZWQiLCJmblJlcXVlc3RlZCIsImdldFNvdXJjZSIsImRldGFjaERhdGFSZXF1ZXN0ZWQiLCJiRGF0YVJlY2VpdmVkIiwiZm5SZWNlaXZlZCIsInNHcm91cElkIiwiZmlyZUV2ZW50IiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiZm5BdHRhY2hEYXRhRXZlbnRzIiwiZXZlbnQiLCJvRGF0YSIsImJpbmRpbmciLCJ0YWJsZSIsImdldFJvd0JpbmRpbmciLCJhdHRhY2hEYXRhUmVxdWVzdGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiZGF0YVJlY2VpdmVkRXZlbnQiLCJpc1NlYWNoVHJpZ2dlcmVkIiwicHVzaCIsImZuU2VhcmNoIiwiYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIiLCJmaWx0ZXIiLCJvRWxlbSIsInNJZCIsImdldEZpbHRlciIsImdldFZpc2libGUiLCJhTURDQ2hhcnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIm9NRENUYWJsZSIsIm9Sb3dCaW5kaW5nIiwiYXR0YWNoRXZlbnRPbmNlIiwib01EQ0NoYXJ0IiwiaW5uZXJDaGFydEJvdW5kUHJvbWlzZSIsInRoZW4iLCJvQmluZGluZyIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldElubmVyQ2hhcnQiLCJnZXRCaW5kaW5nIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJpc0NvbnRleHRFeHBlY3RlZCIsInVuZGVmaW5lZCIsImJIYXNDb250ZXh0Iiwib0VsZW1lbnQiLCJkZXRhY2hFdmVudCIsIm1haW5PYmplY3RCaW5kaW5nIiwiYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcyIsImFDaGFydEluaXRpYWxpemVkUHJvbWlzZXMiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJvT2JqZWN0QmluZGluZyIsImdldE9iamVjdEJpbmRpbmciLCJhQmluZGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwibUJpbmRpbmdJbmZvcyIsInNQcm9wZXJ0eU5hbWUiLCJvTGlzdEJpbmRpbmciLCJpc0EiLCJiVGFibGVzTG9hZGVkIiwiaW5pdGlhbGl6ZWQiLCJiQ2hhcnRzTG9hZGVkIiwib0lubmVyQ2hhcnQiLCJQcm9taXNlIiwiYWxsIiwiaW5mbyIsImlzUGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsInJlc29sdmUiLCJzRXZlbnRJZCIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJvQ29udGFpbmVyIiwib25CZWZvcmVTaG93IiwiYlNob3duIiwib25CZWZvcmVIaWRlIiwib25BZnRlclNob3ciLCJfY2hlY2tQYWdlUmVhZHkiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5VGltZXIiLCJjbGVhclRpbWVvdXQiLCJiRnJvbU5hdiIsImZuVUlVcGRhdGVkIiwiQ29yZSIsImdldFVJRGlydHkiLCJfYldhaXRpbmdGb3JSZWZyZXNoIiwiY2hlY2tVSVVwZGF0ZWQiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWVNQSw0QixXQURMQyxjQUFjLENBQUMsNENBQUQsQyxVQW9CYkMsY0FBYyxFLFVBcUNkQSxjQUFjLEUsVUFVZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVdkRixjQUFjLENBQUMsVUFBRCxDLFVBSWRBLGNBQWMsQ0FBQyxVQUFELEMsVUFLZEEsY0FBYyxDQUFDLFVBQUQsQyxVQXVOZEMsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQUtkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0JkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBS2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FLZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQXdCZEMsZ0JBQWdCLEUsV0FDaEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQW5CLEMsV0FLVkwsZUFBZSxFOzs7Ozs7Ozs7V0E5VlRNLE0sR0FEUCxrQkFDZ0I7QUFBQTs7QUFDZixXQUFLQyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsV0FBS0MsZ0JBQUwsR0FBd0IsS0FBeEI7QUFDQSxXQUFLQyxlQUFMLEdBQXVCLEtBQUtBLGVBQUwsR0FBdUIsS0FBS0EsZUFBNUIsR0FBOEMsSUFBSUMsYUFBSixFQUFyRTtBQUNBLFdBQUtDLE1BQUwsR0FBZSxJQUFELENBQWNDLElBQWQsQ0FBbUJDLE9BQW5CLEVBQWQ7QUFDQSxXQUFLQyxjQUFMLEdBQXNCQyxXQUFXLENBQUNDLGVBQVosQ0FBNEIsS0FBS0wsTUFBakMsQ0FBdEI7QUFDQSxXQUFLTSxlQUFMLEdBQXVCQyxTQUFTLENBQUNDLG9CQUFWLENBQStCLEtBQUtSLE1BQXBDLENBQXZCOztBQUVBLFVBQUksS0FBS00sZUFBTCxJQUF3QixLQUFLQSxlQUFMLENBQXFCRyxzQkFBakQsRUFBeUU7QUFDeEUsYUFBS0gsZUFBTCxDQUFxQkcsc0JBQXJCLENBQTRDLFVBQUNDLE1BQUQ7QUFBQSxpQkFBbUIsS0FBSSxDQUFDQyxpQkFBTCxDQUF1QkQsTUFBTSxDQUFDRSxZQUFQLENBQW9CLFdBQXBCLENBQXZCLENBQW5CO0FBQUEsU0FBNUM7QUFDQSxPQUZELE1BRU87QUFDTixhQUFLRCxpQkFBTCxDQUF1QixLQUFLWCxNQUE1QjtBQUNBOztBQUVELFVBQU1hLHNCQUFzQixHQUFJLEtBQUtWLGNBQUwsQ0FBb0JXLGNBQXBCLEVBQUQsQ0FBK0NDLGFBQS9DLEVBQS9COztBQUNBLFVBQU1DLFlBQVksR0FBR0gsc0JBQXNCLENBQUNJLGNBQXZCLElBQXlDSixzQkFBc0IsQ0FBQ0ksY0FBdkIsRUFBOUQ7O0FBQ0EsVUFBSUQsWUFBSixhQUFJQSxZQUFKLGVBQUlBLFlBQVksQ0FBRUUseUJBQWQsRUFBSixFQUErQztBQUM5QyxhQUFLQyxXQUFMLENBQ0MsV0FERCxFQUVDLElBRkQsRUFHQyxZQUFNO0FBQ0xILFVBQUFBLFlBQVksQ0FBQ0ksd0JBQWIsR0FBd0NDLHdCQUF4QyxHQUFtRUMsSUFBSSxDQUFDQyxHQUFMLEVBQW5FO0FBQ0EsU0FMRixFQU1DLElBTkQ7QUFRQSxhQUFLSixXQUFMLENBQ0MscUJBREQsRUFFQyxJQUZELEVBR0MsWUFBTTtBQUNMSCxVQUFBQSxZQUFZLENBQUNJLHdCQUFiLEdBQXdDSSxrQ0FBeEMsR0FBNkVGLElBQUksQ0FBQ0MsR0FBTCxFQUE3RTtBQUNBLFNBTEYsRUFNQyxJQU5EO0FBUUE7QUFDRCxLOztXQUdNRSxNLEdBRFAsa0JBQ2dCO0FBQ2Y7QUFDQTtBQUNBLGFBQU8sS0FBS3RCLGNBQVo7O0FBQ0EsVUFBSSxLQUFLdUIsV0FBVCxFQUFzQjtBQUNyQixhQUFLQSxXQUFMLENBQWlCQyxtQkFBakIsQ0FBcUMsS0FBS0Msb0JBQTFDO0FBQ0E7QUFDRCxLOztXQUlNQyxPLEdBRlAsaUJBRWVDLFFBRmYsRUFFOEI7QUFBQTs7QUFDN0IsV0FBS2xDLFFBQUw7QUFDQWtDLE1BQUFBLFFBQVEsQ0FDTkMsT0FERixDQUNVLFlBQU07QUFDZEMsUUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDaEIsVUFBQSxNQUFJLENBQUNwQyxRQUFMO0FBQ0EsU0FGUyxFQUVQLENBRk8sQ0FBVjtBQUdBLE9BTEYsRUFNRXFDLEtBTkYsQ0FNUSxJQU5SO0FBT0EsSzs7V0FFREMsYyxHQURBLDBCQUNpQjtBQUNoQixXQUFLQyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0EsSzs7V0FFREMsc0IsR0FEQSxrQ0FDeUI7QUFDeEIsV0FBS0MsdUJBQUw7QUFDQSxLOztXQUdEQyxjLEdBREEsd0JBQ2VDLGVBRGYsRUFDeUM7QUFBQTs7QUFDeEMsVUFBSSxDQUFDLEtBQUtDLDRCQUFWLEVBQXdDO0FBQ3ZDLGFBQUtBLDRCQUFMLEdBQW9DLElBQXBDO0FBQ0EsWUFBSUMsY0FBcUIsR0FBRyxFQUE1QjtBQUNBLFlBQU1DLFVBQWlCLEdBQUcsRUFBMUI7QUFDQSxZQUFNQyxrQkFBeUIsR0FBRyxFQUFsQztBQUNBLFlBQUlDLFVBQVUsR0FBRyxDQUFqQjtBQUNBLFlBQUlDLFNBQVMsR0FBRyxDQUFoQjs7QUFDQSxZQUFNQyxXQUFXLEdBQUcsVUFBQ3BDLE1BQUQsRUFBbUI7QUFDckNBLFVBQUFBLE1BQU0sQ0FBQ3FDLFNBQVAsRUFBRCxDQUE0QkMsbUJBQTVCLENBQWdERixXQUFoRDtBQUNBRixVQUFBQSxVQUFVO0FBQ1YsVUFBQSxNQUFJLENBQUNLLGFBQUwsR0FBcUIsS0FBckI7QUFDQSxTQUpEOztBQUtBLFlBQU1DLFVBQVUsR0FBRyxVQUFDeEMsTUFBRCxFQUFtQjtBQUNyQyxrQkFBU0EsTUFBTSxDQUFDcUMsU0FBUCxFQUFELENBQTRCSSxRQUFwQztBQUNDLGlCQUFLLGVBQUw7QUFDQyxjQUFBLE1BQUksQ0FBQ3JELGVBQUwsQ0FBcUJzRCxTQUFyQixDQUErQixzQkFBL0I7O0FBQ0E7O0FBQ0QsaUJBQUssY0FBTDtBQUNDLGNBQUEsTUFBSSxDQUFDdEQsZUFBTCxDQUFxQnNELFNBQXJCLENBQStCLHFCQUEvQjs7QUFDQTs7QUFDRDtBQVBEOztBQVNDMUMsVUFBQUEsTUFBTSxDQUFDcUMsU0FBUCxFQUFELENBQTRCTSxrQkFBNUIsQ0FBK0NILFVBQS9DO0FBQ0FMLFVBQUFBLFNBQVM7O0FBQ1QsY0FBSUEsU0FBUyxJQUFJRCxVQUFiLElBQTJCQSxVQUFVLEtBQUssQ0FBOUMsRUFBaUQ7QUFDaERBLFlBQUFBLFVBQVUsR0FBRyxDQUFiO0FBQ0FDLFlBQUFBLFNBQVMsR0FBRyxDQUFaO0FBQ0EsWUFBQSxNQUFJLENBQUNJLGFBQUwsR0FBcUIsSUFBckI7O0FBQ0EsWUFBQSxNQUFJLENBQUNaLHVCQUFMO0FBQ0E7QUFDRCxTQWxCRDs7QUFtQkEsWUFBTWlCLGtCQUFrQixHQUFHLFVBQUNDLEtBQUQsRUFBc0JDLEtBQXRCLEVBQXFDO0FBQy9ELGNBQU1DLE9BQU8sR0FBR0QsS0FBSyxDQUFDQyxPQUFOLEdBQWdCRCxLQUFLLENBQUNDLE9BQXRCLEdBQWdDRCxLQUFLLENBQUNFLEtBQU4sQ0FBWUMsYUFBWixFQUFoRDs7QUFDQSxjQUFJRixPQUFKLEVBQWE7QUFDWkEsWUFBQUEsT0FBTyxDQUFDRyxtQkFBUixDQUE0QmQsV0FBNUI7QUFDQVcsWUFBQUEsT0FBTyxDQUFDSSxrQkFBUixDQUEyQixVQUFDQyxpQkFBRCxFQUE0QjtBQUN0RFosY0FBQUEsVUFBVSxDQUFDWSxpQkFBRCxDQUFWO0FBQ0EsY0FBQSxNQUFJLENBQUNqRSxnQkFBTCxHQUF3QjJELEtBQUssQ0FBQ08sZ0JBQU4sR0FBeUIsQ0FBQ1AsS0FBSyxDQUFDTyxnQkFBaEMsR0FBbUQsTUFBSSxDQUFDbEUsZ0JBQWhGO0FBQ0EsYUFIRDtBQUlBNEMsWUFBQUEsY0FBYyxDQUFDdUIsSUFBZixDQUFvQlAsT0FBcEI7QUFDQTtBQUNELFNBVkQ7O0FBWUEsWUFBTVEsUUFBUSxHQUFHLFVBQUN2RCxNQUFELEVBQW1CO0FBQ25DLGNBQU13RCwwQkFBMEIsR0FBR3hCLFVBQVUsQ0FBQ3lCLE1BQVgsQ0FBa0IsVUFBQ0MsS0FBRCxFQUFXO0FBQy9ELGdCQUFLMUQsTUFBTSxDQUFDcUMsU0FBUCxFQUFELENBQTRCc0IsR0FBNUIsS0FBb0NELEtBQUssQ0FBQ0UsU0FBTixFQUFwQyxJQUF5REYsS0FBSyxDQUFDRyxVQUFOLEVBQTdELEVBQWlGO0FBQ2hGLHFCQUFPLElBQVA7QUFDQTs7QUFDRCxtQkFBTyxLQUFQO0FBQ0EsV0FMa0MsQ0FBbkM7QUFNQSxjQUFNQyxVQUFVLEdBQUc3QixrQkFBa0IsQ0FBQ3dCLE1BQW5CLENBQTBCLFVBQUNDLEtBQUQsRUFBVztBQUN2RCxnQkFBSzFELE1BQU0sQ0FBQ3FDLFNBQVAsRUFBRCxDQUE0QnNCLEdBQTVCLEtBQW9DRCxLQUFLLENBQUNFLFNBQU4sRUFBcEMsSUFBeURGLEtBQUssQ0FBQ0csVUFBTixFQUE3RCxFQUFpRjtBQUNoRixxQkFBTyxJQUFQO0FBQ0E7O0FBQ0QsbUJBQU8sS0FBUDtBQUNBLFdBTGtCLENBQW5COztBQU1BLGNBQUlMLDBCQUEwQixDQUFDTyxNQUEzQixHQUFvQyxDQUFwQyxJQUF5Q0QsVUFBVSxDQUFDQyxNQUFYLEdBQW9CLENBQWpFLEVBQW9FO0FBQ25FLFlBQUEsTUFBSSxDQUFDNUUsZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQTs7QUFDRHFFLFVBQUFBLDBCQUEwQixDQUFDUSxPQUEzQixDQUFtQyxVQUFDQyxTQUFELEVBQW9CO0FBQ3RELGdCQUFNQyxXQUFXLEdBQUdELFNBQVMsQ0FBQ2hCLGFBQVYsRUFBcEI7O0FBQ0EsZ0JBQUlpQixXQUFKLEVBQWlCO0FBQ2hCdEIsY0FBQUEsa0JBQWtCLENBQUMsSUFBRCxFQUFPO0FBQUVJLGdCQUFBQSxLQUFLLEVBQUVpQixTQUFUO0FBQW9CWixnQkFBQUEsZ0JBQWdCLEVBQUU7QUFBdEMsZUFBUCxDQUFsQjtBQUNBLGFBRkQsTUFFTztBQUNOWSxjQUFBQSxTQUFTLENBQUNFLGVBQVYsQ0FBMEIsZ0JBQTFCLEVBQTRDO0FBQUVuQixnQkFBQUEsS0FBSyxFQUFFaUIsU0FBVDtBQUFvQlosZ0JBQUFBLGdCQUFnQixFQUFFO0FBQXRDLGVBQTVDLEVBQTBGVCxrQkFBMUYsRUFBOEcsSUFBOUc7QUFDQTtBQUNELFdBUEQ7QUFRQWtCLFVBQUFBLFVBQVUsQ0FBQ0UsT0FBWCxDQUFtQixVQUFDSSxTQUFELEVBQW9CO0FBQ3RDQSxZQUFBQSxTQUFTLENBQUNDLHNCQUFWLENBQ0VDLElBREYsQ0FDTyxZQUFNO0FBQ1gsa0JBQU1DLFFBQVEsR0FBR0gsU0FBUyxDQUFDSSxrQkFBVixHQUErQkMsYUFBL0IsQ0FBNkNMLFNBQTdDLEVBQXdETSxVQUF4RCxDQUFtRSxNQUFuRSxDQUFqQjs7QUFDQSxrQkFBSUgsUUFBSixFQUFjO0FBQ2IzQixnQkFBQUEsa0JBQWtCLENBQUMsSUFBRCxFQUFPO0FBQUVHLGtCQUFBQSxPQUFPLEVBQUV3QixRQUFYO0FBQXFCbEIsa0JBQUFBLGdCQUFnQixFQUFFO0FBQXZDLGlCQUFQLENBQWxCO0FBQ0EsZUFGRCxNQUVPO0FBQ05lLGdCQUFBQSxTQUFTLENBQUNELGVBQVYsQ0FDQyxnQkFERCxFQUVDO0FBQUVwQixrQkFBQUEsT0FBTyxFQUFFd0IsUUFBWDtBQUFxQmxCLGtCQUFBQSxnQkFBZ0IsRUFBRTtBQUF2QyxpQkFGRCxFQUdDVCxrQkFIRCxFQUlDLElBSkQ7QUFNQTtBQUNELGFBYkYsRUFjRXJCLEtBZEYsQ0FjUSxVQUFVb0QsTUFBVixFQUF5QjtBQUMvQkMsY0FBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsaUNBQVYsRUFBNkNGLE1BQTdDO0FBQ0EsYUFoQkY7QUFpQkEsV0FsQkQ7QUFtQkEsU0EzQ0Q7O0FBNENBLFlBQUksS0FBS0csaUJBQUwsTUFBNEJqRCxlQUFlLEtBQUtrRCxTQUFwRCxFQUErRDtBQUM5RDtBQUNBLGVBQUtDLFdBQUwsR0FBbUIsS0FBbkI7QUFDQTtBQUNBLFNBSkQsTUFJTztBQUNOLGVBQUtBLFdBQUwsR0FBbUIsSUFBbkI7QUFDQTs7QUFFRCxhQUFLYixlQUFMLENBQ0MsV0FERCxFQUVDLElBRkQsRUFHQyxZQUFNO0FBQ0xwQyxVQUFBQSxjQUFjLENBQUNpQyxPQUFmLENBQXVCLFVBQUNpQixRQUFELEVBQW1CO0FBQ3pDQSxZQUFBQSxRQUFRLENBQUNDLFdBQVQsQ0FBcUIsZUFBckIsRUFBc0M5QyxXQUF0QztBQUNBNkMsWUFBQUEsUUFBUSxDQUFDQyxXQUFULENBQXFCLGNBQXJCLEVBQXFDMUMsVUFBckM7QUFDQXlDLFlBQUFBLFFBQVEsQ0FBQ0MsV0FBVCxDQUFxQixRQUFyQixFQUErQjNCLFFBQS9CO0FBQ0EwQixZQUFBQSxRQUFRLENBQUNDLFdBQVQsQ0FBcUIsZ0JBQXJCLEVBQXVDdEMsa0JBQXZDO0FBQ0EsV0FMRDtBQU1BLFVBQUEsTUFBSSxDQUFDZCw0QkFBTCxHQUFvQyxLQUFwQztBQUNBQyxVQUFBQSxjQUFjLEdBQUcsRUFBakI7QUFDQSxTQVpGLEVBYUMsSUFiRDs7QUFlQSxZQUFJRixlQUFKLEVBQXFCO0FBQ3BCLGNBQU1zRCxpQkFBaUIsR0FBSXRELGVBQUQsQ0FBeUI2QyxVQUF6QixFQUExQjtBQUNBUyxVQUFBQSxpQkFBaUIsQ0FBQ2pDLG1CQUFsQixDQUFzQ2QsV0FBdEM7QUFDQStDLFVBQUFBLGlCQUFpQixDQUFDaEMsa0JBQWxCLENBQXFDWCxVQUFyQztBQUNBVCxVQUFBQSxjQUFjLENBQUN1QixJQUFmLENBQW9CNkIsaUJBQXBCO0FBQ0E7O0FBRUQsWUFBTUMseUJBQXlDLEdBQUcsRUFBbEQ7QUFDQSxZQUFNQyx5QkFBeUMsR0FBRyxFQUFsRDs7QUFDQSxhQUFLL0YsTUFBTCxDQUFZZ0cscUJBQVosQ0FBa0MsSUFBbEMsRUFBd0MsVUFBQ0wsUUFBRCxFQUFtQjtBQUMxRCxjQUFNTSxjQUFjLEdBQUdOLFFBQVEsQ0FBQ08sZ0JBQVQsRUFBdkI7O0FBQ0EsY0FBSUQsY0FBSixFQUFvQjtBQUNuQjtBQUNBQSxZQUFBQSxjQUFjLENBQUNyQyxtQkFBZixDQUFtQ2QsV0FBbkM7QUFDQW1ELFlBQUFBLGNBQWMsQ0FBQ3BDLGtCQUFmLENBQWtDWCxVQUFsQztBQUNBVCxZQUFBQSxjQUFjLENBQUN1QixJQUFmLENBQW9CaUMsY0FBcEI7QUFDQSxXQUxELE1BS087QUFDTixnQkFBTUUsWUFBWSxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWVYsUUFBUSxDQUFDVyxhQUFyQixDQUFyQjs7QUFDQSxnQkFBSUgsWUFBWSxDQUFDMUIsTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUM1QjBCLGNBQUFBLFlBQVksQ0FBQ3pCLE9BQWIsQ0FBcUIsVUFBQzZCLGFBQUQsRUFBbUI7QUFDdkMsb0JBQU1DLFlBQVksR0FBR2IsUUFBUSxDQUFDVyxhQUFULENBQXVCQyxhQUF2QixFQUFzQzlDLE9BQTNELENBRHVDLENBRXZDOztBQUNBLG9CQUFJK0MsWUFBWSxJQUFJQSxZQUFZLENBQUNDLEdBQWIsQ0FBaUIsd0NBQWpCLENBQXBCLEVBQWdGO0FBQy9FRCxrQkFBQUEsWUFBWSxDQUFDNUMsbUJBQWIsQ0FBaUNkLFdBQWpDO0FBQ0EwRCxrQkFBQUEsWUFBWSxDQUFDM0Msa0JBQWIsQ0FBZ0NYLFVBQWhDO0FBQ0FULGtCQUFBQSxjQUFjLENBQUN1QixJQUFmLENBQW9Cd0MsWUFBcEI7QUFDQTtBQUNELGVBUkQ7QUFTQTtBQUNELFdBcEJ5RCxDQXFCMUQ7OztBQUNBLGNBQUliLFFBQVEsQ0FBQ2MsR0FBVCxDQUFhLGtCQUFiLENBQUosRUFBc0M7QUFDckMsWUFBQSxNQUFJLENBQUNDLGFBQUwsR0FBcUIsS0FBckIsQ0FEcUMsQ0FFckM7O0FBQ0FaLFlBQUFBLHlCQUF5QixDQUFDOUIsSUFBMUIsQ0FDQzJCLFFBQVEsQ0FDTmdCLFdBREYsR0FFRTNCLElBRkYsQ0FFTyxZQUFNO0FBQ1h0QyxjQUFBQSxVQUFVLENBQUNzQixJQUFYLENBQWdCMkIsUUFBaEI7QUFDQSxrQkFBTWYsV0FBVyxHQUFHZSxRQUFRLENBQUNoQyxhQUFULEVBQXBCOztBQUNBLGtCQUFJaUIsV0FBSixFQUFpQjtBQUNoQnRCLGdCQUFBQSxrQkFBa0IsQ0FBQyxJQUFELEVBQU87QUFBRUksa0JBQUFBLEtBQUssRUFBRWlDO0FBQVQsaUJBQVAsQ0FBbEI7QUFDQSxlQUZELE1BRU87QUFDTkEsZ0JBQUFBLFFBQVEsQ0FBQ2QsZUFBVCxDQUF5QixnQkFBekIsRUFBMkM7QUFBRW5CLGtCQUFBQSxLQUFLLEVBQUVpQztBQUFULGlCQUEzQyxFQUFnRXJDLGtCQUFoRTtBQUNBO0FBQ0QsYUFWRixFQVdFckIsS0FYRixDQVdRLFVBQVVvRCxNQUFWLEVBQXlCO0FBQy9CQyxjQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSwyQkFBVixFQUF1Q0YsTUFBdkM7QUFDQSxhQWJGLENBREQ7QUFnQkEsV0FuQkQsTUFtQk8sSUFBSU0sUUFBUSxDQUFDYyxHQUFULENBQWEsa0JBQWIsQ0FBSixFQUFzQztBQUM1QyxZQUFBLE1BQUksQ0FBQ0csYUFBTCxHQUFxQixLQUFyQixDQUQ0QyxDQUU1Qzs7QUFDQWIsWUFBQUEseUJBQXlCLENBQUMvQixJQUExQixDQUNDMkIsUUFBUSxDQUNOZ0IsV0FERixHQUVFM0IsSUFGRixDQUVPLFlBQU07QUFDWCxrQkFBTTZCLFdBQVcsR0FBR2xCLFFBQVEsQ0FBQ1Qsa0JBQVQsR0FBOEJDLGFBQTlCLENBQTRDUSxRQUE1QyxDQUFwQjtBQUNBLGtCQUFNVixRQUFRLEdBQUc0QixXQUFXLElBQUlBLFdBQVcsQ0FBQ3pCLFVBQVosQ0FBdUIsTUFBdkIsQ0FBaEM7O0FBQ0Esa0JBQUlILFFBQUosRUFBYztBQUNiQSxnQkFBQUEsUUFBUSxDQUFDckIsbUJBQVQsQ0FBNkJkLFdBQTdCO0FBQ0FtQyxnQkFBQUEsUUFBUSxDQUFDcEIsa0JBQVQsQ0FBNEJYLFVBQTVCO0FBQ0FULGdCQUFBQSxjQUFjLENBQUN1QixJQUFmLENBQW9CaUIsUUFBcEI7QUFDQSxlQUpELE1BSU87QUFDTnRDLGdCQUFBQSxrQkFBa0IsQ0FBQ3FCLElBQW5CLENBQXdCMkIsUUFBeEI7QUFDQTtBQUNELGFBWkYsRUFhRTFELEtBYkYsQ0FhUSxVQUFVb0QsTUFBVixFQUF5QjtBQUMvQkMsY0FBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsMkJBQVYsRUFBdUNGLE1BQXZDO0FBQ0EsYUFmRixDQUREO0FBa0JBLFdBckJNLE1BcUJBLElBQUlNLFFBQVEsQ0FBQ2MsR0FBVCxDQUFhLGdDQUFiLENBQUosRUFBb0Q7QUFDMURkLFlBQUFBLFFBQVEsQ0FBQ3hFLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0I4QyxRQUEvQjtBQUNBeEIsWUFBQUEsY0FBYyxDQUFDdUIsSUFBZixDQUFvQjJCLFFBQXBCO0FBQ0E7QUFDRCxTQWxFRDs7QUFtRUEsWUFBSUcseUJBQXlCLENBQUNyQixNQUExQixHQUFtQyxDQUF2QyxFQUEwQztBQUN6Q3FDLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZakIseUJBQVosRUFDRWQsSUFERixDQUNPLFlBQU07QUFDWCxZQUFBLE1BQUksQ0FBQzBCLGFBQUwsR0FBcUIsSUFBckI7O0FBQ0EsWUFBQSxNQUFJLENBQUNyRSx1QkFBTDtBQUNBLFdBSkYsRUFLRUosS0FMRixDQUtRLFVBQUNvRCxNQUFELEVBQVk7QUFDbEJDLFlBQUFBLEdBQUcsQ0FBQzBCLElBQUosQ0FBUywrQ0FBVCxFQUEwRDNCLE1BQTFEO0FBQ0EsWUFBQSxNQUFJLENBQUNxQixhQUFMLEdBQXFCLElBQXJCOztBQUNBLFlBQUEsTUFBSSxDQUFDckUsdUJBQUw7QUFDQSxXQVRGO0FBVUE7O0FBQ0QsWUFBSTBELHlCQUF5QixDQUFDdEIsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekNxQyxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWWhCLHlCQUFaLEVBQ0VmLElBREYsQ0FDTyxZQUFNO0FBQ1gsWUFBQSxNQUFJLENBQUM0QixhQUFMLEdBQXFCLElBQXJCOztBQUNBLFlBQUEsTUFBSSxDQUFDdkUsdUJBQUw7QUFDQSxXQUpGLEVBS0VKLEtBTEYsQ0FLUSxVQUFDb0QsTUFBRCxFQUFZO0FBQ2xCQyxZQUFBQSxHQUFHLENBQUMwQixJQUFKLENBQVMsZ0RBQVQsRUFBMkQzQixNQUEzRDtBQUNBLFlBQUEsTUFBSSxDQUFDdUIsYUFBTCxHQUFxQixJQUFyQjs7QUFDQSxZQUFBLE1BQUksQ0FBQ3ZFLHVCQUFMO0FBQ0EsV0FURjtBQVVBO0FBQ0Q7QUFDRCxLOztXQUlNNEUsVyxHQUZQLHVCQUVxQjtBQUNwQixhQUFPLEtBQUs5RSxhQUFaO0FBQ0EsSzs7V0FJTStFLGEsR0FGUCx5QkFFc0M7QUFBQTs7QUFDckMsYUFBTyxJQUFJSixPQUFKLENBQVksVUFBQ0ssT0FBRCxFQUFhO0FBQy9CLFlBQUksTUFBSSxDQUFDRixXQUFMLEVBQUosRUFBd0I7QUFDdkJFLFVBQUFBLE9BQU87QUFDUCxTQUZELE1BRU87QUFDTixVQUFBLE1BQUksQ0FBQ3RDLGVBQUwsQ0FDQyxXQURELEVBRUMsSUFGRCxFQUdDLFlBQU07QUFDTHNDLFlBQUFBLE9BQU87QUFDUCxXQUxGLEVBTUMsTUFORDtBQVFBO0FBQ0QsT0FiTSxDQUFQO0FBY0EsSzs7V0FJTXRDLGUsR0FGUCx5QkFFdUJ1QyxRQUZ2QixFQUV5QzVELEtBRnpDLEVBRXFENkQsVUFGckQsRUFFNEVDLFNBRjVFLEVBRTZGO0FBQzVGO0FBQ0EsYUFBTyxLQUFLeEgsZUFBTCxDQUFxQitFLGVBQXJCLENBQXFDdUMsUUFBckMsRUFBK0M1RCxLQUEvQyxFQUFzRDZELFVBQXRELEVBQThFQyxTQUE5RSxDQUFQO0FBQ0EsSzs7V0FHTW5HLFcsR0FGUCxxQkFFbUJpRyxRQUZuQixFQUVxQzVELEtBRnJDLEVBRWlENkQsVUFGakQsRUFFdUVDLFNBRnZFLEVBRXVGO0FBQ3RGO0FBQ0EsYUFBTyxLQUFLeEgsZUFBTCxDQUFxQnFCLFdBQXJCLENBQWlDaUcsUUFBakMsRUFBMkM1RCxLQUEzQyxFQUFrRDZELFVBQWxELEVBQThEQyxTQUE5RCxDQUFQO0FBQ0EsSzs7V0FHTTFCLFcsR0FGUCxxQkFFbUJ3QixRQUZuQixFQUVxQ0MsVUFGckMsRUFFMkQ7QUFDMUQ7QUFDQSxhQUFPLEtBQUt2SCxlQUFMLENBQXFCOEYsV0FBckIsQ0FBaUN3QixRQUFqQyxFQUEyQ0MsVUFBM0MsQ0FBUDtBQUNBLEs7O1dBQ08xRyxpQixHQUFSLDJCQUEwQjRHLFVBQTFCLEVBQXFEO0FBQUE7O0FBQ3BELFdBQUs3RixXQUFMLEdBQW1CNkYsVUFBbkI7QUFDQSxXQUFLM0Ysb0JBQUwsR0FBNEI7QUFDM0I0RixRQUFBQSxZQUFZLEVBQUUsWUFBTTtBQUNuQixVQUFBLE1BQUksQ0FBQ0MsTUFBTCxHQUFjLEtBQWQ7QUFDQSxVQUFBLE1BQUksQ0FBQ3RGLGFBQUwsR0FBcUIsS0FBckI7QUFDQSxTQUowQjtBQUszQnVGLFFBQUFBLFlBQVksRUFBRSxZQUFNO0FBQ25CLFVBQUEsTUFBSSxDQUFDRCxNQUFMLEdBQWMsS0FBZDtBQUNBLFVBQUEsTUFBSSxDQUFDdEYsYUFBTCxHQUFxQixLQUFyQjtBQUNBLFNBUjBCO0FBUzNCd0YsUUFBQUEsV0FBVyxFQUFFLFlBQU07QUFDbEIsVUFBQSxNQUFJLENBQUNGLE1BQUwsR0FBYyxJQUFkOztBQUNBLFVBQUEsTUFBSSxDQUFDRyxlQUFMLENBQXFCLElBQXJCO0FBQ0E7QUFaMEIsT0FBNUI7O0FBY0EsV0FBS2xHLFdBQUwsQ0FBaUJtRyxnQkFBakIsQ0FBa0MsS0FBS2pHLG9CQUF2QztBQUNBLEs7O1dBSU00RCxpQixHQUZQLDZCQUUyQjtBQUMxQixhQUFPLEtBQVA7QUFDQSxLOztXQUdNbkQsdUIsR0FEUCxtQ0FDaUM7QUFBQTs7QUFDaEMsVUFBSSxLQUFLeUYsY0FBVCxFQUF5QjtBQUN4QkMsUUFBQUEsWUFBWSxDQUFDLEtBQUtELGNBQU4sQ0FBWjtBQUNBOztBQUNELFdBQUtBLGNBQUwsR0FBc0I5RixVQUFVLENBQUMsWUFBTTtBQUN0QyxRQUFBLE1BQUksQ0FBQzRGLGVBQUw7QUFDQSxPQUYrQixFQUU3QixHQUY2QixDQUFoQztBQUdBLEs7O1dBRU1BLGUsR0FBUCwyQkFBa0Q7QUFBQTs7QUFBQSxVQUEzQkksUUFBMkIsdUVBQVAsS0FBTzs7QUFDakQsVUFBTUMsV0FBVyxHQUFHLFlBQU07QUFDekI7QUFDQSxZQUFJLENBQUNDLElBQUksQ0FBQ0MsVUFBTCxFQUFMLEVBQXdCO0FBQ3RCRCxVQUFBQSxJQUFELENBQWlCdEMsV0FBakIsQ0FBNkIsV0FBN0IsRUFBMENxQyxXQUExQztBQUNBLFVBQUEsTUFBSSxDQUFDRyxtQkFBTCxHQUEyQixLQUEzQjtBQUNBcEcsVUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDaEIsWUFBQSxNQUFJLENBQUM0RixlQUFMO0FBQ0EsV0FGUyxFQUVQLEVBRk8sQ0FBVjtBQUdBO0FBQ0QsT0FURCxDQURpRCxDQVlqRDs7O0FBQ0EsVUFBTVMsY0FBYyxHQUFHLFlBQU07QUFDNUIsWUFBSUgsSUFBSSxDQUFDQyxVQUFMLEVBQUosRUFBdUI7QUFDdEJuRyxVQUFBQSxVQUFVLENBQUNxRyxjQUFELEVBQWlCLEdBQWpCLENBQVY7QUFDQSxTQUZELE1BRU8sSUFBSSxNQUFJLENBQUNELG1CQUFULEVBQThCO0FBQ3BDLFVBQUEsTUFBSSxDQUFDQSxtQkFBTCxHQUEyQixLQUEzQjtBQUNDRixVQUFBQSxJQUFELENBQWlCdEMsV0FBakIsQ0FBNkIsV0FBN0IsRUFBMENxQyxXQUExQzs7QUFDQSxVQUFBLE1BQUksQ0FBQ0wsZUFBTDtBQUNBO0FBQ0QsT0FSRDs7QUFVQSxVQUNDLEtBQUtILE1BQUwsSUFDQSxLQUFLeEUsYUFBTCxLQUF1QixLQUR2QixJQUVBLEtBQUt5RCxhQUFMLEtBQXVCLEtBRnZCLElBR0EsS0FBS0UsYUFBTCxLQUF1QixLQUh2QixLQUlDLENBQUMsS0FBS3BCLGlCQUFMLEVBQUQsSUFBNkIsS0FBS0UsV0FKbkMsQ0FERCxDQUtpRDtBQUxqRCxRQU1FO0FBQ0QsWUFBSSxLQUFLekMsYUFBTCxLQUF1QixJQUF2QixJQUErQixDQUFDK0UsUUFBaEMsSUFBNEMsQ0FBQyxLQUFLSSxtQkFBbEQsSUFBeUVGLElBQUksQ0FBQ0MsVUFBTCxFQUE3RSxFQUFnRztBQUMvRjtBQUNBLGVBQUtsRixhQUFMLEdBQXFCd0MsU0FBckI7QUFDQSxlQUFLMkMsbUJBQUwsR0FBMkIsSUFBM0I7QUFDQ0YsVUFBQUEsSUFBRCxDQUFpQi9HLFdBQWpCLENBQTZCLFdBQTdCLEVBQTBDOEcsV0FBMUM7QUFDQWpHLFVBQUFBLFVBQVUsQ0FBQ3FHLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUNBLFNBTkQsTUFNTyxJQUNMLENBQUMsS0FBS0QsbUJBQU4sSUFBNkJGLElBQUksQ0FBQ0MsVUFBTCxFQUE5QixJQUNBLEtBQUt2SSxRQUFMLEtBQWtCLENBRGxCLElBRUEwSSwyQkFBMkIsQ0FBQ0MsK0JBQTVCLEtBQWdFLENBRmhFLElBR0EsS0FBSzFJLGdCQUpDLEVBS0w7QUFDRCxlQUFLdUksbUJBQUwsR0FBMkIsSUFBM0I7QUFDQ0YsVUFBQUEsSUFBRCxDQUFpQi9HLFdBQWpCLENBQTZCLFdBQTdCLEVBQTBDOEcsV0FBMUM7QUFDQWpHLFVBQUFBLFVBQVUsQ0FBQ3FHLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUNBLFNBVE0sTUFTQSxJQUFJLENBQUMsS0FBS0QsbUJBQVYsRUFBK0I7QUFDckM7QUFDQTtBQUNBLGVBQUtqRyxhQUFMLEdBQXFCLElBQXJCOztBQUNBLGVBQUtyQyxlQUFMLENBQXFCc0QsU0FBckIsQ0FBK0IsV0FBL0I7QUFDQTtBQUNEO0FBQ0QsSzs7O0lBaGJ5Q29GLG1CO1NBbWI1QnRKLDRCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUGFnZVJlYWR5XCIpXG5jbGFzcyBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX29FdmVudFByb3ZpZGVyITogRXZlbnRQcm92aWRlcjtcblx0cHJpdmF0ZSBfb1ZpZXc6IGFueTtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0cHJpdmF0ZSBfb1BhZ2VDb21wb25lbnQhOiBhbnk7XG5cdHByaXZhdGUgX29Db250YWluZXIhOiBhbnk7XG5cdHByaXZhdGUgX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2ZuQ29udGFpbmVyRGVsZWdhdGU6IGFueTtcblx0cHJpdmF0ZSBfbmJXYWl0cyE6IG51bWJlcjtcblx0cHJpdmF0ZSBfYlNlYWNoVHJpZ2dlcmVkITogYm9vbGVhbjtcblx0cHJpdmF0ZSBfYklzUGFnZVJlYWR5ITogYm9vbGVhbjtcblx0cHJpdmF0ZSBfYldhaXRpbmdGb3JSZWZyZXNoITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiU2hvd24hOiBib29sZWFuO1xuXHRwcml2YXRlIGJIYXNDb250ZXh0ITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiRGF0YVJlY2VpdmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIGJUYWJsZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgYkNoYXJ0c0xvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpIHtcblx0XHR0aGlzLl9uYldhaXRzID0gMDtcblx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHR0aGlzLl9vRXZlbnRQcm92aWRlciA9IHRoaXMuX29FdmVudFByb3ZpZGVyID8gdGhpcy5fb0V2ZW50UHJvdmlkZXIgOiBuZXcgRXZlbnRQcm92aWRlcigpO1xuXHRcdHRoaXMuX29WaWV3ID0gKHRoaXMgYXMgYW55KS5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl9vVmlldyk7XG5cblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQgJiYgdGhpcy5fb1BhZ2VDb21wb25lbnQuYXR0YWNoQ29udGFpbmVyRGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuYXR0YWNoQ29udGFpbmVyRGVmaW5lZCgob0V2ZW50OiBFdmVudCkgPT4gdGhpcy5yZWdpc3RlckNvbnRhaW5lcihvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGFpbmVyXCIpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVnaXN0ZXJDb250YWluZXIodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9Sb290Q29udHJvbENvbnRyb2xsZXIgPSAodGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpIGFzIFZpZXcpLmdldENvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3Qgb1BsYWNlaG9sZGVyID0gb1Jvb3RDb250cm9sQ29udHJvbGxlci5nZXRQbGFjZWhvbGRlciAmJiBvUm9vdENvbnRyb2xDb250cm9sbGVyLmdldFBsYWNlaG9sZGVyKCk7XG5cdFx0aWYgKG9QbGFjZWhvbGRlcj8uaXNQbGFjZWhvbGRlckRlYnVnRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFxuXHRcdFx0XHRcInBhZ2VSZWFkeVwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0b1BsYWNlaG9sZGVyLmdldFBsYWNlaG9sZGVyRGVidWdTdGF0cygpLmlQYWdlUmVhZHlFdmVudFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFxuXHRcdFx0XHRcImhlcm9lc0JhdGNoUmVjZWl2ZWRcIixcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdG9QbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pSGVyb2VzQmF0Y2hSZWNlaXZlZEV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25FeGl0KCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBDb21wb25lbnQ7XG5cdFx0aWYgKHRoaXMuX29Db250YWluZXIpIHtcblx0XHRcdHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRGb3Iob1Byb21pc2U6IGFueSkge1xuXHRcdHRoaXMuX25iV2FpdHMrKztcblx0XHRvUHJvbWlzZVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9uYldhaXRzLS07XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChudWxsKTtcblx0fVxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZCgpIHtcblx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0fVxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCkge1xuXHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGlmICghdGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkKSB7XG5cdFx0XHR0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQgPSB0cnVlO1xuXHRcdFx0bGV0IGFCb3VuZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU1EQ1RhYmxlczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IGFOb3RCb3VuZE1EQ0NoYXJ0czogYW55W10gPSBbXTtcblx0XHRcdGxldCBpUmVxdWVzdGVkID0gMDtcblx0XHRcdGxldCBpUmVjZWl2ZWQgPSAwO1xuXHRcdFx0Y29uc3QgZm5SZXF1ZXN0ZWQgPSAob0V2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHQob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuZGV0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdGlSZXF1ZXN0ZWQrKztcblx0XHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkID0gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5SZWNlaXZlZCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAoKG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLnNHcm91cElkKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIiRhdXRvLldvcmtlcnNcIjpcblx0XHRcdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIiRhdXRvLkhlcm9lc1wiOlxuXHRcdFx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdFx0KG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLmRldGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0aVJlY2VpdmVkKys7XG5cdFx0XHRcdGlmIChpUmVjZWl2ZWQgPj0gaVJlcXVlc3RlZCAmJiBpUmVxdWVzdGVkICE9PSAwKSB7XG5cdFx0XHRcdFx0aVJlcXVlc3RlZCA9IDA7XG5cdFx0XHRcdFx0aVJlY2VpdmVkID0gMDtcblx0XHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuQXR0YWNoRGF0YUV2ZW50cyA9IChldmVudDogRXZlbnQgfCBudWxsLCBvRGF0YTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBvRGF0YS5iaW5kaW5nID8gb0RhdGEuYmluZGluZyA6IG9EYXRhLnRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKGJpbmRpbmcpIHtcblx0XHRcdFx0XHRiaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdGJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKChkYXRhUmVjZWl2ZWRFdmVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRmblJlY2VpdmVkKGRhdGFSZWNlaXZlZEV2ZW50KTtcblx0XHRcdFx0XHRcdHRoaXMuX2JTZWFjaFRyaWdnZXJlZCA9IG9EYXRhLmlzU2VhY2hUcmlnZ2VyZWQgPyAhb0RhdGEuaXNTZWFjaFRyaWdnZXJlZCA6IHRoaXMuX2JTZWFjaFRyaWdnZXJlZDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKGJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmblNlYXJjaCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFNRENUYWJsZUxpbmtlZFRvRmlsdGVyQmFyID0gYU1EQ1RhYmxlcy5maWx0ZXIoKG9FbGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zSWQgPT09IG9FbGVtLmdldEZpbHRlcigpICYmIG9FbGVtLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGFNRENDaGFydHMgPSBhTm90Qm91bmRNRENDaGFydHMuZmlsdGVyKChvRWxlbSkgPT4ge1xuXHRcdFx0XHRcdGlmICgob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvRWxlbS5nZXRGaWx0ZXIoKSAmJiBvRWxlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCB8fCBhTURDQ2hhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFNRENUYWJsZUxpbmtlZFRvRmlsdGVyQmFyLmZvckVhY2goKG9NRENUYWJsZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvTURDVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0Zm5BdHRhY2hEYXRhRXZlbnRzKG51bGwsIHsgdGFibGU6IG9NRENUYWJsZSwgaXNTZWFjaFRyaWdnZXJlZDogdHJ1ZSB9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b01EQ1RhYmxlLmF0dGFjaEV2ZW50T25jZShcImJpbmRpbmdVcGRhdGVkXCIsIHsgdGFibGU6IG9NRENUYWJsZSwgaXNTZWFjaFRyaWdnZXJlZDogdHJ1ZSB9LCBmbkF0dGFjaERhdGFFdmVudHMsIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFNRENDaGFydHMuZm9yRWFjaCgob01EQ0NoYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRvTURDQ2hhcnQuaW5uZXJDaGFydEJvdW5kUHJvbWlzZVxuXHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KG9NRENDaGFydCkuZ2V0QmluZGluZyhcImRhdGFcIik7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdGZuQXR0YWNoRGF0YUV2ZW50cyhudWxsLCB7IGJpbmRpbmc6IG9CaW5kaW5nLCBpc1NlYWNoVHJpZ2dlcmVkOiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9NRENDaGFydC5hdHRhY2hFdmVudE9uY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcImJpbmRpbmdVcGRhdGVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmRpbmc6IG9CaW5kaW5nLCBpc1NlYWNoVHJpZ2dlcmVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkF0dGFjaERhdGFFdmVudHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBFcnJvcikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGlubmVyIGJvdW5kIGNoYXJ0XCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgJiYgb0JpbmRpbmdDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gRm9yY2UgdG8gbWVudGlvbiB3ZSBhcmUgZXhwZWN0aW5nIGRhdGFcblx0XHRcdFx0dGhpcy5iSGFzQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmJIYXNDb250ZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hdHRhY2hFdmVudE9uY2UoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5mb3JFYWNoKChvRWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImRhdGFSZXF1ZXN0ZWRcIiwgZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJkYXRhUmVjZWl2ZWRcIiwgZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcInNlYXJjaFwiLCBmblNlYXJjaCk7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImJpbmRpbmdVcGRhdGVkXCIsIGZuQXR0YWNoRGF0YUV2ZW50cyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkID0gZmFsc2U7XG5cdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMgPSBbXTtcblx0XHRcdFx0fSxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgbWFpbk9iamVjdEJpbmRpbmcgPSAob0JpbmRpbmdDb250ZXh0IGFzIGFueSkuZ2V0QmluZGluZygpO1xuXHRcdFx0XHRtYWluT2JqZWN0QmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0bWFpbk9iamVjdEJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZuUmVjZWl2ZWQpO1xuXHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG1haW5PYmplY3RCaW5kaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcblx0XHRcdGNvbnN0IGFDaGFydEluaXRpYWxpemVkUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XG5cdFx0XHR0aGlzLl9vVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG9FbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdEJpbmRpbmcgPSBvRWxlbWVudC5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvT2JqZWN0QmluZGluZykge1xuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIGFsbCBvYmplY3QgYmluZGluZyAobW9zdGx5IHVzZWQgb24gb2JqZWN0IHBhZ2VzKVxuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9PYmplY3RCaW5kaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhQmluZGluZ0tleXMgPSBPYmplY3Qua2V5cyhvRWxlbWVudC5tQmluZGluZ0luZm9zKTtcblx0XHRcdFx0XHRpZiAoYUJpbmRpbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFCaW5kaW5nS2V5cy5mb3JFYWNoKChzUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9FbGVtZW50Lm1CaW5kaW5nSW5mb3Nbc1Byb3BlcnR5TmFtZV0uYmluZGluZztcblx0XHRcdFx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gYWxsIGxpc3QgYmluZGluZywgZ29vZCBmb3IgYmFzaWMgdGFibGVzLCBwcm9ibGVtYXRpYyBmb3IgTURDLCBzZWUgYWJvdmVcblx0XHRcdFx0XHRcdFx0aWYgKG9MaXN0QmluZGluZyAmJiBvTGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvTGlzdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9MaXN0QmluZGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGlzIGlzIGRpcnR5IGJ1dCBNREMgVGFibGUgaGFzIGEgd2VpcmQgbG9hZGluZyBsaWZlY3ljbGVcblx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0aGlzLmJUYWJsZXNMb2FkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFx0YVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0b0VsZW1lbnRcblx0XHRcdFx0XHRcdFx0LmluaXRpYWxpemVkKClcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGFNRENUYWJsZXMucHVzaChvRWxlbWVudCk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbWVudC5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmbkF0dGFjaERhdGFFdmVudHMobnVsbCwgeyB0YWJsZTogb0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50T25jZShcImJpbmRpbmdVcGRhdGVkXCIsIHsgdGFibGU6IG9FbGVtZW50IH0sIGZuQXR0YWNoRGF0YUV2ZW50cyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGJvdW5kIHRhYmxlXCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRcdHRoaXMuYkNoYXJ0c0xvYWRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0XHRhQ2hhcnRJbml0aWFsaXplZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRvRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQuaW5pdGlhbGl6ZWQoKVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvRWxlbWVudC5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KG9FbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9CaW5kaW5nKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YU5vdEJvdW5kTURDQ2hhcnRzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IEVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBib3VuZCBjaGFydFwiLCBvRXJyb3IgYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9FbGVtZW50LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50KFwic2VhcmNoXCIsIGZuU2VhcmNoKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFByb21pc2UuYWxsKGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIlRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIG9uZSBvciBtdWx0aXBsZSB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ2hhcnRJbml0aWFsaXplZFByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0UHJvbWlzZS5hbGwoYUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcylcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmJDaGFydHNMb2FkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0XHRcdExvZy5pbmZvKFwiVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggb25lIG9yIG11bHRpcGxlIGNoYXJ0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iQ2hhcnRzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUGFnZVJlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9iSXNQYWdlUmVhZHk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRQYWdlUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZShzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogYW55LCBmbkZ1bmN0aW9uPzogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkLCBvRGF0YSwgZm5GdW5jdGlvbiBhcyBGdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBhbnksIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoc0V2ZW50SWQsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgZGV0YWNoRXZlbnQoc0V2ZW50SWQ6IHN0cmluZywgZm5GdW5jdGlvbjogRnVuY3Rpb24pIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KHNFdmVudElkLCBmbkZ1bmN0aW9uKTtcblx0fVxuXHRwcml2YXRlIHJlZ2lzdGVyQ29udGFpbmVyKG9Db250YWluZXI6IE1hbmFnZWRPYmplY3QpIHtcblx0XHR0aGlzLl9vQ29udGFpbmVyID0gb0NvbnRhaW5lcjtcblx0XHR0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVTaG93OiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYlNob3duID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdG9uQmVmb3JlSGlkZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyU2hvdzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fb0NvbnRhaW5lci5hZGRFdmVudERlbGVnYXRlKHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNDb250ZXh0RXhwZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpIHtcblx0XHRpZiAodGhpcy5wYWdlUmVhZHlUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucGFnZVJlYWR5VGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdH0sIDIwMCk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrUGFnZVJlYWR5KGJGcm9tTmF2OiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBmblVJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIFVJIGlzIG5vIGxvbmdlciBkaXJ0eVxuXHRcdFx0aWYgKCFDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHQoQ29yZSBhcyBDb3JlRXgpLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KCk7XG5cdFx0XHRcdH0sIDIwKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gSW4gY2FzZSBVSVVwZGF0ZSBkb2VzIG5vdCBnZXQgY2FsbGVkLCBjaGVjayBpZiBVSSBpcyBub3QgZGlydHkgYW5kIHRoZW4gY2FsbCBfY2hlY2tQYWdlUmVhZHlcblx0XHRjb25zdCBjaGVja1VJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdGlmIChDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJTaG93biAmJlxuXHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iQ2hhcnRzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0KCF0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgfHwgdGhpcy5iSGFzQ29udGV4dCkgLy8gRWl0aGVyIG5vIGNvbnRleHQgaXMgZXhwZWN0ZWQgb3IgdGhlcmUgaXMgb25lXG5cdFx0KSB7XG5cdFx0XHRpZiAodGhpcy5iRGF0YVJlY2VpdmVkID09PSB0cnVlICYmICFiRnJvbU5hdiAmJiAhdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoICYmIENvcmUuZ2V0VUlEaXJ0eSgpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHJlcXVlc3RlZCBkYXRhIHdlIGdldCBub3RpZmllZCBhcyBzb29uIGFzIHRoZSBkYXRhIGFycml2ZWQsIHNvIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJpbmcgdGlja1xuXHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgQ29yZS5nZXRVSURpcnR5KCkpIHx8XG5cdFx0XHRcdHRoaXMuX25iV2FpdHMgIT09IDAgfHxcblx0XHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSA+IDAgfHxcblx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KS5hdHRhY2hFdmVudChcIlVJVXBkYXRlZFwiLCBmblVJVXBkYXRlZCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tVSVVwZGF0ZWQsIDUwMCk7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugd2UncmUgbm90IHdhaXRpbmcgZm9yIGFueSBkYXRhIChuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2FkZWQpXG5cdFx0XHRcdC8vIGp1c3Qgd2FpdCBmb3IgYSBmcmFtZSB0byBmaXJlIHRoZSBldmVudC5cblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
@@ -1,16 +1,16 @@
1
1
  import Log from "sap/base/Log";
2
- import AppComponent from "sap/fe/core/AppComponent";
2
+ import type AppComponent from "sap/fe/core/AppComponent";
3
3
  import TemplatedViewServiceFactory from "sap/fe/core/services/TemplatedViewServiceFactory";
4
- import Event from "sap/ui/base/Event";
4
+ import type Event from "sap/ui/base/Event";
5
5
  import EventProvider from "sap/ui/base/EventProvider";
6
- import ManagedObject from "sap/ui/base/ManagedObject";
6
+ import type ManagedObject from "sap/ui/base/ManagedObject";
7
7
  import Component from "sap/ui/core/Component";
8
8
  import Core from "sap/ui/core/Core";
9
9
  import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
10
10
  import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
11
- import View from "sap/ui/core/mvc/View";
12
- import Context from "sap/ui/model/Context";
13
- import { CoreEx } from "types/extension_types";
11
+ import type View from "sap/ui/core/mvc/View";
12
+ import type Context from "sap/ui/model/Context";
13
+ import type { CoreEx } from "types/extension_types";
14
14
  import CommonUtils from "../CommonUtils";
15
15
  import { defineUI5Class, extensible, finalExtension, methodOverride, privateExtension, publicExtension } from "../helpers/ClassSupport";
16
16
 
@@ -31,6 +31,7 @@ class PageReadyControllerExtension extends ControllerExtension {
31
31
  private bHasContext!: boolean;
32
32
  private bDataReceived: boolean | undefined;
33
33
  private bTablesLoaded: boolean | undefined;
34
+ private bChartsLoaded: boolean | undefined;
34
35
  private pageReadyTimer: NodeJS.Timeout | undefined;
35
36
 
36
37
  @methodOverride()
@@ -75,7 +76,9 @@ class PageReadyControllerExtension extends ControllerExtension {
75
76
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
76
77
  // @ts-ignore
77
78
  delete this._oAppComponent;
78
- this._oContainer && this._oContainer.removeEventDelegate(this._fnContainerDelegate);
79
+ if (this._oContainer) {
80
+ this._oContainer.removeEventDelegate(this._fnContainerDelegate);
81
+ }
79
82
  }
80
83
 
81
84
  @publicExtension()
@@ -104,7 +107,8 @@ class PageReadyControllerExtension extends ControllerExtension {
104
107
  if (!this._bAfterBindingAlreadyApplied) {
105
108
  this._bAfterBindingAlreadyApplied = true;
106
109
  let aBoundElements: any[] = [];
107
- const aNotBoundMDCTables: any[] = [];
110
+ const aMDCTables: any[] = [];
111
+ const aNotBoundMDCCharts: any[] = [];
108
112
  let iRequested = 0;
109
113
  let iReceived = 0;
110
114
  const fnRequested = (oEvent: Event) => {
@@ -131,40 +135,61 @@ class PageReadyControllerExtension extends ControllerExtension {
131
135
  this.checkPageReadyDebounced();
132
136
  }
133
137
  };
138
+ const fnAttachDataEvents = (event: Event | null, oData: any) => {
139
+ const binding = oData.binding ? oData.binding : oData.table.getRowBinding();
140
+ if (binding) {
141
+ binding.attachDataRequested(fnRequested);
142
+ binding.attachDataReceived((dataReceivedEvent: any) => {
143
+ fnReceived(dataReceivedEvent);
144
+ this._bSeachTriggered = oData.isSeachTriggered ? !oData.isSeachTriggered : this._bSeachTriggered;
145
+ });
146
+ aBoundElements.push(binding);
147
+ }
148
+ };
149
+
134
150
  const fnSearch = (oEvent: Event) => {
135
- const aMDCTables = aNotBoundMDCTables.filter((oElem) => {
151
+ const aMDCTableLinkedToFilterBar = aMDCTables.filter((oElem) => {
152
+ if ((oEvent.getSource() as any).sId === oElem.getFilter() && oElem.getVisible()) {
153
+ return true;
154
+ }
155
+ return false;
156
+ });
157
+ const aMDCCharts = aNotBoundMDCCharts.filter((oElem) => {
136
158
  if ((oEvent.getSource() as any).sId === oElem.getFilter() && oElem.getVisible()) {
137
159
  return true;
138
160
  }
139
161
  return false;
140
162
  });
141
- if (aMDCTables.length > 0) {
163
+ if (aMDCTableLinkedToFilterBar.length > 0 || aMDCCharts.length > 0) {
142
164
  this._bSeachTriggered = true;
143
165
  }
144
- aMDCTables.forEach((oMDCTable: any) => {
145
- let oRowBinding = oMDCTable.getRowBinding();
146
- const fnAttachDataEvents = () => {
147
- oRowBinding.attachDataRequested(fnRequested);
148
- oRowBinding.attachDataReceived((oEvent: any) => {
149
- fnReceived(oEvent);
150
- this._bSeachTriggered = false;
151
- });
152
- aBoundElements.push(oRowBinding);
153
- };
166
+ aMDCTableLinkedToFilterBar.forEach((oMDCTable: any) => {
167
+ const oRowBinding = oMDCTable.getRowBinding();
154
168
  if (oRowBinding) {
155
- fnAttachDataEvents();
169
+ fnAttachDataEvents(null, { table: oMDCTable, isSeachTriggered: true });
156
170
  } else {
157
- oMDCTable.attachEventOnce(
158
- "bindingUpdated",
159
- null,
160
- () => {
161
- oRowBinding = oMDCTable.getRowBinding();
162
- fnAttachDataEvents();
163
- },
164
- null
165
- );
171
+ oMDCTable.attachEventOnce("bindingUpdated", { table: oMDCTable, isSeachTriggered: true }, fnAttachDataEvents, null);
166
172
  }
167
173
  });
174
+ aMDCCharts.forEach((oMDCChart: any) => {
175
+ oMDCChart.innerChartBoundPromise
176
+ .then(() => {
177
+ const oBinding = oMDCChart.getControlDelegate().getInnerChart(oMDCChart).getBinding("data");
178
+ if (oBinding) {
179
+ fnAttachDataEvents(null, { binding: oBinding, isSeachTriggered: true });
180
+ } else {
181
+ oMDCChart.attachEventOnce(
182
+ "bindingUpdated",
183
+ { binding: oBinding, isSeachTriggered: true },
184
+ fnAttachDataEvents,
185
+ null
186
+ );
187
+ }
188
+ })
189
+ .catch(function (oError: Error) {
190
+ Log.error("Cannot find a inner bound chart", oError as any);
191
+ });
192
+ });
168
193
  };
169
194
  if (this.isContextExpected() && oBindingContext === undefined) {
170
195
  // Force to mention we are expecting data
@@ -182,6 +207,7 @@ class PageReadyControllerExtension extends ControllerExtension {
182
207
  oElement.detachEvent("dataRequested", fnRequested);
183
208
  oElement.detachEvent("dataReceived", fnReceived);
184
209
  oElement.detachEvent("search", fnSearch);
210
+ oElement.detachEvent("bindingUpdated", fnAttachDataEvents);
185
211
  });
186
212
  this._bAfterBindingAlreadyApplied = false;
187
213
  aBoundElements = [];
@@ -196,6 +222,7 @@ class PageReadyControllerExtension extends ControllerExtension {
196
222
  }
197
223
 
198
224
  const aTableInitializedPromises: Promise<any>[] = [];
225
+ const aChartInitializedPromises: Promise<any>[] = [];
199
226
  this._oView.findAggregatedObjects(true, (oElement: any) => {
200
227
  const oObjectBinding = oElement.getObjectBinding();
201
228
  if (oObjectBinding) {
@@ -225,19 +252,39 @@ class PageReadyControllerExtension extends ControllerExtension {
225
252
  oElement
226
253
  .initialized()
227
254
  .then(() => {
255
+ aMDCTables.push(oElement);
228
256
  const oRowBinding = oElement.getRowBinding();
229
257
  if (oRowBinding) {
230
- oRowBinding.attachDataRequested(fnRequested);
231
- oRowBinding.attachDataReceived(fnReceived);
232
- aBoundElements.push(oRowBinding);
258
+ fnAttachDataEvents(null, { table: oElement });
233
259
  } else {
234
- aNotBoundMDCTables.push(oElement);
260
+ oElement.attachEventOnce("bindingUpdated", { table: oElement }, fnAttachDataEvents);
235
261
  }
236
262
  })
237
263
  .catch(function (oError: Error) {
238
264
  Log.error("Cannot find a bound table", oError as any);
239
265
  })
240
266
  );
267
+ } else if (oElement.isA("sap.ui.mdc.Chart")) {
268
+ this.bChartsLoaded = false;
269
+ // access binding only after table is bound
270
+ aChartInitializedPromises.push(
271
+ oElement
272
+ .initialized()
273
+ .then(() => {
274
+ const oInnerChart = oElement.getControlDelegate().getInnerChart(oElement);
275
+ const oBinding = oInnerChart && oInnerChart.getBinding("data");
276
+ if (oBinding) {
277
+ oBinding.attachDataRequested(fnRequested);
278
+ oBinding.attachDataReceived(fnReceived);
279
+ aBoundElements.push(oBinding);
280
+ } else {
281
+ aNotBoundMDCCharts.push(oElement);
282
+ }
283
+ })
284
+ .catch(function (oError: Error) {
285
+ Log.error("Cannot find a bound chart", oError as any);
286
+ })
287
+ );
241
288
  } else if (oElement.isA("sap.fe.core.controls.FilterBar")) {
242
289
  oElement.attachEvent("search", fnSearch);
243
290
  aBoundElements.push(oElement);
@@ -255,6 +302,18 @@ class PageReadyControllerExtension extends ControllerExtension {
255
302
  this.checkPageReadyDebounced();
256
303
  });
257
304
  }
305
+ if (aChartInitializedPromises.length > 0) {
306
+ Promise.all(aChartInitializedPromises)
307
+ .then(() => {
308
+ this.bChartsLoaded = true;
309
+ this.checkPageReadyDebounced();
310
+ })
311
+ .catch((oError) => {
312
+ Log.info("There was an error with one or multiple charts", oError);
313
+ this.bChartsLoaded = true;
314
+ this.checkPageReadyDebounced();
315
+ });
316
+ }
258
317
  }
259
318
  }
260
319
 
@@ -363,6 +422,7 @@ class PageReadyControllerExtension extends ControllerExtension {
363
422
  this.bShown &&
364
423
  this.bDataReceived !== false &&
365
424
  this.bTablesLoaded !== false &&
425
+ this.bChartsLoaded !== false &&
366
426
  (!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
367
427
  ) {
368
428
  if (this.bDataReceived === true && !bFromNav && !this._bWaitingForRefresh && Core.getUIDirty()) {