@sapui5/sap.fe.core 1.99.0 → 1.100.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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -1,277 +1,281 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(
7
- ["sap/ui/base/Object", "sap/fe/core/CommonUtils", "sap/base/Log", "sap/ui/core/Component", "sap/ui/model/json/JSONModel"],
8
- function(BaseObject, CommonUtils, Log, Component, JSONModel) {
9
- "use strict";
10
-
11
- /**
12
- * @class Common Extension API for all pages of SAP Fiori elements for OData V4.
13
- * @alias sap.fe.core.ExtensionAPI
14
- * @public
15
- * @hideconstructor
16
- * @extends sap.ui.base.Object
17
- * @since 1.79.0
18
- */
19
-
20
- var extensionAPI = BaseObject.extend("sap.fe.core.ExtensionAPI", {
21
- metadata: {
22
- /**
23
- * Properties.
24
- */
25
- associations: {
26
- /**
27
- * A controller extension offering hooks into the edit flow of the application.
28
- * @public
29
- */
30
- editFlow: {
31
- type: "sap.fe.core.controllerextensions.EditFlow",
32
- multiple: false
33
- },
34
- /**
35
- * A controller extension offering hooks into the routing flow of the application.
36
- * @public
37
- */
38
- routing: {
39
- type: "sap.fe.core.controllerextensions.Routing",
40
- multiple: false
41
- }
42
- }
43
- },
44
-
45
- constructor: function(oController, sId) {
46
- this._controller = oController;
47
- this._view = oController.getView();
48
- this.extension = this._controller.extension;
49
- this.editFlow = this._controller.editFlow;
50
- this.routing = this._controller.routing;
51
- this._routing = this._controller._routing;
52
- this.intentBasedNavigation._controller = this._controller;
53
- this._prefix = sId;
54
- },
55
- destroy: function() {
56
- delete this._controller;
57
- delete this._view;
58
- delete this.editFlow._controller;
59
- delete this.intentBasedNavigation._controller;
60
- },
61
-
62
- /**
63
- * @private
64
- * @name sap.fe.core.ExtensionAPI.getMetadata
65
- * @function
66
- */
67
- /**
68
- * @private
69
- * @name sap.fe.core.ExtensionAPI.extend
70
- * @function
71
- */
72
-
73
- /**
74
- * Access any control by ID.
75
- *
76
- * @alias sap.fe.core.ExtensionAPI#byId
77
- * @param {string} sId ID of the control without the view prefix. Either the ID prefixed by SAP Fiori elements
78
- * (for example with the section) or the control ID only. The latter works only for an extension running in
79
- * the same context (like in the same section). You can use the prefix for SAP Fiori elements to also access other controls located in different sections.
80
- * @returns {sap.ui.core.Control} The requested control, if found in the view.
81
- *
82
- * @private
83
- */
84
- byId: function(sId) {
85
- var oControl = this._view.byId(sId);
86
-
87
- if (!oControl && this._prefix) {
88
- // give it a try with the prefix
89
- oControl = this._view.byId(this._prefix + "--" + sId);
90
- }
91
-
92
- if (oControl) {
93
- return oControl;
94
- }
95
- },
96
-
97
- /**
98
- * Get access to models managed by SAP Fiori elements.<br>
99
- * The following models can be accessed:
100
- * <ul>
101
- * <li>undefined: the undefined model returns the SAPUI5 OData V4 model bound to this page</li>
102
- * <li>i18n / further data models defined in the manifest</li>
103
- * <li>ui: returns a SAPUI5 JSON model containing UI information.
104
- * Only the following properties are public and supported:
105
- * <ul>
106
- * <li>editMode: contains either 'Editable' or 'Display'</li>
107
- * </ul>
108
- * </li>
109
- * </ul>.
110
- *
111
- * @alias sap.fe.core.ExtensionAPI#getModel
112
- * @param {string} sModelName Name of the model
113
- * @returns {sap.ui.model.Model} The required model
114
- *
115
- * @public
116
- */
117
- getModel: function(sModelName) {
118
- var oAppComponent;
119
-
120
- if (sModelName && sModelName !== "ui") {
121
- oAppComponent = CommonUtils.getAppComponent(this._view);
122
- if (!oAppComponent.getManifestEntry("sap.ui5").models[sModelName]) {
123
- // don't allow access to our internal models
124
- return null;
125
- }
126
- }
127
-
128
- return this._view.getModel(sModelName);
129
- },
130
-
131
- /**
132
- * Add any control as a dependent control to this SAP Fiori elements page.
133
- *
134
- * @alias sap.fe.core.ExtensionAPI#addDependent
135
- * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
136
- *
137
- * @public
138
- */
139
- addDependent: function(oControl) {
140
- this._view.addDependent(oControl);
141
- },
142
-
143
- /**
144
- * Remove a dependent control from this SAP Fiori elements page.
145
- *
146
- * @alias sap.fe.core.ExtensionAPI#removeDependent
147
- * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
148
- *
149
- * @public
150
- */
151
- removeDependent: function(oControl) {
152
- this._view.removeDependent(oControl);
153
- },
154
-
155
- /**
156
- * Navigate to another target.
157
- *
158
- * @alias sap.fe.core.ExtensionAPI#navigateToTarget
159
- * @param {string} sTarget Name of the target route
160
- * @param {sap.ui.model.Context} [oContext] Context instance
161
- * @returns {Promise} Promise that is resolved when the navigation is finalized
162
- *
163
- * @public
164
- */
165
- navigateToTarget: function(sTarget, oContext) {
166
- return this._controller._routing.navigateToTarget(oContext, sTarget);
167
- },
168
-
169
- /**
170
- * Load a fragment and go through the template preprocessor with the current page context.
171
- *
172
- * @alias sap.fe.core.ExtensionAPI#loadFragment
173
- * @param {object} mSettings The settings object
174
- * @param {string} mSettings.id The ID of the fragment itself
175
- * @param {string} mSettings.name The name of the fragment to be loaded
176
- * @param {object} mSettings.controller The controller to be attached to the fragment
177
- * @param {string} mSettings.contextPath The contextPath to be used for the templating process
178
- * @param {sap.ui.model.Context} mSettings.initialBindingContext The initial binding context
179
- * @returns {Promise<Element[]|sap.ui.core.Element[]>} The fragment definition
180
- *
181
- * @public
182
- */
183
- loadFragment: function(mSettings) {
184
- var that = this;
185
- var oTemplateComponent = Component.getOwnerComponentFor(this._view);
186
- var oPageModel = this._view.getModel("_pageModel");
187
- var oMetaModel = this.getModel().getMetaModel();
188
- var mViewData = oTemplateComponent.getViewData();
189
- var oViewDataModel = new JSONModel(mViewData),
190
- oPreprocessorSettings = {
191
- bindingContexts: {
192
- "contextPath": oMetaModel.createBindingContext(
193
- mSettings.contextPath || "/" + oTemplateComponent.getEntitySet()
194
- ),
195
- converterContext: oPageModel.createBindingContext("/", null, { noResolve: true }),
196
- viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
197
- },
198
- models: {
199
- "contextPath": oMetaModel,
200
- converterContext: oPageModel,
201
- metaModel: oMetaModel,
202
- viewData: oViewDataModel
203
- },
204
- appComponent: CommonUtils.getAppComponent(this._view)
205
- };
206
- var oTemplatePromise = CommonUtils.templateControlFragment(mSettings.name, oPreprocessorSettings, {
207
- controller: mSettings.controller || this,
208
- isXML: false,
209
- id: mSettings.id
210
- });
211
- oTemplatePromise
212
- .then(function(oFragment) {
213
- if (mSettings.initialBindingContext !== undefined) {
214
- oFragment.setBindingContext(mSettings.initialBindingContext);
215
- }
216
- that.addDependent(oFragment);
217
- })
218
- .catch(function(oError) {
219
- Log.error(oError);
220
- });
221
- return oTemplatePromise;
222
- },
223
-
224
- /**
225
- * Triggers an update of the app state.
226
- * Should be called if the state of a control, or any other state-relevant information, was changed.
227
- *
228
- * @alias sap.fe.core.ExtensionAPI#updateAppState
229
- * @returns {Promise} A promise that resolves with the new app state object.
230
- *
231
- * @public
232
- */
233
- updateAppState: function() {
234
- if (
235
- !this._controller
236
- .getAppComponent()
237
- .getModel("internal")
238
- .getProperty("/uiAdaptation")
239
- ) {
240
- return this._controller
241
- .getAppComponent()
242
- .getAppStateHandler()
243
- .createAppState();
244
- }
245
- },
246
-
247
- /**
248
- * ExtensionAPI for intent-based navigation
249
- * @namespace sap.fe.core.ExtensionAPI.intentBasedNavigation
250
- * @public
251
- * @since 1.86.0
252
- */
253
- intentBasedNavigation: {
254
- /**
255
- * Navigates to an intent defined by an outbound definition in the manifest.
256
- *
257
- * @static
258
- * @alias sap.fe.core.ExtensionAPI.intentBasedNavigation#navigateOutbound
259
- * @param {string} sOutbound Identifier to locate the outbound definition in the manifest.
260
- * This provides the semantic object and action for the intent-based navigation.
261
- * Additionally, the outbound definition can be used to provide parameters for intent-based navigation.
262
- * See {@link topic:be0cf40f61184b358b5faedaec98b2da Descriptor for Applications, Components, and Libraries} for more information.
263
- * @param {object} mNavigationParameters Optional map containing key/value pairs to be passed to the intent.
264
- * If mNavigationParameters are provided, the parameters provided in the outbound definition of the manifest are ignored.
265
- * @public
266
- */
267
- navigateOutbound: function(sOutbound, mNavigationParameters) {
268
- var oInternalModelContext = this._controller.getView().getBindingContext("internal");
269
- oInternalModelContext.setProperty("externalNavigationContext", { "page": false });
270
- this._controller._intentBasedNavigation.navigateOutbound(sOutbound, mNavigationParameters);
271
- }
272
- }
273
- });
274
-
275
- return extensionAPI;
276
- }
277
- );
5
+ sap.ui.define(["sap/ui/base/Object", "sap/fe/core/CommonUtils", "sap/base/Log", "sap/ui/core/Component", "sap/ui/model/json/JSONModel", "sap/ui/base/Metadata", "./helpers/ClassSupport"], function (BaseObject, CommonUtils, Log, Component, JSONModel, Metadata, ClassSupport) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3;
9
+
10
+ var UI5Class = ClassSupport.UI5Class;
11
+ var Property = ClassSupport.Property;
12
+
13
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
14
+
15
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
16
+
17
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
18
+
19
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
20
+
21
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
22
+
23
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
24
+
25
+ /**
26
+ * Common Extension API for all pages of SAP Fiori elements for OData V4.
27
+ * @alias sap.fe.core.ExtensionAPI
28
+ * @public
29
+ * @hideconstructor
30
+ * @extends sap.ui.base.Object
31
+ * @since 1.79.0
32
+ */
33
+ var ExtensionAPI = (_dec = UI5Class("sap.fe.core.ExtensionAPI", Metadata), _dec2 = Property({
34
+ type: "sap/fe/core/controllerextensions/EditFlow"
35
+ }), _dec3 = Property({
36
+ type: "sap/fe/core/controllerextensions/Routing"
37
+ }), _dec4 = Property({
38
+ type: "sap/fe/core/controllerextensions/IntentBasedNavigation"
39
+ }), _dec(_class = (_class2 = /*#__PURE__*/function (_BaseObject) {
40
+ _inherits(ExtensionAPI, _BaseObject);
41
+
42
+ /**
43
+ * A controller extension offering hooks into the edit flow of the application.
44
+ * @public
45
+ */
46
+
47
+ /**
48
+ * A controller extension offering hooks into the routing flow of the application.
49
+ * @public
50
+ */
51
+
52
+ /**
53
+ * ExtensionAPI for intent-based navigation
54
+ * @public
55
+ */
56
+ function ExtensionAPI(oController, sId) {
57
+ var _this;
58
+
59
+ _this = _BaseObject.call(this) || this;
60
+
61
+ _initializerDefineProperty(_this, "editFlow", _descriptor, _assertThisInitialized(_this));
62
+
63
+ _initializerDefineProperty(_this, "routing", _descriptor2, _assertThisInitialized(_this));
64
+
65
+ _initializerDefineProperty(_this, "intentBasedNavigation", _descriptor3, _assertThisInitialized(_this));
66
+
67
+ _this._controller = oController;
68
+ _this._view = oController.getView();
69
+ _this.extension = _this._controller.extension;
70
+ _this.editFlow = _this._controller.editFlow;
71
+ _this.routing = _this._controller.routing;
72
+ _this._routing = _this._controller._routing;
73
+ _this.intentBasedNavigation = _this._controller.intentBasedNavigation;
74
+ _this._prefix = sId;
75
+ return _this;
76
+ }
77
+
78
+ var _proto = ExtensionAPI.prototype;
79
+
80
+ _proto.destroy = function destroy() {// delete this._controller;
81
+ // delete this._view;
82
+ // delete this.editFlow._controller;
83
+ // delete this.intentBasedNavigation._controller;
84
+ }
85
+ /**
86
+ * Access any control by ID.
87
+ *
88
+ * @alias sap.fe.core.ExtensionAPI#byId
89
+ * @param {string} sId ID of the control without the view prefix. Either the ID prefixed by SAP Fiori elements
90
+ * (for example with the section) or the control ID only. The latter works only for an extension running in
91
+ * the same context (like in the same section). You can use the prefix for SAP Fiori elements to also access other controls located in different sections.
92
+ * @returns {sap.ui.core.Control} The requested control, if found in the view.
93
+ *
94
+ * @private
95
+ */
96
+ ;
97
+
98
+ _proto.byId = function byId(sId) {
99
+ var oControl = this._view.byId(sId);
100
+
101
+ if (!oControl && this._prefix) {
102
+ // give it a try with the prefix
103
+ oControl = this._view.byId(this._prefix + "--" + sId);
104
+ }
105
+
106
+ if (oControl) {
107
+ return oControl;
108
+ }
109
+ }
110
+ /**
111
+ * Get access to models managed by SAP Fiori elements.<br>
112
+ * The following models can be accessed:
113
+ * <ul>
114
+ * <li>undefined: the undefined model returns the SAPUI5 OData V4 model bound to this page</li>
115
+ * <li>i18n / further data models defined in the manifest</li>
116
+ * <li>ui: returns a SAPUI5 JSON model containing UI information.
117
+ * Only the following properties are public and supported:
118
+ * <ul>
119
+ * <li>editMode: contains either 'Editable' or 'Display'</li>
120
+ * </ul>
121
+ * </li>
122
+ * </ul>.
123
+ *
124
+ * @alias sap.fe.core.ExtensionAPI#getModel
125
+ * @param {string} sModelName Name of the model
126
+ * @returns {sap.ui.model.Model} The required model
127
+ *
128
+ * @public
129
+ */
130
+ ;
131
+
132
+ _proto.getModel = function getModel(sModelName) {
133
+ var oAppComponent;
134
+
135
+ if (sModelName && sModelName !== "ui") {
136
+ oAppComponent = CommonUtils.getAppComponent(this._view);
137
+
138
+ if (!oAppComponent.getManifestEntry("sap.ui5").models[sModelName]) {
139
+ // don't allow access to our internal models
140
+ return undefined;
141
+ }
142
+ }
143
+
144
+ return this._view.getModel(sModelName);
145
+ }
146
+ /**
147
+ * Add any control as a dependent control to this SAP Fiori elements page.
148
+ *
149
+ * @alias sap.fe.core.ExtensionAPI#addDependent
150
+ * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
151
+ *
152
+ * @public
153
+ */
154
+ ;
155
+
156
+ _proto.addDependent = function addDependent(oControl) {
157
+ this._view.addDependent(oControl);
158
+ }
159
+ /**
160
+ * Remove a dependent control from this SAP Fiori elements page.
161
+ *
162
+ * @alias sap.fe.core.ExtensionAPI#removeDependent
163
+ * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
164
+ *
165
+ * @public
166
+ */
167
+ ;
168
+
169
+ _proto.removeDependent = function removeDependent(oControl) {
170
+ this._view.removeDependent(oControl);
171
+ }
172
+ /**
173
+ * Navigate to another target.
174
+ *
175
+ * @alias sap.fe.core.ExtensionAPI#navigateToTarget
176
+ * @param {string} sTarget Name of the target route
177
+ * @param {sap.ui.model.Context} [oContext] Context instance
178
+ * @returns {void}
179
+ * @public
180
+ */
181
+ ;
182
+
183
+ _proto.navigateToTarget = function navigateToTarget(sTarget, oContext) {
184
+ return this._controller._routing.navigateToTarget(oContext, sTarget);
185
+ }
186
+ /**
187
+ * Load a fragment and go through the template preprocessor with the current page context.
188
+ *
189
+ * @alias sap.fe.core.ExtensionAPI#loadFragment
190
+ * @param {object} mSettings The settings object
191
+ * @param {string} mSettings.id The ID of the fragment itself
192
+ * @param {string} mSettings.name The name of the fragment to be loaded
193
+ * @param {object} mSettings.controller The controller to be attached to the fragment
194
+ * @param {string} mSettings.contextPath The contextPath to be used for the templating process
195
+ * @param {sap.ui.model.Context} mSettings.initialBindingContext The initial binding context
196
+ * @returns {Promise<Element[]|sap.ui.core.Element[]>} The fragment definition
197
+ *
198
+ * @public
199
+ */
200
+ ;
201
+
202
+ _proto.loadFragment = function loadFragment(mSettings) {
203
+ var _this$getModel,
204
+ _this2 = this;
205
+
206
+ var oTemplateComponent = Component.getOwnerComponentFor(this._view);
207
+
208
+ var oPageModel = this._view.getModel("_pageModel");
209
+
210
+ var oMetaModel = (_this$getModel = this.getModel()) === null || _this$getModel === void 0 ? void 0 : _this$getModel.getMetaModel();
211
+ var mViewData = oTemplateComponent.getViewData();
212
+ var oViewDataModel = new JSONModel(mViewData),
213
+ oPreprocessorSettings = {
214
+ bindingContexts: {
215
+ "contextPath": oMetaModel === null || oMetaModel === void 0 ? void 0 : oMetaModel.createBindingContext(mSettings.contextPath || "/" + oTemplateComponent.getEntitySet()),
216
+ converterContext: oPageModel.createBindingContext("/", undefined, {
217
+ noResolve: true
218
+ }),
219
+ viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
220
+ },
221
+ models: {
222
+ "contextPath": oMetaModel,
223
+ converterContext: oPageModel,
224
+ metaModel: oMetaModel,
225
+ viewData: oViewDataModel
226
+ },
227
+ appComponent: CommonUtils.getAppComponent(this._view)
228
+ };
229
+ var oTemplatePromise = CommonUtils.templateControlFragment(mSettings.name, oPreprocessorSettings, {
230
+ controller: mSettings.controller || this,
231
+ isXML: false,
232
+ id: mSettings.id
233
+ });
234
+ oTemplatePromise.then(function (oFragment) {
235
+ if (mSettings.initialBindingContext !== undefined) {
236
+ oFragment.setBindingContext(mSettings.initialBindingContext);
237
+ }
238
+
239
+ _this2.addDependent(oFragment);
240
+ }).catch(function (oError) {
241
+ Log.error(oError);
242
+ });
243
+ return oTemplatePromise;
244
+ }
245
+ /**
246
+ * Triggers an update of the app state.
247
+ * Should be called if the state of a control, or any other state-relevant information, was changed.
248
+ *
249
+ * @alias sap.fe.core.ExtensionAPI#updateAppState
250
+ * @returns {Promise} A promise that resolves with the new app state object.
251
+ *
252
+ * @public
253
+ */
254
+ ;
255
+
256
+ _proto.updateAppState = function updateAppState() {
257
+ if (!this._controller.getAppComponent().getModel("internal").getProperty("/uiAdaptation")) {
258
+ return this._controller.getAppComponent().getAppStateHandler().createAppState();
259
+ }
260
+ };
261
+
262
+ return ExtensionAPI;
263
+ }(BaseObject), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "editFlow", [_dec2], {
264
+ configurable: true,
265
+ enumerable: true,
266
+ writable: true,
267
+ initializer: null
268
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "routing", [_dec3], {
269
+ configurable: true,
270
+ enumerable: true,
271
+ writable: true,
272
+ initializer: null
273
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "intentBasedNavigation", [_dec4], {
274
+ configurable: true,
275
+ enumerable: true,
276
+ writable: true,
277
+ initializer: null
278
+ })), _class2)) || _class);
279
+ return ExtensionAPI;
280
+ }, false);
281
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJVSTVDbGFzcyIsIk1ldGFkYXRhIiwiUHJvcGVydHkiLCJ0eXBlIiwib0NvbnRyb2xsZXIiLCJzSWQiLCJfY29udHJvbGxlciIsIl92aWV3IiwiZ2V0VmlldyIsImV4dGVuc2lvbiIsImVkaXRGbG93Iiwicm91dGluZyIsIl9yb3V0aW5nIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiX3ByZWZpeCIsImRlc3Ryb3kiLCJieUlkIiwib0NvbnRyb2wiLCJnZXRNb2RlbCIsInNNb2RlbE5hbWUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9kZWxzIiwidW5kZWZpbmVkIiwiYWRkRGVwZW5kZW50IiwicmVtb3ZlRGVwZW5kZW50IiwibmF2aWdhdGVUb1RhcmdldCIsInNUYXJnZXQiLCJvQ29udGV4dCIsImxvYWRGcmFnbWVudCIsIm1TZXR0aW5ncyIsIm9UZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwib1BhZ2VNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwiSlNPTk1vZGVsIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1ldGFNb2RlbCIsImFwcENvbXBvbmVudCIsIm9UZW1wbGF0ZVByb21pc2UiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsIm5hbWUiLCJjb250cm9sbGVyIiwiaXNYTUwiLCJpZCIsInRoZW4iLCJvRnJhZ21lbnQiLCJpbml0aWFsQmluZGluZ0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ1cGRhdGVBcHBTdGF0ZSIsImdldFByb3BlcnR5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiY3JlYXRlQXBwU3RhdGUiLCJCYXNlT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxZLFdBRExDLFFBQVEsQ0FBQywwQkFBRCxFQUE2QkMsUUFBN0IsQyxVQU1QQyxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBTVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFNUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQzs7O0FBaEJUO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBO0FBVUMsMEJBQVlDLFdBQVosRUFBeUNDLEdBQXpDLEVBQXVEO0FBQUE7O0FBQ3REOztBQURzRDs7QUFBQTs7QUFBQTs7QUFFdEQsWUFBS0MsV0FBTCxHQUFtQkYsV0FBbkI7QUFDQSxZQUFLRyxLQUFMLEdBQWFILFdBQVcsQ0FBQ0ksT0FBWixFQUFiO0FBQ0EsWUFBS0MsU0FBTCxHQUFrQixNQUFLSCxXQUFOLENBQTBCRyxTQUEzQztBQUNBLFlBQUtDLFFBQUwsR0FBZ0IsTUFBS0osV0FBTCxDQUFpQkksUUFBakM7QUFDQSxZQUFLQyxPQUFMLEdBQWUsTUFBS0wsV0FBTCxDQUFpQkssT0FBaEM7QUFDQSxZQUFLQyxRQUFMLEdBQWdCLE1BQUtOLFdBQUwsQ0FBaUJNLFFBQWpDO0FBQ0EsWUFBS0MscUJBQUwsR0FBNkIsTUFBS1AsV0FBTCxDQUFpQk8scUJBQTlDO0FBQ0EsWUFBS0MsT0FBTCxHQUFlVCxHQUFmO0FBVHNE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QXNCO0FBQzVCQyxRQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVUYsTUFBVjtBQUNBLE9BVEY7QUFVQSxhQUFPWCxnQkFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ2MsYyxHQUFBLDBCQUE0QztBQUMzQyxVQUNDLENBQUMsS0FBSzdELFdBQUwsQ0FDQ2dCLGVBREQsR0FFQ0osUUFGRCxDQUVVLFVBRlYsRUFHQ2tELFdBSEQsQ0FHYSxlQUhiLENBREYsRUFLRTtBQUNELGVBQU8sS0FBSzlELFdBQUwsQ0FDTGdCLGVBREssR0FFTCtDLGtCQUZLLEdBR0xDLGNBSEssRUFBUDtBQUlBO0FBQ0QsSzs7O0lBMU55QkMsVTs7Ozs7Ozs7Ozs7Ozs7OztTQTZOWnhFLFkiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eSwgVUk1Q2xhc3MgfSBmcm9tIFwiLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1JvdXRpbmdcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5cbi8qKlxuICogQ29tbW9uIEV4dGVuc2lvbiBBUEkgZm9yIGFsbCBwYWdlcyBvZiBTQVAgRmlvcmkgZWxlbWVudHMgZm9yIE9EYXRhIFY0LlxuICogQGFsaWFzIHNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgc2FwLnVpLmJhc2UuT2JqZWN0XG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVwiLCBNZXRhZGF0YSlcbmNsYXNzIEV4dGVuc2lvbkFQSSBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSBlZGl0IGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCIgfSlcblx0ZWRpdEZsb3c6IEVkaXRGbG93O1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSByb3V0aW5nIGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1JvdXRpbmdcIiB9KVxuXHRyb3V0aW5nOiBSb3V0aW5nO1xuXHQvKipcblx0ICogRXh0ZW5zaW9uQVBJIGZvciBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiIH0pXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbjogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdHByaXZhdGUgX2NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRwcml2YXRlIF92aWV3OiBWaWV3O1xuXHRwcml2YXRlIF9yb3V0aW5nOiBJbnRlcm5hbFJvdXRpbmc7XG5cdHByaXZhdGUgX3ByZWZpeD86IHN0cmluZztcblx0cHJpdmF0ZSBleHRlbnNpb246IGFueTtcblxuXHRjb25zdHJ1Y3RvcihvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHNJZD86IHN0cmluZykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fY29udHJvbGxlciA9IG9Db250cm9sbGVyO1xuXHRcdHRoaXMuX3ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0dGhpcy5leHRlbnNpb24gPSAodGhpcy5fY29udHJvbGxlciBhcyBhbnkpLmV4dGVuc2lvbjtcblx0XHR0aGlzLmVkaXRGbG93ID0gdGhpcy5fY29udHJvbGxlci5lZGl0Rmxvdztcblx0XHR0aGlzLnJvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLnJvdXRpbmc7XG5cdFx0dGhpcy5fcm91dGluZyA9IHRoaXMuX2NvbnRyb2xsZXIuX3JvdXRpbmc7XG5cdFx0dGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLmludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLl9wcmVmaXggPSBzSWQ7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHQvLyBkZWxldGUgdGhpcy5fY29udHJvbGxlcjtcblx0XHQvLyBkZWxldGUgdGhpcy5fdmlldztcblx0XHQvLyBkZWxldGUgdGhpcy5lZGl0Rmxvdy5fY29udHJvbGxlcjtcblx0XHQvLyBkZWxldGUgdGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24uX2NvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQWNjZXNzIGFueSBjb250cm9sIGJ5IElELlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2J5SWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZCBJRCBvZiB0aGUgY29udHJvbCB3aXRob3V0IHRoZSB2aWV3IHByZWZpeC4gRWl0aGVyIHRoZSBJRCBwcmVmaXhlZCBieSBTQVAgRmlvcmkgZWxlbWVudHNcblx0ICogKGZvciBleGFtcGxlIHdpdGggdGhlIHNlY3Rpb24pIG9yIHRoZSBjb250cm9sIElEIG9ubHkuIFRoZSBsYXR0ZXIgd29ya3Mgb25seSBmb3IgYW4gZXh0ZW5zaW9uIHJ1bm5pbmcgaW5cblx0ICogdGhlIHNhbWUgY29udGV4dCAobGlrZSBpbiB0aGUgc2FtZSBzZWN0aW9uKS4gWW91IGNhbiB1c2UgdGhlIHByZWZpeCBmb3IgU0FQIEZpb3JpIGVsZW1lbnRzIHRvIGFsc28gYWNjZXNzIG90aGVyIGNvbnRyb2xzIGxvY2F0ZWQgaW4gZGlmZmVyZW50IHNlY3Rpb25zLlxuXHQgKiBAcmV0dXJucyB7c2FwLnVpLmNvcmUuQ29udHJvbH0gVGhlIHJlcXVlc3RlZCBjb250cm9sLCBpZiBmb3VuZCBpbiB0aGUgdmlldy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGJ5SWQoc0lkOiBzdHJpbmcpIHtcblx0XHRsZXQgb0NvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoc0lkKTtcblxuXHRcdGlmICghb0NvbnRyb2wgJiYgdGhpcy5fcHJlZml4KSB7XG5cdFx0XHQvLyBnaXZlIGl0IGEgdHJ5IHdpdGggdGhlIHByZWZpeFxuXHRcdFx0b0NvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQodGhpcy5fcHJlZml4ICsgXCItLVwiICsgc0lkKTtcblx0XHR9XG5cblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFjY2VzcyB0byBtb2RlbHMgbWFuYWdlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuPGJyPlxuXHQgKiBUaGUgZm9sbG93aW5nIG1vZGVscyBjYW4gYmUgYWNjZXNzZWQ6XG5cdCAqIDx1bD5cblx0ICogPGxpPnVuZGVmaW5lZDogdGhlIHVuZGVmaW5lZCBtb2RlbCByZXR1cm5zIHRoZSBTQVBVSTUgT0RhdGEgVjQgbW9kZWwgYm91bmQgdG8gdGhpcyBwYWdlPC9saT5cblx0ICogPGxpPmkxOG4gLyBmdXJ0aGVyIGRhdGEgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0PC9saT5cblx0ICogPGxpPnVpOiByZXR1cm5zIGEgU0FQVUk1IEpTT04gbW9kZWwgY29udGFpbmluZyBVSSBpbmZvcm1hdGlvbi5cblx0ICogT25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHB1YmxpYyBhbmQgc3VwcG9ydGVkOlxuXHQgKiBcdDx1bD5cblx0ICogICAgIDxsaT5lZGl0TW9kZTogY29udGFpbnMgZWl0aGVyICdFZGl0YWJsZScgb3IgJ0Rpc3BsYXknPC9saT5cblx0ICogIDwvdWw+XG5cdCAqIDwvbGk+XG5cdCAqIDwvdWw+LlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2dldE1vZGVsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTW9kZWxOYW1lIE5hbWUgb2YgdGhlIG1vZGVsXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwuTW9kZWx9IFRoZSByZXF1aXJlZCBtb2RlbFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRNb2RlbChzTW9kZWxOYW1lPzogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQXBwQ29tcG9uZW50O1xuXG5cdFx0aWYgKHNNb2RlbE5hbWUgJiYgc01vZGVsTmFtZSAhPT0gXCJ1aVwiKSB7XG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpO1xuXHRcdFx0aWYgKCFvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLm1vZGVsc1tzTW9kZWxOYW1lXSkge1xuXHRcdFx0XHQvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gb3VyIGludGVybmFsIG1vZGVsc1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl92aWV3LmdldE1vZGVsKHNNb2RlbE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhbnkgY29udHJvbCBhcyBhIGRlcGVuZGVudCBjb250cm9sIHRvIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjYWRkRGVwZW5kZW50XG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUuQ29udHJvbH0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZERlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCkge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBkZXBlbmRlbnQgY29udHJvbCBmcm9tIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjcmVtb3ZlRGVwZW5kZW50XG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUuQ29udHJvbH0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZURlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCkge1xuXHRcdHRoaXMuX3ZpZXcucmVtb3ZlRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSSNuYXZpZ2F0ZVRvVGFyZ2V0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGFyZ2V0IE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5Db250ZXh0fSBbb0NvbnRleHRdIENvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdG5hdmlnYXRlVG9UYXJnZXQoc1RhcmdldDogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLl9jb250cm9sbGVyLl9yb3V0aW5nLm5hdmlnYXRlVG9UYXJnZXQob0NvbnRleHQsIHNUYXJnZXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgYSBmcmFnbWVudCBhbmQgZ28gdGhyb3VnaCB0aGUgdGVtcGxhdGUgcHJlcHJvY2Vzc29yIHdpdGggdGhlIGN1cnJlbnQgcGFnZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2xvYWRGcmFnbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVNldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1TZXR0aW5ncy5pZCBUaGUgSUQgb2YgdGhlIGZyYWdtZW50IGl0c2VsZlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbVNldHRpbmdzLm5hbWUgVGhlIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIGxvYWRlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVNldHRpbmdzLmNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXIgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZyYWdtZW50XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtU2V0dGluZ3MuY29udGV4dFBhdGggVGhlIGNvbnRleHRQYXRoIHRvIGJlIHVzZWQgZm9yIHRoZSB0ZW1wbGF0aW5nIHByb2Nlc3Ncblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuQ29udGV4dH0gbVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCBUaGUgaW5pdGlhbCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2U8RWxlbWVudFtdfHNhcC51aS5jb3JlLkVsZW1lbnRbXT59IFRoZSBmcmFnbWVudCBkZWZpbml0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGxvYWRGcmFnbWVudChtU2V0dGluZ3M6IHtcblx0XHRpZDogc3RyaW5nO1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHRjb250cm9sbGVyOiBvYmplY3Q7XG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZztcblx0XHRpbml0aWFsQmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdH0pOiBQcm9taXNlPEVsZW1lbnQgfCBFbGVtZW50W10+IHtcblx0XHRjb25zdCBvVGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGhpcy5fdmlldykgYXMgdHlwZW9mIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9QYWdlTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtVmlld0RhdGEgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCBvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XCJjb250ZXh0UGF0aFwiOiBvTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuY29udGV4dFBhdGggfHwgXCIvXCIgKyBvVGVtcGxhdGVDb21wb25lbnQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJjb250ZXh0UGF0aFwiOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwsXG5cdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHZpZXdEYXRhOiBvVmlld0RhdGFNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcHBDb21wb25lbnQ6IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KVxuXHRcdFx0fTtcblx0XHRjb25zdCBvVGVtcGxhdGVQcm9taXNlID0gQ29tbW9uVXRpbHMudGVtcGxhdGVDb250cm9sRnJhZ21lbnQobVNldHRpbmdzLm5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0Y29udHJvbGxlcjogbVNldHRpbmdzLmNvbnRyb2xsZXIgfHwgdGhpcyxcblx0XHRcdGlzWE1MOiBmYWxzZSxcblx0XHRcdGlkOiBtU2V0dGluZ3MuaWRcblx0XHR9KTtcblx0XHRvVGVtcGxhdGVQcm9taXNlXG5cdFx0XHQudGhlbigob0ZyYWdtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncy5pbml0aWFsQmluZGluZ0NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9GcmFnbWVudC5zZXRCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudChvRnJhZ21lbnQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBvVGVtcGxhdGVQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIHVwZGF0ZSBvZiB0aGUgYXBwIHN0YXRlLlxuXHQgKiBTaG91bGQgYmUgY2FsbGVkIGlmIHRoZSBzdGF0ZSBvZiBhIGNvbnRyb2wsIG9yIGFueSBvdGhlciBzdGF0ZS1yZWxldmFudCBpbmZvcm1hdGlvbiwgd2FzIGNoYW5nZWQuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjdXBkYXRlQXBwU3RhdGVcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhcHAgc3RhdGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR1cGRhdGVBcHBTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoXG5cdFx0XHQhdGhpcy5fY29udHJvbGxlclxuXHRcdFx0XHQuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdFx0LmdldFByb3BlcnR5KFwiL3VpQWRhcHRhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NvbnRyb2xsZXJcblx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0XHQuY3JlYXRlQXBwU3RhdGUoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5zaW9uQVBJO1xuIl19