@sapui5/sap.fe.core 1.111.1 → 1.113.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 (579) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +6 -5
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +12 -11
  7. package/src/sap/fe/core/AppComponent-dbg.js +35 -9
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +66 -9
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +10 -1
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +2 -1
  17. package/src/sap/fe/core/CommonUtils-dbg.js +202 -533
  18. package/src/sap/fe/core/CommonUtils.js +1 -1
  19. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  20. package/src/sap/fe/core/CommonUtils.ts +260 -681
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +4 -1
  22. package/src/sap/fe/core/ExtensionAPI.js +1 -1
  23. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  24. package/src/sap/fe/core/ExtensionAPI.ts +11 -1
  25. package/src/sap/fe/core/PageController-dbg.js +26 -31
  26. package/src/sap/fe/core/PageController.js +1 -1
  27. package/src/sap/fe/core/PageController.js.map +1 -1
  28. package/src/sap/fe/core/PageController.ts +17 -3
  29. package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
  30. package/src/sap/fe/core/ResourceModel.js +6 -0
  31. package/src/sap/fe/core/ResourceModel.js.map +1 -0
  32. package/src/sap/fe/core/ResourceModel.ts +67 -0
  33. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  34. package/src/sap/fe/core/TemplateComponent.ts +1 -0
  35. package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
  36. package/src/sap/fe/core/TemplateModel.ts +6 -1
  37. package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
  38. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
  40. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +164 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +170 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
  48. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +142 -0
  49. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +913 -0
  50. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
  51. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
  52. package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +313 -373
  53. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
  54. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
  55. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
  56. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
  57. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
  58. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
  59. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
  60. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +183 -0
  61. package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
  62. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  63. package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
  64. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
  65. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +936 -231
  66. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1023 -255
  69. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +48 -98
  70. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +95 -129
  73. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
  74. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
  77. package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
  79. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
  80. package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
  81. package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
  82. package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
  83. package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
  84. package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
  85. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
  86. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
  87. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  88. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
  89. package/src/sap/fe/core/controllerextensions/PageReady.ts +26 -4
  90. package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
  91. package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
  92. package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
  93. package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
  94. package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
  95. package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
  96. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  97. package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
  98. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
  99. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  100. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  101. package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
  102. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
  103. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  104. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  105. package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
  106. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
  107. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
  108. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
  109. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
  110. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
  111. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  112. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  113. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
  114. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
  115. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  116. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  117. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
  118. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
  119. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
  120. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  121. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +4 -5
  122. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
  123. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
  124. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
  125. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
  126. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
  127. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
  128. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
  129. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
  130. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
  131. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +78 -149
  132. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  133. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  134. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +85 -160
  135. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +49 -49
  136. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  137. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  138. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +52 -63
  139. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  140. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +82 -0
  141. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
  142. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
  143. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +123 -0
  144. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1508 -0
  145. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
  146. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
  147. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1993 -0
  148. package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
  149. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  150. package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
  151. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
  152. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -18
  153. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  154. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  155. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -22
  156. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +53 -47
  157. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  158. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  159. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +55 -61
  160. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
  161. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
  162. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
  163. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +78 -13
  164. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  165. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  166. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +100 -13
  167. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
  168. package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
  169. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  170. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  171. package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
  172. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
  173. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  174. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
  175. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
  176. package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
  177. package/src/sap/fe/core/controls/FilterBar.ts +5 -0
  178. package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
  179. package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
  180. package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
  181. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
  182. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
  183. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
  184. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
  185. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
  186. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
  187. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  188. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  189. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
  190. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
  191. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
  192. package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
  193. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
  194. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
  195. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
  196. package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
  197. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  198. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
  199. package/src/sap/fe/core/converters/ConverterContext.ts +4 -6
  200. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
  201. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  202. package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
  203. package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
  204. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +21 -3
  205. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  206. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  207. package/src/sap/fe/core/converters/ManifestWrapper.ts +23 -1
  208. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +67 -62
  209. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  210. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  211. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -66
  212. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
  213. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  214. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  215. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +81 -20
  216. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  217. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  218. package/src/sap/fe/core/converters/annotations/DataField.ts +76 -22
  219. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1027 -956
  220. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  221. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  222. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +13 -19
  223. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  224. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  225. package/src/sap/fe/core/converters/controls/Common/Action.ts +37 -40
  226. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
  227. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  228. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  229. package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
  230. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
  231. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  232. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  233. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
  234. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
  235. package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  236. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
  237. package/src/sap/fe/core/converters/controls/Common/Form.ts +8 -14
  238. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +9 -9
  239. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  240. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  241. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -18
  242. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +143 -93
  243. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  244. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  245. package/src/sap/fe/core/converters/controls/Common/Table.ts +221 -177
  246. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +23 -16
  247. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  248. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  249. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -23
  250. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +138 -75
  251. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  252. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  253. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +223 -110
  254. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +38 -28
  255. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  256. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  257. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +67 -47
  258. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
  259. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
  260. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
  261. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  262. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
  263. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
  264. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +54 -24
  265. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  266. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  267. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +84 -37
  268. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +12 -14
  269. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  270. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  271. package/src/sap/fe/core/converters/helpers/Aggregation.ts +16 -11
  272. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
  273. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  274. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
  275. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
  276. package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
  277. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
  278. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
  279. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
  280. package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
  281. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
  282. package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
  283. package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
  284. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +11 -9
  285. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  286. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  287. package/src/sap/fe/core/converters/helpers/IssueManager.ts +10 -8
  288. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +22 -20
  289. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  290. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  291. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +19 -16
  292. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +32 -35
  293. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  294. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  295. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -37
  296. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -5
  297. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  298. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  299. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -2
  300. package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
  301. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  302. package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
  303. package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
  304. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +3 -7
  305. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  306. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  307. package/src/sap/fe/core/formatters/TableFormatter.ts +2 -6
  308. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +9 -5
  309. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  310. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  311. package/src/sap/fe/core/formatters/ValueFormatter.ts +11 -4
  312. package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
  313. package/src/sap/fe/core/fpm/Component.ts +1 -0
  314. package/src/sap/fe/core/fpm/manifest.json +1 -1
  315. package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
  316. package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  317. package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
  318. package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
  319. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +7 -6
  320. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  321. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  322. package/src/sap/fe/core/helpers/BindingToolkit.ts +9 -9
  323. package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
  324. package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
  325. package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
  326. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
  327. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  328. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  329. package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
  330. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +23 -20
  331. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  332. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  333. package/src/sap/fe/core/helpers/MassEditHelper.ts +26 -28
  334. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +9 -9
  335. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  336. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  337. package/src/sap/fe/core/helpers/MessageStrip.ts +8 -8
  338. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +517 -0
  339. package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
  340. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
  341. package/src/sap/fe/core/helpers/MetaModelFunction.ts +610 -0
  342. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
  343. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  344. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  345. package/src/sap/fe/core/helpers/ModelHelper.ts +47 -74
  346. package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
  347. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  348. package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
  349. package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
  350. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +39 -0
  351. package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
  352. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
  353. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +35 -0
  354. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +132 -23
  355. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  356. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  357. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +109 -22
  358. package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
  359. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  360. package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
  361. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  362. package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
  363. package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
  364. package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
  365. package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
  366. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
  367. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  368. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  369. package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
  370. package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
  371. package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
  372. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +151 -1
  373. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  374. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  375. package/src/sap/fe/core/helpers/TypeGuards.ts +162 -1
  376. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
  377. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  378. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
  379. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
  380. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
  381. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
  382. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  383. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  384. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
  385. package/src/sap/fe/core/library-dbg.js +2 -2
  386. package/src/sap/fe/core/library-preload.js +156 -140
  387. package/src/sap/fe/core/library-preload.js.map +1 -1
  388. package/src/sap/fe/core/library.js +1 -1
  389. package/src/sap/fe/core/library.ts +7 -0
  390. package/src/sap/fe/core/manifest.json +1 -1
  391. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
  392. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  393. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  394. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
  395. package/src/sap/fe/core/messagebundle.properties +35 -0
  396. package/src/sap/fe/core/messagebundle_ar.properties +15 -12
  397. package/src/sap/fe/core/messagebundle_bg.properties +20 -17
  398. package/src/sap/fe/core/messagebundle_ca.properties +12 -9
  399. package/src/sap/fe/core/messagebundle_cs.properties +12 -9
  400. package/src/sap/fe/core/messagebundle_cy.properties +12 -9
  401. package/src/sap/fe/core/messagebundle_da.properties +12 -9
  402. package/src/sap/fe/core/messagebundle_de.properties +13 -10
  403. package/src/sap/fe/core/messagebundle_el.properties +14 -11
  404. package/src/sap/fe/core/messagebundle_en.properties +4 -1
  405. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -1
  406. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
  407. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +21 -0
  408. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +23 -3
  409. package/src/sap/fe/core/messagebundle_es.properties +12 -9
  410. package/src/sap/fe/core/messagebundle_es_MX.properties +12 -9
  411. package/src/sap/fe/core/messagebundle_et.properties +12 -9
  412. package/src/sap/fe/core/messagebundle_fi.properties +12 -9
  413. package/src/sap/fe/core/messagebundle_fr.properties +12 -9
  414. package/src/sap/fe/core/messagebundle_fr_CA.properties +13 -10
  415. package/src/sap/fe/core/messagebundle_hi.properties +12 -9
  416. package/src/sap/fe/core/messagebundle_hr.properties +12 -9
  417. package/src/sap/fe/core/messagebundle_hu.properties +12 -9
  418. package/src/sap/fe/core/messagebundle_id.properties +13 -10
  419. package/src/sap/fe/core/messagebundle_it.properties +12 -9
  420. package/src/sap/fe/core/messagebundle_iw.properties +12 -9
  421. package/src/sap/fe/core/messagebundle_ja.properties +13 -10
  422. package/src/sap/fe/core/messagebundle_kk.properties +12 -9
  423. package/src/sap/fe/core/messagebundle_ko.properties +12 -9
  424. package/src/sap/fe/core/messagebundle_lt.properties +12 -9
  425. package/src/sap/fe/core/messagebundle_lv.properties +12 -9
  426. package/src/sap/fe/core/messagebundle_ms.properties +13 -10
  427. package/src/sap/fe/core/messagebundle_nl.properties +13 -10
  428. package/src/sap/fe/core/messagebundle_no.properties +12 -9
  429. package/src/sap/fe/core/messagebundle_pl.properties +12 -9
  430. package/src/sap/fe/core/messagebundle_pt.properties +12 -9
  431. package/src/sap/fe/core/messagebundle_pt_PT.properties +12 -9
  432. package/src/sap/fe/core/messagebundle_ro.properties +16 -13
  433. package/src/sap/fe/core/messagebundle_ru.properties +13 -10
  434. package/src/sap/fe/core/messagebundle_sh.properties +12 -9
  435. package/src/sap/fe/core/messagebundle_sk.properties +12 -9
  436. package/src/sap/fe/core/messagebundle_sl.properties +12 -9
  437. package/src/sap/fe/core/messagebundle_sv.properties +12 -9
  438. package/src/sap/fe/core/messagebundle_th.properties +12 -9
  439. package/src/sap/fe/core/messagebundle_tr.properties +12 -9
  440. package/src/sap/fe/core/messagebundle_uk.properties +12 -9
  441. package/src/sap/fe/core/messagebundle_vi.properties +13 -10
  442. package/src/sap/fe/core/messagebundle_zh_CN.properties +12 -9
  443. package/src/sap/fe/core/messagebundle_zh_TW.properties +12 -9
  444. package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
  445. package/src/sap/fe/core/operationsHelper.js +1 -1
  446. package/src/sap/fe/core/operationsHelper.js.map +1 -1
  447. package/src/sap/fe/core/operationsHelper.ts +88 -63
  448. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
  449. package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
  450. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
  451. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  452. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  453. package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
  454. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +10 -5
  455. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  456. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  457. package/src/sap/fe/core/rootView/RootViewBaseController.ts +22 -8
  458. package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
  459. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  460. package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
  461. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
  462. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
  463. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
  464. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  465. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
  466. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
  467. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  468. package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
  469. package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
  470. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  471. package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
  472. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
  473. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +9 -3
  474. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  475. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  476. package/src/sap/fe/core/services/RoutingServiceFactory.ts +35 -3
  477. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
  478. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  479. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
  480. package/src/sap/fe/core/services/ShellServicesFactory.ts +24 -2
  481. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
  482. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  483. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  484. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +497 -333
  485. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +26 -6
  486. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  487. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  488. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +54 -13
  489. package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
  490. package/src/sap/fe/core/support/Diagnostics.ts +5 -0
  491. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
  492. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  493. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  494. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  495. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +195 -95
  496. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  497. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  498. package/src/sap/fe/core/templating/DataModelPathHelper.ts +210 -96
  499. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
  500. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  501. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
  502. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
  503. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -29
  504. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  505. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  506. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -26
  507. package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
  508. package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
  509. package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
  510. package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
  511. package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
  512. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  513. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  514. package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
  515. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
  516. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  517. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
  518. package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
  519. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
  520. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  521. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
  522. package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
  523. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
  524. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  525. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
  526. package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
  527. package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  528. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  529. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  530. package/src/sap/fe/core/templating/UIFormatters.ts +47 -32
  531. package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
  532. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
  533. package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
  534. package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
  535. package/src/sap/fe/core/type/FiscalDate.ts +2 -1
  536. package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
  537. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  538. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  539. package/src/sap/fe/core/type/TypeUtil.ts +3 -6
  540. package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
  541. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
  542. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
  543. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
  544. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
  545. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
  546. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
  547. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
  548. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -948
  549. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
  550. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
  551. package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
  552. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
  553. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
  554. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
  555. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
  556. package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
  557. package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
  558. package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
  559. package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
  560. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
  561. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
  562. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
  563. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
  564. package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
  565. package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
  566. package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
  567. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
  568. package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
  569. package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
  570. package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
  571. package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
  572. package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
  573. package/src/sap/fe/core/controls/FileWrapper.js +0 -6
  574. package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
  575. package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
  576. package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
  577. package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
  578. package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
  579. package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
@@ -1,10 +1,9 @@
1
- import type { Action, EntitySet, EntityType, PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
1
+ import type { Action, EntityType, PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
2
2
  import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Common";
3
3
  import type { DataFieldForActionTypes, DataFieldForIntentBasedNavigationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
4
4
  import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
5
+ import type { AnnotationAction, BaseAction } from "sap/fe/core/converters/controls/Common/Action";
5
6
  import {
6
- AnnotationAction,
7
- BaseAction,
8
7
  ButtonType,
9
8
  dataFieldIsCopyAction,
10
9
  getCopyAction,
@@ -27,6 +26,7 @@ import {
27
26
  pathInModel
28
27
  } from "sap/fe/core/helpers/BindingToolkit";
29
28
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
29
+ import { isEntitySet } from "sap/fe/core/helpers/TypeGuards";
30
30
  import { isPathDeletable } from "sap/fe/core/templating/DataModelPathHelper";
31
31
  import Core from "sap/ui/core/Core";
32
32
  import type ConverterContext from "../ConverterContext";
@@ -77,7 +77,7 @@ function getIdentificationDataFieldForIBNActions(
77
77
  }) || []) as DataFieldForIntentBasedNavigationTypes[];
78
78
  }
79
79
 
80
- const IMPORTANT_CRITICALITIES = [
80
+ export const IMPORTANT_CRITICALITIES = [
81
81
  "UI.CriticalityType/VeryPositive",
82
82
  "UI.CriticalityType/Positive",
83
83
  "UI.CriticalityType/Negative",
@@ -142,7 +142,7 @@ export function getDeleteButtonEnabled(
142
142
  let ret = ifElse(
143
143
  isParentDeletable !== undefined,
144
144
  isParentDeletable,
145
- ifElse(isDeletable !== undefined, equal(isDeletable, true), constant(true))
145
+ ifElse(isDeletable !== undefined, equal(getExpressionFromAnnotation(isDeletable), true), constant(true))
146
146
  );
147
147
 
148
148
  // delete should be disabled for Locked objects
@@ -245,10 +245,10 @@ export function getEditButtonEnabled(
245
245
  isDraftRoot = ModelHelper.isDraftRoot(entitySet),
246
246
  isSticky = ModelHelper.isSticky(entitySet);
247
247
  let editActionName: string | undefined;
248
- if (isDraftRoot && !ModelHelper.isSingleton(entitySet)) {
249
- editActionName = (entitySet as EntitySet)?.annotations.Common?.DraftRoot?.EditAction as string;
250
- } else if (isSticky && !ModelHelper.isSingleton(entitySet)) {
251
- editActionName = (entitySet as EntitySet)?.annotations.Session?.StickySessionSupported?.EditAction as string;
248
+ if (isDraftRoot && isEntitySet(entitySet)) {
249
+ editActionName = entitySet.annotations.Common?.DraftRoot?.EditAction as string;
250
+ } else if (isSticky && isEntitySet(entitySet)) {
251
+ editActionName = entitySet.annotations.Session?.StickySessionSupported?.EditAction as string;
252
252
  }
253
253
  if (editActionName) {
254
254
  const editActionAnnotationPath = converterContext.getAbsoluteAnnotationPath(editActionName);
@@ -288,7 +288,7 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
288
288
  draftNode = ModelHelper.getDraftNode(rootEntitySet),
289
289
  entityDeleteRestrictions = entitySet && entitySet.annotations?.Capabilities?.DeleteRestrictions,
290
290
  rootUpdateHidden = ModelHelper.isUpdateHidden(rootEntitySet, rootEntityType),
291
- updateHidden = rootEntitySet && !ModelHelper.isSingleton(rootEntitySet) && rootUpdateHidden?.valueOf(),
291
+ updateHidden = rootEntitySet && isEntitySet(rootEntitySet) && rootUpdateHidden?.valueOf(),
292
292
  dataModelObjectPath = converterContext.getDataModelObjectPath(),
293
293
  isParentDeletable = isPathDeletable(dataModelObjectPath, {
294
294
  pathVisitor: (path: string, navigationPaths: string[]) =>
@@ -316,7 +316,7 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
316
316
  // the button for switching between draft and active document versions but also the controls for
317
317
  // the collaborative draft fragment.
318
318
  const headerActions: BaseAction[] = [];
319
- if (!ModelHelper.isSingleton(entitySet) && draftRoot?.EditAction && updateHidden !== true) {
319
+ if (isEntitySet(entitySet) && draftRoot?.EditAction && updateHidden !== true) {
320
320
  headerActions.push({ type: ActionType.DraftActions, key: "DraftActions" });
321
321
  }
322
322
 
@@ -396,7 +396,12 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
396
396
  text: dataField.Label?.toString(),
397
397
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
398
398
  buttonType: ButtonType.Ghost,
399
- visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
399
+ visible: compileExpression(
400
+ and(
401
+ not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true)),
402
+ not(equal(pathInModel("shellNavigationNotAvailable", "internal"), true))
403
+ )
404
+ ),
400
405
  enabled:
401
406
  dataField.NavigationAvailable !== undefined
402
407
  ? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable?.valueOf()), true))
@@ -446,10 +451,8 @@ export function getFooterDefaultActions(viewLevel: number, converterContext: Con
446
451
  const entityType = converterContext.getEntityType();
447
452
  const stickySessionSupported = ModelHelper.getStickySession(entitySet), //for sticky app
448
453
  entitySetDraftRoot =
449
- !ModelHelper.isSingleton(entitySet) &&
450
- entitySet &&
451
- ((entitySet as EntitySet).annotations.Common?.DraftRoot?.term ||
452
- (entitySet as EntitySet).annotations?.Session?.StickySessionSupported?.term),
454
+ isEntitySet(entitySet) &&
455
+ (entitySet.annotations.Common?.DraftRoot?.term ?? entitySet.annotations.Session?.StickySessionSupported?.term),
453
456
  conditionSave = Boolean(
454
457
  entitySetDraftRoot === CommonAnnotationTerms.DraftRoot || (stickySessionSupported && stickySessionSupported?.SaveAction)
455
458
  ),
@@ -30,7 +30,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
30
30
  var insertCustomElements = ConfigurableObject.insertCustomElements;
31
31
  var getSelectionFields = FilterBar.getSelectionFields;
32
32
  var getManifestFilterFields = FilterBar.getManifestFilterFields;
33
- var getFilterBarhideBasicSearch = FilterBar.getFilterBarhideBasicSearch;
33
+ var getFilterBarHideBasicSearch = FilterBar.getFilterBarHideBasicSearch;
34
34
  var getActionsFromManifest = Action.getActionsFromManifest;
35
35
  /**
36
36
  * Retrieves all list report tables.
@@ -83,50 +83,42 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
83
83
  *
84
84
  * @param entityType The current EntityType
85
85
  * @param converterContext
86
- * @param bIsALP
86
+ * @param isALP
87
87
  * @returns A compliant annotation for rendering the list report
88
88
  */
89
- function getCompliantVisualizationAnnotation(entityType, converterContext, bIsALP) {
89
+ function getCompliantVisualizationAnnotation(entityType, converterContext, isALP) {
90
90
  const annotationPath = converterContext.getManifestWrapper().getDefaultTemplateAnnotationPath();
91
91
  const selectionPresentationVariant = getSelectionPresentationVariant(entityType, annotationPath, converterContext);
92
- const sErrorForALP = "ALP flavor needs both chart and table to load the application";
93
- if (annotationPath && selectionPresentationVariant) {
94
- const presentationVariant = selectionPresentationVariant.PresentationVariant;
95
- if (!presentationVariant) {
96
- throw new Error("Presentation Variant is not configured in the SPV mentioned in the manifest");
97
- }
98
- const bPVComplaint = isPresentationCompliant(presentationVariant, bIsALP);
99
- if (!bPVComplaint) {
100
- if (bIsALP) {
101
- throw new Error(sErrorForALP);
102
- } else {
92
+ const errorMessageForALP = "ALP flavor needs both chart and table to load the application";
93
+ if (selectionPresentationVariant) {
94
+ if (annotationPath) {
95
+ const presentationVariant = selectionPresentationVariant.PresentationVariant;
96
+ if (!presentationVariant) {
97
+ throw new Error("Presentation Variant is not configured in the SPV mentioned in the manifest");
98
+ }
99
+ if (!isPresentationCompliant(presentationVariant, isALP)) {
100
+ if (isALP) {
101
+ throw new Error(errorMessageForALP);
102
+ }
103
103
  return undefined;
104
104
  }
105
105
  }
106
- if (isSelectionPresentationCompliant(selectionPresentationVariant, bIsALP)) {
106
+ if (isSelectionPresentationCompliant(selectionPresentationVariant, isALP) === true) {
107
107
  return selectionPresentationVariant;
108
- }
109
- }
110
- if (selectionPresentationVariant) {
111
- if (isSelectionPresentationCompliant(selectionPresentationVariant, bIsALP)) {
112
- return selectionPresentationVariant;
113
- } else if (bIsALP) {
114
- throw new Error(sErrorForALP);
108
+ } else if (isALP) {
109
+ throw new Error(errorMessageForALP);
115
110
  }
116
111
  }
117
112
  const presentationVariant = getDefaultPresentationVariant(entityType);
118
113
  if (presentationVariant) {
119
- if (isPresentationCompliant(presentationVariant, bIsALP)) {
114
+ if (isPresentationCompliant(presentationVariant, isALP)) {
120
115
  return presentationVariant;
121
- } else if (bIsALP) {
122
- throw new Error(sErrorForALP);
116
+ } else if (isALP) {
117
+ throw new Error(errorMessageForALP);
123
118
  }
124
119
  }
125
- if (!bIsALP) {
126
- const defaultLineItem = getDefaultLineItem(entityType);
127
- if (defaultLineItem) {
128
- return defaultLineItem;
129
- }
120
+ if (!isALP) {
121
+ return getDefaultLineItem(entityType);
130
122
  }
131
123
  return undefined;
132
124
  }
@@ -197,7 +189,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
197
189
  return view;
198
190
  }
199
191
  };
200
- if (((_presentation = presentation) === null || _presentation === void 0 ? void 0 : (_presentation$visuali = _presentation.visualizations) === null || _presentation$visuali === void 0 ? void 0 : _presentation$visuali.length) === 2 && converterContext.getTemplateType() === TemplateType.AnalyticalListPage) {
192
+ if (!converterContext.getManifestWrapper().hasMultipleVisualizations(config) && ((_presentation = presentation) === null || _presentation === void 0 ? void 0 : (_presentation$visuali = _presentation.visualizations) === null || _presentation$visuali === void 0 ? void 0 : _presentation$visuali.length) === 2 && converterContext.getTemplateType() === TemplateType.AnalyticalListPage) {
201
193
  const view = createAlpView([presentation], "both");
202
194
  if (view) {
203
195
  return view;
@@ -223,6 +215,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
223
215
  title = compileExpression(getExpressionFromAnnotation(viewAnnotation.Text));
224
216
  // Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
225
217
  presentation.visualizations.forEach((visualizationDefinition, index) => {
218
+ var _config$annotation;
226
219
  switch (visualizationDefinition.type) {
227
220
  case VisualizationType.Table:
228
221
  const tableVisualization = presentation.visualizations[index];
@@ -235,8 +228,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
235
228
  tableVisualization.annotation.id = getTableID(config.key || "", "LineItem");
236
229
  }
237
230
  config = config;
238
- if (config && config.annotation && config.annotation.term === "com.sap.vocabularies.UI.v1.SelectionPresentationVariant") {
239
- selectionVariantPath = `@${config.annotation.SelectionVariant.fullyQualifiedName.split("@")[1]}`;
231
+ if (((_config$annotation = config.annotation) === null || _config$annotation === void 0 ? void 0 : _config$annotation.term) === "com.sap.vocabularies.UI.v1.SelectionPresentationVariant") {
232
+ var _config$annotation$Se;
233
+ if (!config.annotation.SelectionVariant) {
234
+ throw new Error(`The Selection Variant is missing for the Selection Presentation Variant ${config.annotation.fullyQualifiedName}`);
235
+ }
236
+ selectionVariantPath = `@${(_config$annotation$Se = config.annotation.SelectionVariant) === null || _config$annotation$Se === void 0 ? void 0 : _config$annotation$Se.fullyQualifiedName.split("@")[1]}`;
240
237
  } else {
241
238
  selectionVariantPath = config.annotationPath;
242
239
  }
@@ -464,7 +461,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
464
461
  const lrFilterProperties = getSelectionFields(converterContext, lrTableVisualizations);
465
462
  const selectionFields = lrFilterProperties.selectionFields;
466
463
  const propertyInfoFields = lrFilterProperties.sPropertyInfo;
467
- const hideBasicSearch = getFilterBarhideBasicSearch(lrTableVisualizations, lrChartVisualizations, converterContext);
464
+ const hideBasicSearch = getFilterBarHideBasicSearch(lrTableVisualizations, lrChartVisualizations, converterContext);
468
465
  const multiViewControl = getMultiViewsControl(converterContext, views);
469
466
  const selectionVariant = multiViewControl ? undefined : getSelectionVariant(entityType, converterContext);
470
467
  const defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {};
@@ -554,4 +551,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
554
551
  }
555
552
  return _exports;
556
553
  }, false);
557
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsInR5cGUiLCJ2aXN1YWxpemF0aW9ucyIsInNlY29uZGFyeVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInB1c2giLCJnZXRDaGFydFZpc3VhbGl6YXRpb25zIiwiY2hhcnRzIiwicHJpbWFyeVZpc3VhbGl6YXRpb24iLCJDaGFydCIsImdldERlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGRzIiwiZGVmYXVsdFNlbWFudGljRGF0ZXMiLCJmaWx0ZXJGaWVsZCIsInNldHRpbmdzIiwiZGVmYXVsdFZhbHVlcyIsImxlbmd0aCIsImdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJiSXNBTFAiLCJhbm5vdGF0aW9uUGF0aCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJzRXJyb3JGb3JBTFAiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiYlBWQ29tcGxhaW50IiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJ1bmRlZmluZWQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiZGVmYXVsdExpbmVJdGVtIiwiZ2V0RGVmYXVsdExpbmVJdGVtIiwiZ2V0VmlldyIsInZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uIiwiY29uZmlnIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3VycmVudENvbmZpZyIsImtleSIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImN1cnJlbnRQcmVzZW50YXRpb24iLCJpc1ByaW1hcnkiLCJkZWZhdWx0VmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvbkNyZWF0ZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRQcmVzZW50YXRpb24iLCJpdGVtIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInRhcmdldEFubm90YXRpb24iLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJzRXJyb3IiLCJjcmVhdGVBbHBWaWV3IiwicHJlc2VudGF0aW9ucyIsImRlZmF1bHRQYXRoIiwiaWQiLCJ2aXNpYmxlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJ2aWV3QW5ub3RhdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiVGV4dCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiaW5kZXgiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbiIsImdldFRhYmxlSUQiLCJ0ZXJtIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiY2hhcnRWaXN1YWxpemF0aW9uIiwiZ2V0Q2hhcnRJRCIsIm11bHRpVmlld3MiLCJsYWJlbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjdXN0b21UYWJJZCIsImdldEN1c3RvbVRhYklEIiwiZ2V0Vmlld3MiLCJzZXR0aW5nc1ZpZXdzIiwidmlld0NvbnZlcnRlckNvbmZpZ3MiLCJwYXRoIiwidmlld0NvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJnZXRDb250ZXh0UGF0aCIsImdldEFscFZpZXdDb25maWciLCJtYXAiLCJ2aWV3Q29udmVydGVyQ29uZmlnIiwiZ2V0TXVsdGlWaWV3c0NvbnRyb2wiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpVmlzdWFsaXphdGlvbnMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsImdldEljb25UYWJCYXJJRCIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhY3Rpb25zIiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZHluYW1pY0xpc3RSZXBvcnRJZCIsImdldER5bmFtaWNMaXN0UmVwb3J0SUQiLCJnZXRGaWx0ZXJCYXJJRCIsImZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZmJDb25maWciLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVySW5pdGlhbExheW91dCIsImluaXRpYWxMYXlvdXQiLCJ0b0xvd2VyQ2FzZSIsImZpbHRlckxheW91dCIsImxheW91dCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwic2hvd0NsZWFyQnV0dG9uIiwib0NvbmZpZyIsImdldENvbnRlbnRBcmVhSWQiLCJjaGFydElkIiwidGFibGVJZCIsInVzZUhpZGRlbkZpbHRlckJhciIsImhpZGVGaWx0ZXJCYXIiLCJpc0ZpbHRlckJhckhpZGRlbiIsImxyRmlsdGVyUHJvcGVydGllcyIsImdldFNlbGVjdGlvbkZpZWxkcyIsInNlbGVjdGlvbkZpZWxkcyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInNQcm9wZXJ0eUluZm8iLCJoaWRlQmFzaWNTZWFyY2giLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJtdWx0aVZpZXdDb250cm9sIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJ2aXN1YWxpemF0aW9uSWRzIiwiY29uY2F0IiwidGFyZ2V0Q29udHJvbElkcyIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsInN0aWNreVN1YmhlYWRlclByb3ZpZGVyIiwiZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwibXVsdGlWaWV3c0NvbnRyb2wiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm8iLCJmaWx0ZXJDb25kaXRpb25zIiwidmFyaWFudE1hbmFnZW1lbnQiLCJqb2luIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCwgRmlsdGVyRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLCBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgS1BJRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQge1xuXHRnZXRDaGFydElELFxuXHRnZXRDdXN0b21UYWJJRCxcblx0Z2V0RHluYW1pY0xpc3RSZXBvcnRJRCxcblx0Z2V0RmlsdGVyQmFySUQsXG5cdGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdGdldEljb25UYWJCYXJJRCxcblx0Z2V0VGFibGVJRFxufSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG50eXBlIFZpZXdBbm5vdGF0aW9ucyA9IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25WYXJpYW50O1xudHlwZSBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRhcmdldENvbnRyb2xJZHM6IHN0cmluZztcbn07XG5cbnR5cGUgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IFZpZXdQYXRoQ29uZmlndXJhdGlvbiAmIHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIFNpbmdsZVZpZXdDb25maWd1cmF0aW9uID0ge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24gPSBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uICYge1xuXHR0eXBlOiBzdHJpbmc7XG59O1xuXG50eXBlIFZpZXdDb25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG50eXBlIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbjtcblxudHlwZSBWaWV3Q29udmVydGVyU2V0dGluZ3MgPSBWaWV3Q29uZmlndXJhdGlvbiAmIHtcblx0Y29udmVydGVyQ29udGV4dD86IENvbnZlcnRlckNvbnRleHQ7XG59O1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiA9IHtcblx0bWFpbkVudGl0eVNldDogc3RyaW5nO1xuXHRtYWluRW50aXR5VHlwZTogc3RyaW5nOyAvLyBlbnRpdHlUeXBlPiBhdCB0aGUgc3RhcnQgb2YgTFIgdGVtcGxhdGluZ1xuXHRzaW5nbGVUYWJsZUlkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2luZ2xlQ2hhcnRJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdGR5bmFtaWNMaXN0UmVwb3J0SWQ6IHN0cmluZztcblx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXI/OiBzdHJpbmc7XG5cdG11bHRpVmlld3NDb250cm9sPzogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dQaW5uYWJsZVRvZ2dsZT86IGJvb2xlYW47XG5cdGZpbHRlckJhcjoge1xuXHRcdHByb3BlcnR5SW5mbzogYW55O1xuXHRcdHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0XHRoaWRlQmFzaWNTZWFyY2g6IGJvb2xlYW47XG5cdFx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZDtcblx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4gfCB7fTtcblx0fTtcblx0ZmlsdGVyQmFySWQ6IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbjtcblx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0dGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGU7XG5cdHVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbjtcblx0ZmlsdGVySW5pdGlhbExheW91dD86IHN0cmluZztcblx0ZmlsdGVyTGF5b3V0Pzogc3RyaW5nO1xuXHRrcGlEZWZpbml0aW9uczogS1BJRGVmaW5pdGlvbltdO1xuXHRoaWRlRmlsdGVyQmFyOiBib29sZWFuO1xuXHR1c2VIaWRkZW5GaWx0ZXJCYXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVmlld0RlZmluaXRpb24gPSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHRjaGFydENvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJJc0FMUFxuICogQHJldHVybnMgQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YklzQUxQOiBib29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc0Vycm9yRm9yQUxQID0gXCJBTFAgZmxhdm9yIG5lZWRzIGJvdGggY2hhcnQgYW5kIHRhYmxlIHRvIGxvYWQgdGhlIGFwcGxpY2F0aW9uXCI7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0aWYgKGJJc0FMUCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3Ioc0Vycm9yRm9yQUxQKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fSBlbHNlIGlmIChiSXNBTFApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihzRXJyb3JGb3JBTFApO1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH0gZWxzZSBpZiAoYklzQUxQKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Ioc0Vycm9yRm9yQUxQKTtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uICh2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0bGV0IGNvbmZpZyA9IHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uO1xuXHRpZiAoY29uZmlnLmNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRsZXQgY29udmVydGVyQ29udGV4dCA9IGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRDb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogY3VycmVudENvbmZpZyBpcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHtcblx0XHRcdHJldHVybiAoY3VycmVudENvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbihjb25maWcpXG5cdFx0KTtcblx0XHRsZXQgdGFibGVDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCBjaGFydENvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgY3JlYXRlVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50UHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBjdXJyZW50UHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGlmIChpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudFByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKGlzUHJpbWFyeSA/IFwiUHJpbWFyeVwiIDogXCJTZWNvbmRhcnlcIikgKyBcIiB2aXN1YWxpc2F0aW9uIG5lZWRzIHZhbGlkIFwiICsgKGlzUHJpbWFyeSA/IFwiY2hhcnRcIiA6IFwidGFibGVcIikpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoaXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLCBpc1ByaW1hcnk6IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0aWYgKGFubm90YXRpb24gfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdFx0YW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzRXJyb3IgPVxuXHRcdFx0XHRcdFwiQW5ub3RhdGlvbiBQYXRoIGZvciB0aGUgXCIgK1xuXHRcdFx0XHRcdChpc1ByaW1hcnkgPyBcInByaW1hcnlcIiA6IFwic2Vjb25kYXJ5XCIpICtcblx0XHRcdFx0XHRcIiB2aXN1YWxpc2F0aW9uIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kXCI7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihzRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pPy5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0XHR0YWJsZUNvbnRyb2xJZCA9IChzZWNvbmRhcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdHZpc2libGVcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAocHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucz8ubGVuZ3RoID09PSAyICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIik7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHx8XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0aWYgKHByaW1hcnkgJiYgcHJpbWFyeS5sZW5ndGggJiYgc2Vjb25kYXJ5ICYmIHNlY29uZGFyeS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldFByZXNlbnRhdGlvbihwcmltYXJ5WzBdLCB0cnVlKSwgZ2V0UHJlc2VudGF0aW9uKHNlY29uZGFyeVswXSwgZmFsc2UpXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR0aXRsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2aWV3QW5ub3RhdGlvbi5UZXh0KSk7XG5cdFx0XHQvLyBOZWVkIHRvIGxvb3Agb24gdGFibGUgaW50byB2aWV3cyBzaW5jZSBtdWx0aSB0YWJsZSBtb2RlIGdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIChoaWRkZW4gZmlsdGVycyBvciBUYWJsZSBJZClcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlVmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgfHwge307XG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSBmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdFx0XHRcdGlmICghKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdFx0XHQvLyBOZWVkIHRvIG92ZXJyaWRlIFRhYmxlIElkIHRvIG1hdGNoIHdpdGggVGFiIEtleSAoY3VycmVudGx5IG9ubHkgdGFibGUgaXMgbWFuYWdlZCBpbiBtdWx0aXBsZSB2aWV3IG1vZGUpXG5cdFx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkID0gZ2V0VGFibGVJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiTGluZUl0ZW1cIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGNvbmZpZyAmJiBjb25maWcuYW5ub3RhdGlvbiAmJiBjb25maWcuYW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoID0gYEAke2NvbmZpZy5hbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gZ2V0Q2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoLFxuXHRcdFx0dmlzaWJsZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IGdldEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIiksXG5cdFx0XHR2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3Qgdmlld0NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRwYXRoLmNvbnRleHRQYXRoIHx8IChwYXRoLmVudGl0eVNldCAmJiBgLyR7cGF0aC5lbnRpdHlTZXR9YCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlICYmIHZpZXdDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uID1cblx0XHRcdFx0XHRcdFx0dGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdFx0XHRcdFx0PyBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCB2aWV3Q29udmVydGVyQ29udGV4dCwgZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0OiB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IHZpZXdDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0a2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uOiBwYXRoLmtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gVE9ETyBEaWFnbm9zdGljcyBtZXNzYWdlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzID0gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29udmVydGVyQ29uZmlncyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRhbm5vdGF0aW9uOiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbnZlcnRlckNvbmZpZ3MubWFwKCh2aWV3Q29udmVydGVyQ29uZmlnKSA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcblxuY29uc3QgZ2V0TXVsdGlWaWV3c0NvbnRyb2wgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXVxuKTogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRpZiAodmlld3MubGVuZ3RoID4gMSAmJiAhaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaG93VGFiQ291bnRzOiB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpIDogdW5kZWZpbmVkLCAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdFx0XHRpZDogZ2V0SWNvblRhYkJhcklEKClcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSk6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogXCJAXCIgKyBjaGFydC50ZXJtIH1dO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiBcIkBcIiArIHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgbmVlZHMgYm90aCBjaGFydCBhbmQgdGFibGUgdG8gbG9hZCB0aGUgYXBwbGljYXRpb25cIik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZnVuY3Rpb24gaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkuYWN0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tDaGFydEZpbHRlckJhcklkID0gZnVuY3Rpb24gKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSwgZmlsdGVyQmFySWQ6IHN0cmluZykge1xuXHR2aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCAmJiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCAhPT0gZmlsdGVyQmFySWQpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCA9IGZpbHRlckJhcklkO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgbXVsdGlwbGUgZW50aXR5IHNldHMgKG11bHRpcGxlIHRhYmxlIG1vZGUpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBsckNoYXJ0VmlzdWFsaXphdGlvbnMgPSBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3Qgc2hvd1Bpbm5hYmxlVG9nZ2xlID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zLnNvbWUoKHRhYmxlKSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZHluYW1pY0xpc3RSZXBvcnRJZCA9IGdldER5bmFtaWNMaXN0UmVwb3J0SUQoKTtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBnZXRGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZmlsdGVySW5pdGlhbExheW91dCA9IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8uaW5pdGlhbExheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IGZpbHRlckxheW91dCA9IGZiQ29uZmlnPy5sYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5sYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZSA9IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSA6IHRydWU7XG5cdGNvbnN0IHNob3dDbGVhckJ1dHRvbiA9IGZiQ29uZmlnLnNob3dDbGVhckJ1dHRvbiAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcuc2hvd0NsZWFyQnV0dG9uIDogZmFsc2U7XG5cblx0Y29uc3Qgb0NvbmZpZyA9IGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dCwgdmlld3MpO1xuXHRpZiAob0NvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBvQ29uZmlnLmNoYXJ0SWQ7XG5cdFx0c2luZ2xlVGFibGVJZCA9IG9Db25maWcudGFibGVJZDtcblx0fVxuXG5cdGNvbnN0IHVzZUhpZGRlbkZpbHRlckJhciA9IG1hbmlmZXN0V3JhcHBlci51c2VIaWRkZW5GaWx0ZXJCYXIoKTtcblx0Ly8gQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cblx0Ly8gVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuXHRjb25zdCBoaWRlRmlsdGVyQmFyID0gKG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpIHx8IHVzZUhpZGRlbkZpbHRlckJhcikgJiYgc2luZ2xlQ2hhcnRJZCA9PT0gXCJcIjtcblx0Y29uc3QgbHJGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0U2VsZWN0aW9uRmllbGRzKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVWaXN1YWxpemF0aW9ucyk7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zZWxlY3Rpb25GaWVsZHM7XG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zUHJvcGVydHlJbmZvO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gobHJUYWJsZVZpc3VhbGl6YXRpb25zLCBsckNoYXJ0VmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtdWx0aVZpZXdDb250cm9sID0gZ2V0TXVsdGlWaWV3c0NvbnRyb2woY29udmVydGVyQ29udGV4dCwgdmlld3MpO1xuXG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBtdWx0aVZpZXdDb250cm9sID8gdW5kZWZpbmVkIDogZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25JZHMgPSBsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdH0pXG5cdFx0LmNvbmNhdChcblx0XHRcdGxyQ2hhcnRWaXN1YWxpemF0aW9ucy5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbXG5cdFx0Li4uKGhpZGVGaWx0ZXJCYXIgJiYgIXVzZUhpZGRlbkZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKG11bHRpVmlld0NvbnRyb2wgPyBbbXVsdGlWaWV3Q29udHJvbC5pZF0gOiBbXSlcblx0XTtcblxuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiB7XG5cdFx0bWFpbkVudGl0eVNldDogc0NvbnRleHRQYXRoLFxuXHRcdG1haW5FbnRpdHlUeXBlOiBgJHtzQ29udGV4dFBhdGh9L2AsXG5cdFx0bXVsdGlWaWV3c0NvbnRyb2w6IG11bHRpVmlld0NvbnRyb2wsXG5cdFx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdGR5bmFtaWNMaXN0UmVwb3J0SWQsXG5cdFx0aGVhZGVyQWN0aW9ucyxcblx0XHRzaG93UGlubmFibGVUb2dnbGU6IHNob3dQaW5uYWJsZVRvZ2dsZSxcblx0XHRmaWx0ZXJCYXI6IHtcblx0XHRcdHByb3BlcnR5SW5mbzogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdFx0c2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0aGlkZUJhc2ljU2VhcmNoLFxuXHRcdFx0c2hvd0NsZWFyQnV0dG9uXG5cdFx0fSxcblx0XHR2aWV3czogdmlld3MsXG5cdFx0ZmlsdGVyQmFySWQ6IGhpZGVGaWx0ZXJCYXIgJiYgIXVzZUhpZGRlbkZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHRlbXBsYXRlVHlwZTogbWFuaWZlc3RXcmFwcGVyLmdldFRlbXBsYXRlVHlwZSgpLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdGZpbHRlckluaXRpYWxMYXlvdXQsXG5cdFx0ZmlsdGVyTGF5b3V0LFxuXHRcdGtwaURlZmluaXRpb25zOiBnZXRLUElEZWZpbml0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoaWRlRmlsdGVyQmFyLFxuXHRcdHVzZUhpZGRlbkZpbHRlckJhclxuXHR9O1xufTtcblxuZnVuY3Rpb24gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDb250ZW50QXJlYUlEIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiLFxuXHRcdHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGZvciAobGV0IHZpZXcgb2Ygdmlld3MpIHtcblx0XHRcdHZpZXcgPSB2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cdFx0XHRpZiAodmlldy5jaGFydENvbnRyb2xJZCAmJiB2aWV3LnRhYmxlQ29udHJvbElkKSB7XG5cdFx0XHRcdHNpbmdsZUNoYXJ0SWQgPSB2aWV3LmNoYXJ0Q29udHJvbElkO1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gdmlldy50YWJsZUNvbnRyb2xJZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAobGV0IHZpZXcgb2Ygdmlld3MpIHtcblx0XHRcdHZpZXcgPSB2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKCFzaW5nbGVUYWJsZUlkICYmICh2aWV3IGFzIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24pLnRhYmxlQ29udHJvbElkKSB7XG5cdFx0XHRcdHNpbmdsZVRhYmxlSWQgPSAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCB8fCBcIlwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFzaW5nbGVDaGFydElkICYmICh2aWV3IGFzIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24pLmNoYXJ0Q29udHJvbElkKSB7XG5cdFx0XHRcdHNpbmdsZUNoYXJ0SWQgPSAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCB8fCBcIlwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNpbmdsZUNoYXJ0SWQgJiYgc2luZ2xlVGFibGVJZCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHNpbmdsZVRhYmxlSWQgfHwgc2luZ2xlQ2hhcnRJZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjaGFydElkOiBzaW5nbGVDaGFydElkLFxuXHRcdFx0dGFibGVJZDogc2luZ2xlVGFibGVJZFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxzQkFBc0IsQ0FBQ0MsS0FBaUMsRUFBd0I7SUFDeEYsTUFBTUMsTUFBNEIsR0FBRyxFQUFFO0lBQ3ZDRCxLQUFLLENBQUNFLE9BQU8sQ0FBQyxVQUFVQyxJQUFJLEVBQUU7TUFDN0IsSUFBSSxDQUFFQSxJQUFJLENBQTBCQyxJQUFJLEVBQUU7UUFDekMsTUFBTUMsY0FBYyxHQUFJRixJQUFJLENBQTRCRyxzQkFBc0IsR0FDMUVILElBQUks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
554
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsInR5cGUiLCJ2aXN1YWxpemF0aW9ucyIsInNlY29uZGFyeVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInB1c2giLCJnZXRDaGFydFZpc3VhbGl6YXRpb25zIiwiY2hhcnRzIiwicHJpbWFyeVZpc3VhbGl6YXRpb24iLCJDaGFydCIsImdldERlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGRzIiwiZGVmYXVsdFNlbWFudGljRGF0ZXMiLCJmaWx0ZXJGaWVsZCIsInNldHRpbmdzIiwiZGVmYXVsdFZhbHVlcyIsImxlbmd0aCIsImdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJpc0FMUCIsImFubm90YXRpb25QYXRoIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImVycm9yTWVzc2FnZUZvckFMUCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiRXJyb3IiLCJpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCIsInVuZGVmaW5lZCIsImlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50IiwiZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJnZXRWaWV3Iiwidmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb24iLCJjb25maWciLCJpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24iLCJjdXJyZW50Q29uZmlnIiwia2V5IiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiYW5ub3RhdGlvbiIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRFbnRpdHlUeXBlIiwidGFibGVDb250cm9sSWQiLCJjaGFydENvbnRyb2xJZCIsInRpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJjcmVhdGVWaXN1YWxpemF0aW9uIiwiY3VycmVudFByZXNlbnRhdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsInNFcnJvciIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsInZpc2libGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInZpZXdBbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJUZXh0IiwidmlzdWFsaXphdGlvbkRlZmluaXRpb24iLCJpbmRleCIsInRhYmxlVmlzdWFsaXphdGlvbiIsImZpbHRlcnMiLCJjb250cm9sIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwia2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uIiwiZ2V0VGFibGVJRCIsInRlcm0iLCJTZWxlY3Rpb25WYXJpYW50Iiwic3BsaXQiLCJjaGFydFZpc3VhbGl6YXRpb24iLCJnZXRDaGFydElEIiwibXVsdGlWaWV3cyIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiZ2V0Q3VzdG9tVGFiSUQiLCJnZXRWaWV3cyIsInNldHRpbmdzVmlld3MiLCJ2aWV3Q29udmVydGVyQ29uZmlncyIsInBhdGgiLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwiZ2V0QWxwVmlld0NvbmZpZyIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJnZXRNdWx0aVZpZXdzQ29udHJvbCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdzRGVmaW5pdGlvbiIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwiZ2V0SWNvblRhYkJhcklEIiwidmlld0NvbmZpZ3MiLCJjaGFydCIsInRhYmxlIiwiZ2V0RGVmYXVsdENoYXJ0IiwiZ2V0SGVhZGVyQWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImFjdGlvbnMiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJsckNoYXJ0VmlzdWFsaXphdGlvbnMiLCJzaG93UGlubmFibGVUb2dnbGUiLCJzb21lIiwic2luZ2xlVGFibGVJZCIsInNpbmdsZUNoYXJ0SWQiLCJkeW5hbWljTGlzdFJlcG9ydElkIiwiZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCIsImdldEZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzaG93Q2xlYXJCdXR0b24iLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwiaGlkZUZpbHRlckJhciIsImlzRmlsdGVyQmFySGlkZGVuIiwibHJGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwic2VsZWN0aW9uRmllbGRzIiwicHJvcGVydHlJbmZvRmllbGRzIiwic1Byb3BlcnR5SW5mbyIsImhpZGVCYXNpY1NlYXJjaCIsImdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCIsIm11bHRpVmlld0NvbnRyb2wiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGVhZGVyQWN0aW9ucyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJ0YXJnZXRDb250cm9sSWRzIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwic3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIiLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJtdWx0aVZpZXdzQ29udHJvbCIsImZpbHRlckJhciIsInByb3BlcnR5SW5mbyIsImZpbHRlckNvbmRpdGlvbnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImpvaW4iLCJ0ZW1wbGF0ZVR5cGUiLCJrcGlEZWZpbml0aW9ucyIsImdldEtQSURlZmluaXRpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCwgRmlsdGVyRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0Z2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLCBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgS1BJRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQge1xuXHRnZXRDaGFydElELFxuXHRnZXRDdXN0b21UYWJJRCxcblx0Z2V0RHluYW1pY0xpc3RSZXBvcnRJRCxcblx0Z2V0RmlsdGVyQmFySUQsXG5cdGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdGdldEljb25UYWJCYXJJRCxcblx0Z2V0VGFibGVJRFxufSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG50eXBlIFZpZXdBbm5vdGF0aW9ucyA9IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25WYXJpYW50O1xudHlwZSBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRhcmdldENvbnRyb2xJZHM6IHN0cmluZztcbn07XG5cbnR5cGUgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IFZpZXdQYXRoQ29uZmlndXJhdGlvbiAmIHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIFNpbmdsZVZpZXdDb25maWd1cmF0aW9uID0ge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24gPSBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uICYge1xuXHR0eXBlOiBzdHJpbmc7XG59O1xuXG50eXBlIFZpZXdDb25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG50eXBlIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbjtcblxudHlwZSBWaWV3Q29udmVydGVyU2V0dGluZ3MgPSBWaWV3Q29uZmlndXJhdGlvbiAmIHtcblx0Y29udmVydGVyQ29udGV4dD86IENvbnZlcnRlckNvbnRleHQ7XG59O1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiA9IHtcblx0bWFpbkVudGl0eVNldDogc3RyaW5nO1xuXHRtYWluRW50aXR5VHlwZTogc3RyaW5nOyAvLyBlbnRpdHlUeXBlPiBhdCB0aGUgc3RhcnQgb2YgTFIgdGVtcGxhdGluZ1xuXHRzaW5nbGVUYWJsZUlkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2luZ2xlQ2hhcnRJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdGR5bmFtaWNMaXN0UmVwb3J0SWQ6IHN0cmluZztcblx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXI/OiBzdHJpbmc7XG5cdG11bHRpVmlld3NDb250cm9sPzogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dQaW5uYWJsZVRvZ2dsZT86IGJvb2xlYW47XG5cdGZpbHRlckJhcjoge1xuXHRcdHByb3BlcnR5SW5mbzogYW55O1xuXHRcdHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0XHRoaWRlQmFzaWNTZWFyY2g6IGJvb2xlYW47XG5cdFx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRTZW1hbnRpY0RhdGU+IHwge307XG5cdH07XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcblx0aGlkZUZpbHRlckJhcjogYm9vbGVhbjtcblx0dXNlSGlkZGVuRmlsdGVyQmFyOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uID0gU2luZ2xlVmlld0RlZmluaXRpb24gfCBDdXN0b21WaWV3RGVmaW5pdGlvbiB8IENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHR0YWJsZUNvbnRyb2xJZDogc3RyaW5nO1xuXHRjaGFydENvbnRyb2xJZDogc3RyaW5nO1xuXHRkZWZhdWx0UGF0aD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbVZpZXdEZWZpbml0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0ZnJhZ21lbnQ6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRjdXN0b21UYWJJZDogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVZpZXdEZWZpbml0aW9uID0gU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdHRhYmxlQ29udHJvbElkPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0Y2hhcnRDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbnRlbnRBcmVhSUQgPSB7XG5cdGNoYXJ0SWQ6IHN0cmluZztcblx0dGFibGVJZDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IHRhYmxlcy5cbiAqXG4gKiBAcGFyYW0gdmlld3MgVGhlIGxpc3QgcmVwb3J0IHZpZXdzIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgdGFibGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IHRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0dGFibGVzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZXM7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ2hhcnRWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCBjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0Y2hhcnRzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjaGFydHM7XG59XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPik6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRTZW1hbnRpY0RhdGU+IHtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueSA9IHt9O1xuXHRmb3IgKGNvbnN0IGZpbHRlckZpZWxkIGluIGZpbHRlckZpZWxkcykge1xuXHRcdGlmIChmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcz8ubGVuZ3RoKSB7XG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlc1tmaWx0ZXJGaWVsZF0gPSBmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcztcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlZmF1bHRTZW1hbnRpY0RhdGVzO1xufTtcblxuLyoqXG4gKiBGaW5kIGEgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnQuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBpc0FMUFxuICogQHJldHVybnMgQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNBTFA6IGJvb2xlYW5cbik6IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlcnJvck1lc3NhZ2VGb3JBTFAgPSBcIkFMUCBmbGF2b3IgbmVlZHMgYm90aCBjaGFydCBhbmQgdGFibGUgdG8gbG9hZCB0aGUgYXBwbGljYXRpb25cIjtcblxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSkge1xuXHRcdFx0XHRpZiAoaXNBTFApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgaXNBTFApID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9IGVsc2UgaWYgKGlzQUxQKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fSBlbHNlIGlmIChpc0FMUCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZUZvckFMUCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFpc0FMUCkge1xuXHRcdHJldHVybiBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uICh2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0bGV0IGNvbmZpZyA9IHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uO1xuXHRpZiAoY29uZmlnLmNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRsZXQgY29udmVydGVyQ29udGV4dCA9IGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRDb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogY3VycmVudENvbmZpZyBpcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHtcblx0XHRcdHJldHVybiAoY3VycmVudENvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbihjb25maWcpXG5cdFx0KTtcblx0XHRsZXQgdGFibGVDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCBjaGFydENvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgY3JlYXRlVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50UHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBjdXJyZW50UHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGlmIChpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudFByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKGlzUHJpbWFyeSA/IFwiUHJpbWFyeVwiIDogXCJTZWNvbmRhcnlcIikgKyBcIiB2aXN1YWxpc2F0aW9uIG5lZWRzIHZhbGlkIFwiICsgKGlzUHJpbWFyeSA/IFwiY2hhcnRcIiA6IFwidGFibGVcIikpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoaXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLCBpc1ByaW1hcnk6IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0aWYgKGFubm90YXRpb24gfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdFx0YW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzRXJyb3IgPVxuXHRcdFx0XHRcdFwiQW5ub3RhdGlvbiBQYXRoIGZvciB0aGUgXCIgK1xuXHRcdFx0XHRcdChpc1ByaW1hcnkgPyBcInByaW1hcnlcIiA6IFwic2Vjb25kYXJ5XCIpICtcblx0XHRcdFx0XHRcIiB2aXN1YWxpc2F0aW9uIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kXCI7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihzRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pPy5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0XHR0YWJsZUNvbnRyb2xJZCA9IChzZWNvbmRhcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdHZpc2libGVcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoXG5cdFx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pICYmXG5cdFx0XHRwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiZcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIik7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHx8XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0aWYgKHByaW1hcnkgJiYgcHJpbWFyeS5sZW5ndGggJiYgc2Vjb25kYXJ5ICYmIHNlY29uZGFyeS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldFByZXNlbnRhdGlvbihwcmltYXJ5WzBdLCB0cnVlKSwgZ2V0UHJlc2VudGF0aW9uKHNlY29uZGFyeVswXSwgZmFsc2UpXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR0aXRsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2aWV3QW5ub3RhdGlvbi5UZXh0KSk7XG5cdFx0XHQvLyBOZWVkIHRvIGxvb3Agb24gdGFibGUgaW50byB2aWV3cyBzaW5jZSBtdWx0aSB0YWJsZSBtb2RlIGdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIChoaWRkZW4gZmlsdGVycyBvciBUYWJsZSBJZClcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlVmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgfHwge307XG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSBmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdFx0XHRcdGlmICghKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdFx0XHQvLyBOZWVkIHRvIG92ZXJyaWRlIFRhYmxlIElkIHRvIG1hdGNoIHdpdGggVGFiIEtleSAoY3VycmVudGx5IG9ubHkgdGFibGUgaXMgbWFuYWdlZCBpbiBtdWx0aXBsZSB2aWV3IG1vZGUpXG5cdFx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkID0gZ2V0VGFibGVJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiTGluZUl0ZW1cIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGNvbmZpZy5hbm5vdGF0aW9uPy50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghY29uZmlnLmFubm90YXRpb24uU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0XHRcdGBUaGUgU2VsZWN0aW9uIFZhcmlhbnQgaXMgbWlzc2luZyBmb3IgdGhlIFNlbGVjdGlvbiBQcmVzZW50YXRpb24gVmFyaWFudCAke2NvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX1gXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IGBAJHtjb25maWcuYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50Py5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdfWA7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0XHRcdFx0XHQvL01EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHRcdFx0XHRcdC8vYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdFx0XHRcdFx0Ly9UbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgcmVsYXRlZCB0byB0aGUgVGFiIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRcdFx0XHRcdFx0Ly9jYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycy5wYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvblZhcmlhbnRQYXRoIH0pO1xuXHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyA9IGZpbHRlcnM7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24uaWQgPSBnZXRDaGFydElEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0XHRcdGNoYXJ0VmlzdWFsaXphdGlvbi5tdWx0aVZpZXdzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHRcdH0gZWxzZSBpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0Y2hhcnRDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5pZDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJlc2VudGF0aW9uLFxuXHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdHRpdGxlLFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGgsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gZ2V0Q3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKSxcblx0XHRcdHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCxcblx0XHRcdHZpc2libGVcblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c2V0dGluZ3NWaWV3czogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRpZiAoc2V0dGluZ3NWaWV3cykge1xuXHRcdHNldHRpbmdzVmlld3MucGF0aHMuZm9yRWFjaCgocGF0aDogVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0aWYgKHNldHRpbmdzVmlld3MucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoKHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24pLnRlbXBsYXRlKSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFwiQ3VzdG9tXCIsXG5cdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIGAvJHtwYXRoLmVudGl0eVNldH1gKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cblx0XHRcdFx0aWYgKGVudGl0eVR5cGUgJiYgdmlld0NvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRsZXQgYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0XHRcdFx0XHQ/IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIHZpZXdDb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQ6IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAoKHZpZXdDb252ZXJ0ZXJDb25maWcpID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuXG5jb25zdCBnZXRNdWx0aVZpZXdzQ29udHJvbCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdXG4pOiBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGlmICh2aWV3cy5sZW5ndGggPiAxICYmICFoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNob3dUYWJDb3VudHM6IHZpZXdzRGVmaW5pdGlvbiA/IHZpZXdzRGVmaW5pdGlvbj8uc2hvd0NvdW50cyB8fCBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCkgOiB1bmRlZmluZWQsIC8vIHdpdGggbXVsdGkgRW50aXR5U2V0cywgdGFiIGNvdW50cyBhcmUgZGlzcGxheWVkIGJ5IGRlZmF1bHRcblx0XHRcdGlkOiBnZXRJY29uVGFiQmFySUQoKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiBcIkBcIiArIGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IFwiQFwiICsgdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQUxQIGZsYXZvciBuZWVkcyBib3RoIGNoYXJ0IGFuZCB0YWJsZSB0byBsb2FkIHRoZSBhcHBsaWNhdGlvblwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuXG5mdW5jdGlvbiBoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihbXSwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KS5hY3Rpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbiAodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdLCBmaWx0ZXJCYXJJZDogc3RyaW5nKSB7XG5cdHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdGlmICghc0NvbnRleHRQYXRoKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbnRpdHlTZXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGlzc3VlIEknZCBzYXlcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkFuIEVudGl0eVNldCBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgYSBMaXN0UmVwb3J0LCBwbGVhc2UgYWRqdXN0IHlvdXIgYGVudGl0eVNldGAgcHJvcGVydHkgdG8gcG9pbnQgdG8gb25lLlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdID0gZ2V0Vmlld3MoY29udmVydGVyQ29udGV4dCwgdmlld3NEZWZpbml0aW9uKTtcblx0Y29uc3QgbHJUYWJsZVZpc3VhbGl6YXRpb25zID0gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IGxyQ2hhcnRWaXN1YWxpemF0aW9ucyA9IGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSgodGFibGUpID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBkeW5hbWljTGlzdFJlcG9ydElkID0gZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCgpO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IGdldEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBmaWx0ZXJJbml0aWFsTGF5b3V0ID0gZmJDb25maWc/LmluaXRpYWxMYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgZmlsdGVyTGF5b3V0ID0gZmJDb25maWc/LmxheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmxheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IHVzZVNlbWFudGljRGF0ZVJhbmdlID0gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlIDogdHJ1ZTtcblx0Y29uc3Qgc2hvd0NsZWFyQnV0dG9uID0gZmJDb25maWcuc2hvd0NsZWFyQnV0dG9uICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy5zaG93Q2xlYXJCdXR0b24gOiBmYWxzZTtcblxuXHRjb25zdCBvQ29uZmlnID0gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGlmIChvQ29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IG9Db25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gb0NvbmZpZy50YWJsZUlkO1xuXHR9XG5cblx0Y29uc3QgdXNlSGlkZGVuRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLnVzZUhpZGRlbkZpbHRlckJhcigpO1xuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSAobWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgfHwgdXNlSGlkZGVuRmlsdGVyQmFyKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG11bHRpVmlld0NvbnRyb2wgPSBnZXRNdWx0aVZpZXdzQ29udHJvbChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IG11bHRpVmlld0NvbnRyb2wgPyB1bmRlZmluZWQgOiBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IHVzZVNlbWFudGljRGF0ZVJhbmdlID8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpIDoge307XG5cblx0Ly8gU29ydCBoZWFkZXIgYWN0aW9ucyBhY2NvcmRpbmcgdG8gcG9zaXRpb24gYXR0cmlidXRlcyBpbiBtYW5pZmVzdFxuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gW10gOiBbZmlsdGVyQmFySWRdKSxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4obXVsdGlWaWV3Q29udHJvbCA/IFttdWx0aVZpZXdDb250cm9sLmlkXSA6IFtdKVxuXHRdO1xuXG5cdGNvbnN0IHN0aWNreVN1YmhlYWRlclByb3ZpZGVyID1cblx0XHRtdWx0aVZpZXdDb250cm9sICYmIG1hbmlmZXN0V3JhcHBlci5nZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24oKSA/IG11bHRpVmlld0NvbnRyb2wuaWQgOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHtcblx0XHRtYWluRW50aXR5U2V0OiBzQ29udGV4dFBhdGgsXG5cdFx0bWFpbkVudGl0eVR5cGU6IGAke3NDb250ZXh0UGF0aH0vYCxcblx0XHRtdWx0aVZpZXdzQ29udHJvbDogbXVsdGlWaWV3Q29udHJvbCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0ZHluYW1pY0xpc3RSZXBvcnRJZCxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2gsXG5cdFx0XHRzaG93Q2xlYXJCdXR0b25cblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXIsXG5cdFx0dXNlSGlkZGVuRmlsdGVyQmFyXG5cdH07XG59O1xuXG5mdW5jdGlvbiBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENvbnRlbnRBcmVhSUQgfCB1bmRlZmluZWQge1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCIsXG5cdFx0c2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KSB7XG5cdFx0Zm9yIChsZXQgdmlldyBvZiB2aWV3cykge1xuXHRcdFx0dmlldyA9IHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICh2aWV3LmNoYXJ0Q29udHJvbElkICYmIHZpZXcudGFibGVDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlQ2hhcnRJZCA9IHZpZXcuY2hhcnRDb250cm9sSWQ7XG5cdFx0XHRcdHNpbmdsZVRhYmxlSWQgPSB2aWV3LnRhYmxlQ29udHJvbElkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChsZXQgdmlldyBvZiB2aWV3cykge1xuXHRcdFx0dmlldyA9IHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb247XG5cdFx0XHRpZiAoIXNpbmdsZVRhYmxlSWQgJiYgKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9ICh2aWV3IGFzIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24pLnRhYmxlQ29udHJvbElkIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXNpbmdsZUNoYXJ0SWQgJiYgKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlQ2hhcnRJZCA9ICh2aWV3IGFzIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24pLmNoYXJ0Q29udHJvbElkIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2luZ2xlQ2hhcnRJZCAmJiBzaW5nbGVUYWJsZUlkKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoc2luZ2xlVGFibGVJZCB8fCBzaW5nbGVDaGFydElkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNoYXJ0SWQ6IHNpbmdsZUNoYXJ0SWQsXG5cdFx0XHR0YWJsZUlkOiBzaW5nbGVUYWJsZUlkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLHNCQUFzQixDQUFDQyxLQUFpQyxFQUF3QjtJQUN4RixNQUFNQyxNQUE0QixHQUFHLEVBQUU7SUFDdkNELEtBQUssQ0FB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
@@ -2,5 +2,5 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/controls/Common/Action","sap/fe/core/converters/controls/ListReport/FilterBar","sap/fe/core/converters/helpers/ConfigurableObject","sap/fe/core/helpers/BindingToolkit","../controls/Common/DataVisualization","../controls/Common/KPI","../helpers/ID","../ManifestSettings"],function(t,e,n,i,a,o,r,s){"use strict";var l={};var c=s.VisualizationType;var u=s.VariantManagementType;var f=s.TemplateType;var d=r.getTableID;var p=r.getIconTabBarID;var h=r.getFilterVariantManagementID;var v=r.getFilterBarID;var y=r.getDynamicListReportID;var g=r.getCustomTabID;var m=r.getChartID;var C=o.getKPIDefinitions;var b=a.isSelectionPresentationCompliant;var P=a.isPresentationCompliant;var T=a.getSelectionVariant;var I=a.getSelectionPresentationVariant;var w=a.getDefaultPresentationVariant;var E=a.getDefaultLineItem;var V=a.getDefaultChart;var z=a.getDataVisualizationConfiguration;var S=i.getExpressionFromAnnotation;var k=i.compileExpression;var A=n.insertCustomElements;var M=e.getSelectionFields;var D=e.getManifestFilterFields;var F=e.getFilterBarhideBasicSearch;var L=t.getActionsFromManifest;function B(t){const e=[];t.forEach(function(t){if(!t.type){const n=t.secondaryVisualization?t.secondaryVisualization.visualizations:t.presentation.visualizations;n.forEach(function(t){if(t.type===c.Table){e.push(t)}})}});return e}function x(t){const e=[];t.forEach(function(t){if(!t.type){const n=t.primaryVisualization?t.primaryVisualization.visualizations:t.presentation.visualizations;n.forEach(function(t){if(t.type===c.Chart){e.push(t)}})}});return e}const R=function(t){const e={};for(const s in t){var n,i,a;if((n=t[s])!==null&&n!==void 0&&(i=n.settings)!==null&&i!==void 0&&(a=i.defaultValues)!==null&&a!==void 0&&a.length){var o,r;e[s]=(o=t[s])===null||o===void 0?void 0:(r=o.settings)===null||r===void 0?void 0:r.defaultValues}}return e};function W(t,e,n){const i=e.getManifestWrapper().getDefaultTemplateAnnotationPath();const a=I(t,i,e);const o="ALP flavor needs both chart and table to load the application";if(i&&a){const t=a.PresentationVariant;if(!t){throw new Error("Presentation Variant is not configured in the SPV mentioned in the manifest")}const e=P(t,n);if(!e){if(n){throw new Error(o)}else{return undefined}}if(b(a,n)){return a}}if(a){if(b(a,n)){return a}else if(n){throw new Error(o)}}const r=w(t);if(r){if(P(r,n)){return r}else if(n){throw new Error(o)}}if(!n){const e=E(t);if(e){return e}}return undefined}const H=function(t){let e=t;if(e.converterContext){var n,i;let t=e.converterContext;e=e;const a=function(t){return t.key!==undefined};let o=z(e.annotation?t.getRelativeAnnotationPath(e.annotation.fullyQualifiedName,t.getEntityType()):"",true,t,e,undefined,undefined,a(e));let r="";let s="";let l="";let u="";const p=function(t,e){let n;for(const i of t.visualizations){if(e&&i.type===c.Chart){n=i;break}if(!e&&i.type===c.Table){n=i;break}}const i=Object.assign({},t);if(n){i.visualizations=[n]}else{throw new Error((e?"Primary":"Secondary")+" visualisation needs valid "+(e?"chart":"table"))}return i};const h=function(n,i){const a=t.getEntityTypeAnnotation(n.annotationPath);const r=a.annotation;t=a.converterContext;const s=r;if(s||t.getTemplateType()===f.AnalyticalListPage){o=z(s?t.getRelativeAnnotationPath(s.fullyQualifiedName,t.getEntityType()):"",true,t,e);return o}else{const t="Annotation Path for the "+(i?"primary":"secondary")+" visualisation mentioned in the manifest is not found";throw new Error(t)}};const v=function(t,n){var i,a,o;const l=p(t[0],true);s=l===null||l===void 0?void 0:(i=l.visualizations[0])===null||i===void 0?void 0:i.id;const c=p(t[1]?t[1]:t[0],false);r=c===null||c===void 0?void 0:(a=c.visualizations[0])===null||a===void 0?void 0:(o=a.annotation)===null||o===void 0?void 0:o.id;if(l&&c){e=e;const t=e.visible;const i={primaryVisualization:l,secondaryVisualization:c,tableControlId:r,chartControlId:s,defaultPath:n,visible:t};return i}};if(((n=o)===null||n===void 0?void 0:(i=n.visualizations)===null||i===void 0?void 0:i.length)===2&&t.getTemplateType()===f.AnalyticalListPage){const t=v([o],"both");if(t){return t}}else if(t.getManifestWrapper().hasMultipleVisualizations(e)||t.getTemplateType()===f.AnalyticalListPage){const{primary:t,secondary:n}=e;if(t&&t.length&&n&&n.length){const i=v([h(t[0],true),h(n[0],false)],e.defaultPath);if(i){return i}}else{throw new Error("SecondaryItems in the Views is not present")}}else if(a(e)){const n=t.getEntityTypeAnnotation(e.annotationPath);const i=n.annotation;t=n.converterContext;l=k(S(i.Text));o.visualizations.forEach((t,n)=>{switch(t.type){case c.Table:const t=o.visualizations[n];const i=t.control.filters||{};i.hiddenFilters=i.hiddenFilters||{paths:[]};if(!e.keepPreviousPersonalization){t.annotation.id=d(e.key||"","LineItem")}e=e;if(e&&e.annotation&&e.annotation.term==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){u=`@${e.annotation.SelectionVariant.fullyQualifiedName.split("@")[1]}`}else{u=e.annotationPath}i.hiddenFilters.paths.push({annotationPath:u});t.control.filters=i;break;case c.Chart:const a=o.visualizations[n];a.id=m(e.key||"","Chart");a.multiViews=true;break;default:break}})}o.visualizations.forEach(t=>{if(t.type===c.Table){r=t.annotation.id}else if(t.type===c.Chart){s=t.id}});e=e;const y=e.visible;return{presentation:o,tableControlId:r,chartControlId:s,title:l,selectionVariantPath:u,visible:y}}else{e=e;const t=e.label,n=e.template,i=e.type,a=g(e.key||""),o=e.visible;return{title:t,fragment:n,type:i,customTabId:a,visible:o}}};const j=function(t,e){let n=[];if(e){e.paths.forEach(i=>{if(t.getManifestWrapper().hasMultipleVisualizations(i)){if(e.paths.length>1){throw new Error("ALP flavor cannot have multiple views")}else{i=i;n.push({converterContext:t,primary:i.primary,secondary:i.secondary,defaultPath:i.defaultPath})}}else if(i.template){i=i;n.push({key:i.key,label:i.label,template:i.template,type:"Custom",visible:i.visible})}else{i=i;const e=t.getConverterContextFor(i.contextPath||i.entitySet&&`/${i.entitySet}`||t.getContextPath()),a=e.getEntityType();if(a&&e){let t;const o=e.getEntityTypeAnnotation(i.annotationPath);const r=o.annotation;if(r){t=r.term==="com.sap.vocabularies.UI.v1.SelectionVariant"?W(a,e,false):r;n.push({converterContext:e,annotation:t,annotationPath:i.annotationPath,keepPreviousPersonalization:i.keepPreviousPersonalization,key:i.key,visible:i.visible})}}else{}}})}else{const e=t.getEntityType();if(t.getTemplateType()===f.AnalyticalListPage){n=Q(t,n)}else{n.push({annotation:W(e,t,false),converterContext:t})}}return n.map(t=>H(t))};const N=function(t,e){const n=t.getManifestWrapper();const i=n.getViewConfiguration();if(e.length>1&&!$(t)){return{showTabCounts:i?(i===null||i===void 0?void 0:i.showCounts)||n.hasMultipleEntitySets():undefined,id:p()}}return undefined};function Q(t,e){const n=t.getEntityType();const i=W(n,t,true);let a,o;if(i){e.push({annotation:i,converterContext:t})}else{a=V(n);o=E(n);if(a&&o){const n=[{annotationPath:"@"+a.term}];const i=[{annotationPath:"@"+o.term}];e.push({converterContext:t,primary:n,secondary:i,defaultPath:"both"})}else{throw new Error("ALP flavor needs both chart and table to load the application")}}return e}function $(t){return t.getManifestWrapper().hasMultipleVisualizations()||t.getTemplateType()===f.AnalyticalListPage}const K=function(t){const e=t.getManifestWrapper();return A([],L(e.getHeaderActions(),t).actions)};l.getHeaderActions=K;const O=function(t,e){t.forEach(t=>{if(!t.type){const n=t.presentation;n.visualizations.forEach(t=>{if(t.type===c.Chart&&t.filterId!==e){t.filterId=e}})}})};l.checkChartFilterBarId=O;const U=function(t){const e=t.getEntityType();const n=t.getContextPath();if(!n){throw new Error("An EntitySet is required to be able to display a ListReport, please adjust your `entitySet` property to point to one.")}const i=t.getManifestWrapper();const a=i.getViewConfiguration();const o=i.hasMultipleEntitySets();const r=j(t,a);const s=B(r);const l=x(r);const c=s.some(t=>t.control.type==="ResponsiveTable");let f="";let d="";const p=y();const g=v(n);const m=h(g);const b=i.getFilterConfiguration();const P=(b===null||b===void 0?void 0:b.initialLayout)!==undefined?b===null||b===void 0?void 0:b.initialLayout.toLowerCase():"compact";const I=(b===null||b===void 0?void 0:b.layout)!==undefined?b===null||b===void 0?void 0:b.layout.toLowerCase():"compact";const w=b.useSemanticDateRange!==undefined?b.useSemanticDateRange:true;const E=b.showClearButton!==undefined?b.showClearButton:false;const V=q(t,r);if(V){d=V.chartId;f=V.tableId}const z=i.useHiddenFilterBar();const S=(i.isFilterBarHidden()||z)&&d==="";const k=M(t,s);const A=k.selectionFields;const L=k.sPropertyInfo;const W=F(s,l,t);const H=N(t,r);const Q=H?undefined:T(e,t);const U=w?R(D(e,t)):{};const G=K(t);if(o){O(r,g)}const J=s.map(t=>t.annotation.id).concat(l.map(t=>t.id));const X=[...S&&!z?[]:[g],...i.getVariantManagement()!==u.Control?J:[],...H?[H.id]:[]];const Y=H&&i.getStickyMultiTabHeaderConfiguration()?H.id:undefined;return{mainEntitySet:n,mainEntityType:`${n}/`,multiViewsControl:H,stickySubheaderProvider:Y,singleTableId:f,singleChartId:d,dynamicListReportId:p,headerActions:G,showPinnableToggle:c,filterBar:{propertyInfo:L,selectionFields:A,hideBasicSearch:W,showClearButton:E},views:r,filterBarId:S&&!z?"":g,filterConditions:{selectionVariant:Q,defaultSemanticDates:U},variantManagement:{id:m,targetControlIds:X.join(",")},hasMultiVisualizations:$(t),templateType:i.getTemplateType(),useSemanticDateRange:w,filterInitialLayout:P,filterLayout:I,kpiDefinitions:C(t),hideFilterBar:S,useHiddenFilterBar:z}};l.convertPage=U;function q(t,e){let n="",i="";if(t.getManifestWrapper().hasMultipleVisualizations()||t.getTemplateType()===f.AnalyticalListPage){for(let t of e){t=t;if(t.chartControlId&&t.tableControlId){i=t.chartControlId;n=t.tableControlId;break}}}else{for(let t of e){t=t;if(!n&&t.tableControlId){n=t.tableControlId||""}if(!i&&t.chartControlId){i=t.chartControlId||""}if(i&&n){break}}}if(n||i){return{chartId:i,tableId:n}}return undefined}return l},false);
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action","sap/fe/core/converters/controls/ListReport/FilterBar","sap/fe/core/converters/helpers/ConfigurableObject","sap/fe/core/helpers/BindingToolkit","../controls/Common/DataVisualization","../controls/Common/KPI","../helpers/ID","../ManifestSettings"],function(t,e,n,i,a,o,r,s){"use strict";var l={};var c=s.VisualizationType;var u=s.VariantManagementType;var f=s.TemplateType;var d=r.getTableID;var p=r.getIconTabBarID;var v=r.getFilterVariantManagementID;var h=r.getFilterBarID;var y=r.getDynamicListReportID;var g=r.getCustomTabID;var m=r.getChartID;var C=o.getKPIDefinitions;var b=a.isSelectionPresentationCompliant;var P=a.isPresentationCompliant;var T=a.getSelectionVariant;var I=a.getSelectionPresentationVariant;var V=a.getDefaultPresentationVariant;var w=a.getDefaultLineItem;var E=a.getDefaultChart;var z=a.getDataVisualizationConfiguration;var S=i.getExpressionFromAnnotation;var M=i.compileExpression;var k=n.insertCustomElements;var A=e.getSelectionFields;var D=e.getManifestFilterFields;var F=e.getFilterBarHideBasicSearch;var L=t.getActionsFromManifest;function B(t){const e=[];t.forEach(function(t){if(!t.type){const n=t.secondaryVisualization?t.secondaryVisualization.visualizations:t.presentation.visualizations;n.forEach(function(t){if(t.type===c.Table){e.push(t)}})}});return e}function x(t){const e=[];t.forEach(function(t){if(!t.type){const n=t.primaryVisualization?t.primaryVisualization.visualizations:t.presentation.visualizations;n.forEach(function(t){if(t.type===c.Chart){e.push(t)}})}});return e}const R=function(t){const e={};for(const s in t){var n,i,a;if((n=t[s])!==null&&n!==void 0&&(i=n.settings)!==null&&i!==void 0&&(a=i.defaultValues)!==null&&a!==void 0&&a.length){var o,r;e[s]=(o=t[s])===null||o===void 0?void 0:(r=o.settings)===null||r===void 0?void 0:r.defaultValues}}return e};function W(t,e,n){const i=e.getManifestWrapper().getDefaultTemplateAnnotationPath();const a=I(t,i,e);const o="ALP flavor needs both chart and table to load the application";if(a){if(i){const t=a.PresentationVariant;if(!t){throw new Error("Presentation Variant is not configured in the SPV mentioned in the manifest")}if(!P(t,n)){if(n){throw new Error(o)}return undefined}}if(b(a,n)===true){return a}else if(n){throw new Error(o)}}const r=V(t);if(r){if(P(r,n)){return r}else if(n){throw new Error(o)}}if(!n){return w(t)}return undefined}const H=function(t){let e=t;if(e.converterContext){var n,i;let t=e.converterContext;e=e;const a=function(t){return t.key!==undefined};let o=z(e.annotation?t.getRelativeAnnotationPath(e.annotation.fullyQualifiedName,t.getEntityType()):"",true,t,e,undefined,undefined,a(e));let r="";let s="";let l="";let u="";const p=function(t,e){let n;for(const i of t.visualizations){if(e&&i.type===c.Chart){n=i;break}if(!e&&i.type===c.Table){n=i;break}}const i=Object.assign({},t);if(n){i.visualizations=[n]}else{throw new Error((e?"Primary":"Secondary")+" visualisation needs valid "+(e?"chart":"table"))}return i};const v=function(n,i){const a=t.getEntityTypeAnnotation(n.annotationPath);const r=a.annotation;t=a.converterContext;const s=r;if(s||t.getTemplateType()===f.AnalyticalListPage){o=z(s?t.getRelativeAnnotationPath(s.fullyQualifiedName,t.getEntityType()):"",true,t,e);return o}else{const t="Annotation Path for the "+(i?"primary":"secondary")+" visualisation mentioned in the manifest is not found";throw new Error(t)}};const h=function(t,n){var i,a,o;const l=p(t[0],true);s=l===null||l===void 0?void 0:(i=l.visualizations[0])===null||i===void 0?void 0:i.id;const c=p(t[1]?t[1]:t[0],false);r=c===null||c===void 0?void 0:(a=c.visualizations[0])===null||a===void 0?void 0:(o=a.annotation)===null||o===void 0?void 0:o.id;if(l&&c){e=e;const t=e.visible;const i={primaryVisualization:l,secondaryVisualization:c,tableControlId:r,chartControlId:s,defaultPath:n,visible:t};return i}};if(!t.getManifestWrapper().hasMultipleVisualizations(e)&&((n=o)===null||n===void 0?void 0:(i=n.visualizations)===null||i===void 0?void 0:i.length)===2&&t.getTemplateType()===f.AnalyticalListPage){const t=h([o],"both");if(t){return t}}else if(t.getManifestWrapper().hasMultipleVisualizations(e)||t.getTemplateType()===f.AnalyticalListPage){const{primary:t,secondary:n}=e;if(t&&t.length&&n&&n.length){const i=h([v(t[0],true),v(n[0],false)],e.defaultPath);if(i){return i}}else{throw new Error("SecondaryItems in the Views is not present")}}else if(a(e)){const n=t.getEntityTypeAnnotation(e.annotationPath);const i=n.annotation;t=n.converterContext;l=M(S(i.Text));o.visualizations.forEach((t,n)=>{var i;switch(t.type){case c.Table:const t=o.visualizations[n];const r=t.control.filters||{};r.hiddenFilters=r.hiddenFilters||{paths:[]};if(!e.keepPreviousPersonalization){t.annotation.id=d(e.key||"","LineItem")}e=e;if(((i=e.annotation)===null||i===void 0?void 0:i.term)==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){var a;if(!e.annotation.SelectionVariant){throw new Error(`The Selection Variant is missing for the Selection Presentation Variant ${e.annotation.fullyQualifiedName}`)}u=`@${(a=e.annotation.SelectionVariant)===null||a===void 0?void 0:a.fullyQualifiedName.split("@")[1]}`}else{u=e.annotationPath}r.hiddenFilters.paths.push({annotationPath:u});t.control.filters=r;break;case c.Chart:const s=o.visualizations[n];s.id=m(e.key||"","Chart");s.multiViews=true;break;default:break}})}o.visualizations.forEach(t=>{if(t.type===c.Table){r=t.annotation.id}else if(t.type===c.Chart){s=t.id}});e=e;const y=e.visible;return{presentation:o,tableControlId:r,chartControlId:s,title:l,selectionVariantPath:u,visible:y}}else{e=e;const t=e.label,n=e.template,i=e.type,a=g(e.key||""),o=e.visible;return{title:t,fragment:n,type:i,customTabId:a,visible:o}}};const j=function(t,e){let n=[];if(e){e.paths.forEach(i=>{if(t.getManifestWrapper().hasMultipleVisualizations(i)){if(e.paths.length>1){throw new Error("ALP flavor cannot have multiple views")}else{i=i;n.push({converterContext:t,primary:i.primary,secondary:i.secondary,defaultPath:i.defaultPath})}}else if(i.template){i=i;n.push({key:i.key,label:i.label,template:i.template,type:"Custom",visible:i.visible})}else{i=i;const e=t.getConverterContextFor(i.contextPath||i.entitySet&&`/${i.entitySet}`||t.getContextPath()),a=e.getEntityType();if(a&&e){let t;const o=e.getEntityTypeAnnotation(i.annotationPath);const r=o.annotation;if(r){t=r.term==="com.sap.vocabularies.UI.v1.SelectionVariant"?W(a,e,false):r;n.push({converterContext:e,annotation:t,annotationPath:i.annotationPath,keepPreviousPersonalization:i.keepPreviousPersonalization,key:i.key,visible:i.visible})}}else{}}})}else{const e=t.getEntityType();if(t.getTemplateType()===f.AnalyticalListPage){n=Q(t,n)}else{n.push({annotation:W(e,t,false),converterContext:t})}}return n.map(t=>H(t))};const N=function(t,e){const n=t.getManifestWrapper();const i=n.getViewConfiguration();if(e.length>1&&!$(t)){return{showTabCounts:i?(i===null||i===void 0?void 0:i.showCounts)||n.hasMultipleEntitySets():undefined,id:p()}}return undefined};function Q(t,e){const n=t.getEntityType();const i=W(n,t,true);let a,o;if(i){e.push({annotation:i,converterContext:t})}else{a=E(n);o=w(n);if(a&&o){const n=[{annotationPath:"@"+a.term}];const i=[{annotationPath:"@"+o.term}];e.push({converterContext:t,primary:n,secondary:i,defaultPath:"both"})}else{throw new Error("ALP flavor needs both chart and table to load the application")}}return e}function $(t){return t.getManifestWrapper().hasMultipleVisualizations()||t.getTemplateType()===f.AnalyticalListPage}const K=function(t){const e=t.getManifestWrapper();return k([],L(e.getHeaderActions(),t).actions)};l.getHeaderActions=K;const O=function(t,e){t.forEach(t=>{if(!t.type){const n=t.presentation;n.visualizations.forEach(t=>{if(t.type===c.Chart&&t.filterId!==e){t.filterId=e}})}})};l.checkChartFilterBarId=O;const U=function(t){const e=t.getEntityType();const n=t.getContextPath();if(!n){throw new Error("An EntitySet is required to be able to display a ListReport, please adjust your `entitySet` property to point to one.")}const i=t.getManifestWrapper();const a=i.getViewConfiguration();const o=i.hasMultipleEntitySets();const r=j(t,a);const s=B(r);const l=x(r);const c=s.some(t=>t.control.type==="ResponsiveTable");let f="";let d="";const p=y();const g=h(n);const m=v(g);const b=i.getFilterConfiguration();const P=(b===null||b===void 0?void 0:b.initialLayout)!==undefined?b===null||b===void 0?void 0:b.initialLayout.toLowerCase():"compact";const I=(b===null||b===void 0?void 0:b.layout)!==undefined?b===null||b===void 0?void 0:b.layout.toLowerCase():"compact";const V=b.useSemanticDateRange!==undefined?b.useSemanticDateRange:true;const w=b.showClearButton!==undefined?b.showClearButton:false;const E=q(t,r);if(E){d=E.chartId;f=E.tableId}const z=i.useHiddenFilterBar();const S=(i.isFilterBarHidden()||z)&&d==="";const M=A(t,s);const k=M.selectionFields;const L=M.sPropertyInfo;const W=F(s,l,t);const H=N(t,r);const Q=H?undefined:T(e,t);const U=V?R(D(e,t)):{};const G=K(t);if(o){O(r,g)}const J=s.map(t=>t.annotation.id).concat(l.map(t=>t.id));const X=[...S&&!z?[]:[g],...i.getVariantManagement()!==u.Control?J:[],...H?[H.id]:[]];const Y=H&&i.getStickyMultiTabHeaderConfiguration()?H.id:undefined;return{mainEntitySet:n,mainEntityType:`${n}/`,multiViewsControl:H,stickySubheaderProvider:Y,singleTableId:f,singleChartId:d,dynamicListReportId:p,headerActions:G,showPinnableToggle:c,filterBar:{propertyInfo:L,selectionFields:k,hideBasicSearch:W,showClearButton:w},views:r,filterBarId:S&&!z?"":g,filterConditions:{selectionVariant:Q,defaultSemanticDates:U},variantManagement:{id:m,targetControlIds:X.join(",")},hasMultiVisualizations:$(t),templateType:i.getTemplateType(),useSemanticDateRange:V,filterInitialLayout:P,filterLayout:I,kpiDefinitions:C(t),hideFilterBar:S,useHiddenFilterBar:z}};l.convertPage=U;function q(t,e){let n="",i="";if(t.getManifestWrapper().hasMultipleVisualizations()||t.getTemplateType()===f.AnalyticalListPage){for(let t of e){t=t;if(t.chartControlId&&t.tableControlId){i=t.chartControlId;n=t.tableControlId;break}}}else{for(let t of e){t=t;if(!n&&t.tableControlId){n=t.tableControlId||""}if(!i&&t.chartControlId){i=t.chartControlId||""}if(i&&n){break}}}if(n||i){return{chartId:i,tableId:n}}return undefined}return l},false);
6
6
  //# sourceMappingURL=ListReportConverter.js.map