@sapui5/sap.fe.core 1.113.0 → 1.115.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 (375) 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 +68 -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 +120 -4
  7. package/src/sap/fe/core/AppComponent-dbg.js +8 -2
  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 +19 -3
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
  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 +17 -11
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +13 -2
  17. package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
  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 +96 -473
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
  22. package/src/sap/fe/core/ExtensionAPI.ts +2 -2
  23. package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
  24. package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
  25. package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
  26. package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
  27. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  28. package/src/sap/fe/core/TemplateComponent.ts +6 -0
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
  35. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
  36. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
  48. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  50. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
  52. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
  53. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
  54. package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
  55. package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
  56. package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
  57. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  58. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  59. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  61. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
  65. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
  78. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  79. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
  81. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
  82. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  83. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  84. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
  85. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
  86. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  87. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
  89. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  90. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  91. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
  97. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
  98. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  104. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
  105. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  106. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  107. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  109. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  112. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  113. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  114. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  116. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  117. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  119. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
  120. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
  121. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
  122. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
  123. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  124. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  125. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  126. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  127. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
  129. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  132. package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
  133. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  135. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  136. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  137. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  139. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  140. package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
  141. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
  142. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  143. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  144. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  145. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  146. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  147. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  149. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  150. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  151. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  152. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  154. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  155. package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
  157. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  158. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  159. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
  160. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
  161. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  163. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
  164. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
  165. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  166. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  167. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
  168. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
  169. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  170. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  171. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
  172. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  173. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  176. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
  177. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  178. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
  180. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  183. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
  184. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  187. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  188. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
  189. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  190. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  191. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
  192. package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
  193. package/src/sap/fe/core/fpm/Component.js +1 -1
  194. package/src/sap/fe/core/fpm/Component.js.map +1 -1
  195. package/src/sap/fe/core/fpm/Component.ts +3 -1
  196. package/src/sap/fe/core/fpm/manifest.json +1 -1
  197. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
  198. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  199. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
  201. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
  202. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  203. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  204. package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
  205. package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
  206. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
  207. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
  208. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  209. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  210. package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
  211. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
  212. package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
  213. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
  214. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  215. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  216. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  217. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  218. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  219. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
  220. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  221. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  222. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
  223. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
  224. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  225. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  226. package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
  227. package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
  228. package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
  229. package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
  230. package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
  231. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
  232. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  234. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
  235. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
  236. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  237. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
  239. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
  242. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  243. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  244. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
  245. package/src/sap/fe/core/library-dbg.js +4 -3
  246. package/src/sap/fe/core/library-preload.js +91 -74
  247. package/src/sap/fe/core/library-preload.js.map +1 -1
  248. package/src/sap/fe/core/library.js +1 -1
  249. package/src/sap/fe/core/library.js.map +1 -1
  250. package/src/sap/fe/core/library.ts +1 -1
  251. package/src/sap/fe/core/manifest.json +1 -1
  252. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
  253. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
  256. package/src/sap/fe/core/messagebundle.properties +12 -8
  257. package/src/sap/fe/core/messagebundle_ar.properties +7 -5
  258. package/src/sap/fe/core/messagebundle_bg.properties +7 -5
  259. package/src/sap/fe/core/messagebundle_ca.properties +7 -5
  260. package/src/sap/fe/core/messagebundle_cs.properties +7 -5
  261. package/src/sap/fe/core/messagebundle_cy.properties +7 -5
  262. package/src/sap/fe/core/messagebundle_da.properties +7 -5
  263. package/src/sap/fe/core/messagebundle_de.properties +7 -5
  264. package/src/sap/fe/core/messagebundle_el.properties +7 -5
  265. package/src/sap/fe/core/messagebundle_en.properties +7 -5
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
  270. package/src/sap/fe/core/messagebundle_es.properties +7 -5
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
  272. package/src/sap/fe/core/messagebundle_et.properties +7 -5
  273. package/src/sap/fe/core/messagebundle_fi.properties +7 -5
  274. package/src/sap/fe/core/messagebundle_fr.properties +7 -5
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
  276. package/src/sap/fe/core/messagebundle_hi.properties +7 -5
  277. package/src/sap/fe/core/messagebundle_hr.properties +7 -5
  278. package/src/sap/fe/core/messagebundle_hu.properties +7 -5
  279. package/src/sap/fe/core/messagebundle_id.properties +7 -5
  280. package/src/sap/fe/core/messagebundle_it.properties +8 -6
  281. package/src/sap/fe/core/messagebundle_iw.properties +7 -5
  282. package/src/sap/fe/core/messagebundle_ja.properties +7 -5
  283. package/src/sap/fe/core/messagebundle_kk.properties +7 -5
  284. package/src/sap/fe/core/messagebundle_ko.properties +7 -5
  285. package/src/sap/fe/core/messagebundle_lt.properties +7 -5
  286. package/src/sap/fe/core/messagebundle_lv.properties +7 -5
  287. package/src/sap/fe/core/messagebundle_ms.properties +7 -5
  288. package/src/sap/fe/core/messagebundle_nl.properties +7 -5
  289. package/src/sap/fe/core/messagebundle_no.properties +7 -5
  290. package/src/sap/fe/core/messagebundle_pl.properties +7 -5
  291. package/src/sap/fe/core/messagebundle_pt.properties +7 -5
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
  293. package/src/sap/fe/core/messagebundle_ro.properties +7 -5
  294. package/src/sap/fe/core/messagebundle_ru.properties +7 -5
  295. package/src/sap/fe/core/messagebundle_sh.properties +7 -5
  296. package/src/sap/fe/core/messagebundle_sk.properties +7 -5
  297. package/src/sap/fe/core/messagebundle_sl.properties +7 -5
  298. package/src/sap/fe/core/messagebundle_sv.properties +7 -5
  299. package/src/sap/fe/core/messagebundle_th.properties +7 -5
  300. package/src/sap/fe/core/messagebundle_tr.properties +7 -5
  301. package/src/sap/fe/core/messagebundle_uk.properties +7 -5
  302. package/src/sap/fe/core/messagebundle_vi.properties +7 -5
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
  305. package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
  306. package/src/sap/fe/core/operationsHelper.ts +1 -1
  307. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
  308. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  309. package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
  310. package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
  311. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
  312. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  313. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  314. package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
  315. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
  316. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  317. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  318. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
  319. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
  320. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  321. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  322. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
  323. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
  324. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  325. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  326. package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
  327. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
  328. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  329. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  330. package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
  331. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
  332. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  333. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  334. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
  335. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
  336. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  337. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
  338. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
  339. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  340. package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
  341. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  342. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  343. package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
  344. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  345. package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
  346. package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
  347. package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
  348. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  349. package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
  350. package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
  351. package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
  352. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  353. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  354. package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
  355. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
  356. package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
  357. package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
  358. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  359. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  360. package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
  361. package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
  362. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  363. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  364. package/src/sap/fe/core/type/TypeUtil.ts +2 -2
  365. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
  366. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
  367. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
  368. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
  369. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
  370. package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
  371. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  372. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  373. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  374. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  375. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -674,7 +674,13 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
674
674
  _proto.getInstancedViews = function getInstancedViews() {
675
675
  const fclControl = this.getFclControl();
676
676
  const componentContainers = [...fclControl.getBeginColumnPages(), ...fclControl.getMidColumnPages(), ...fclControl.getEndColumnPages()];
677
- return componentContainers.map(oPage => oPage.getComponentInstance().getRootControl());
677
+ return componentContainers.map(oPage => {
678
+ if (oPage && oPage.isA("sap.ui.core.ComponentContainer")) {
679
+ return oPage.getComponentInstance().getRootControl();
680
+ } else {
681
+ return oPage;
682
+ }
683
+ });
678
684
  }
679
685
 
680
686
  /**
@@ -834,4 +840,4 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
834
840
  })), _class2)) || _class);
835
841
  return FclController;
836
842
  }, false);
837
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJDT05TVEFOVFMiLCJwYWdlIiwibmFtZXMiLCJjdXJyZW50R2V0dGVyIiwicHJlZml4Iiwic3VmZml4IiwiZ2V0dGVyIiwiX2dldFZpZXdGcm9tQ29udGFpbmVyIiwib0NvbnRhaW5lciIsImlzQSIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJGY2xDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZm9yRWFjaCIsIm9DaGlsZFZpZXciLCJwQ2hpbGRWaWV3IiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiYWRhcHRTdGF0ZUNvbnRyb2xzIiwiYVN0YXRlQ29udHJvbHMiLCJvblJlc3RvcmUiLCJmY2xDb250cm9sbGVyIiwiYXBwQ29udGVudENvbnRhaW5lciIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJpbnRlcm5hbE1vZGVsIiwiZ2V0TW9kZWwiLCJwYWdlcyIsImdldFByb3BlcnR5IiwiY29tcG9uZW50SWQiLCJzZXRQcm9wZXJ0eSIsIm9uQ29udGFpbmVyUmVhZHkiLCJvblN1c3BlbmQiLCJvRkNMQ29udHJvbGxlciIsIm9GQ0xDb250cm9sIiwiZ2V0RmNsQ29udHJvbCIsImFCZWdpbkNvbHVtblBhZ2VzIiwiZ2V0QmVnaW5Db2x1bW5QYWdlcyIsImFNaWRDb2x1bW5QYWdlcyIsImdldE1pZENvbHVtblBhZ2VzIiwiYUVuZENvbHVtblBhZ2VzIiwiZ2V0RW5kQ29sdW1uUGFnZXMiLCJhUGFnZXMiLCJjb25jYXQiLCJvUGFnZSIsIm9UYXJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJvbkluaXQiLCJfaW50ZXJuYWxJbml0IiwibWFuYWdlRGF0YVJlY2VpdmVkIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJwYXRoIiwidGFyZ2V0ZWRWaWV3IiwiZmluZCIsInZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJpc0tlZXBBbGl2ZSIsIl9yb3V0aW5nIiwib25EYXRhUmVjZWl2ZWQiLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiX2dldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24iLCJvbkJlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm9uUm91dGVNYXRjaGVkIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJfc2F2ZUxheW91dCIsIl9vUm91dGVyUHJveHkiLCJzQ3VycmVudFJvdXRlTmFtZSIsInNDdXJyZW50QXJndW1lbnRzIiwiU1FVRVJZS0VZTkFNRSIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJvRGF0YU1vZGVsIiwiYXR0YWNoRXZlbnQiLCJiaW5kIiwiZ2V0Um91dGVyUHJveHkiLCJfb0ZDTENvbmZpZyIsIm1heENvbHVtbnNDb3VudCIsIm9Sb3V0aW5nQ29uZmlnIiwiZ2V0TWFuaWZlc3QiLCJyb3V0aW5nIiwiY29uZmlnIiwiZmxleGlibGVDb2x1bW5MYXlvdXQiLCJvRkNMTWFuaWZlc3RDb25maWciLCJkZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSIsImRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUiLCJsaW1pdEZDTFRvVHdvQ29sdW1ucyIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImRlZmF1bHRDb250cm9sQWdncmVnYXRpb24iLCJfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbiIsIm9uU3RhdGVDaGFuZ2VkIiwiYXR0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSIsIm9FdmVudCIsInNQcmV2aW91c0xheW91dCIsImdldFBhcmFtZXRlcnMiLCJsYXlvdXQiLCJhQWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwib1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQiLCJsZW5ndGgiLCJvUmlnaHRNb3N0VmlldyIsImF0dGFjaEV2ZW50T25jZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uIiwiZ2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uRXhpdCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsImRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsImRldGFjaFN0YXRlQ2hhbmdlIiwiZGV0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSIsIl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIiwiX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiIsIkJhc2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiaXNGY2xFbmFibGVkIiwiZGlzcGxheUVycm9yUGFnZSIsInNFcnJvck1lc3NhZ2UiLCJtUGFyYW1ldGVycyIsIkZDTExldmVsIiwiYU1lc3NhZ2VQYWdlcyIsIm9NZXNzYWdlUGFnZSIsIk1lc3NhZ2VQYWdlIiwic2hvd0hlYWRlciIsImljb24iLCJhZGRCZWdpbkNvbHVtblBhZ2UiLCJhZGRNaWRDb2x1bW5QYWdlIiwiYWRkRW5kQ29sdW1uUGFnZSIsInNldFRleHQiLCJ0ZWNobmljYWxNZXNzYWdlIiwic2V0Q3VzdG9tRGVzY3JpcHRpb24iLCJMaW5rIiwidGV4dCIsImRlc2NyaXB0aW9uIiwicHJlc3MiLCJNZXNzYWdlQm94Iiwic2hvdyIsIkljb24iLCJFUlJPUiIsInRpdGxlIiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZGVmYXVsdEFjdGlvbiIsImRldGFpbHMiLCJ0ZWNobmljYWxEZXRhaWxzIiwiY29udGVudFdpZHRoIiwic2V0RGVzY3JpcHRpb24iLCJ0byIsImdldElkIiwib01hbmlmZXN0Iiwib1RhcmdldHMiLCJ0YXJnZXRzIiwiT2JqZWN0Iiwia2V5cyIsInNUYXJnZXROYW1lIiwib1RhcmdldCIsImFnZ3JlZ2F0aW9uIiwicGF0dGVybiIsImNvbnRleHRQYXR0ZXJuIiwiYVJvdXRlcyIsInJvdXRlcyIsInJvdXRlIiwidGFyZ2V0IiwiZ2V0Q3VycmVudEFyZ3VtZW50IiwiZ2V0Q3VycmVudFJvdXRlTmFtZSIsImdldENvbnN0YW50cyIsImdldFRhcmdldEFnZ3JlZ2F0aW9uIiwic1JvdXRlTmFtZSIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImFWaWV3cyIsInNDdXJyZW50Vmlld1BhdGgiLCJvQWRkaXRpb25hbFZpZXciLCJpbmRleE9mIiwiaW5kZXgiLCJvVmlldyIsIm9QcmV2aW91c1ZpZXciLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJiSXNOYXZpZ2F0aW9uQXJyb3ciLCJ1bmRlZmluZWQiLCJfZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzIiwibmF2VG8iLCJnZXRSaWdodG1vc3RWaWV3IiwiX2NvbXB1dGVUaXRsZUhpZXJhcmNoeSIsIm9GY2wiLCJnZXRTb3VyY2UiLCJvUGFnZXMiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJiRWRpdEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImVuZENvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJhcmd1bWVudHMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwic2V0TGF5b3V0IiwiRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciIsImdldEluc3RhbmNlRm9yIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNIYXNoIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvUm91dGUiLCJnZXRSb3V0ZUJ5SGFzaCIsImdldFBhdHRlcm4iLCJhbGxBbGxvd2VkTGF5b3V0cyIsIkFycmF5IiwiaXNBcnJheSIsImFMYXlvdXRzIiwic1RhcmdldEFnZ3JlZ2F0aW9uIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJmY2xDb250cm9sIiwiY29tcG9uZW50Q29udGFpbmVycyIsIm1hcCIsIkVuZENvbHVtbkZ1bGxTY3JlZW4iLCJnZXRDdXJyZW50RW5kQ29sdW1uUGFnZSIsIk1pZENvbHVtbkZ1bGxTY3JlZW4iLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsIk9uZUNvbHVtbiIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZCIsIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkIiwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQiLCJUd29Db2x1bW5zTWlkRXhwYW5kZWQiLCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlbiIsIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW4iLCJMb2ciLCJlcnJvciIsIl9nZXRBbGxWaWV3cyIsInNMYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4iLCJhUmVzdG9yZVByb21pc2VzIiwicmVkdWNlIiwiYVByb21pc2VzIiwiS2VlcEFsaXZlSGVscGVyIiwicmVzdG9yZVZpZXciLCJhbGwiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwicG9wIiwiaXNDb250ZXh0VXNlZEluUGFnZXMiLCJvQ29udGV4dCIsImFBbGxWaXNpYmxlVmlld3MiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJzVGl0bGUiLCJzQXBwVGl0bGUiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0VGl0bGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZjbC5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlclwiO1xuaW1wb3J0IGZMaWJyYXJ5IGZyb20gXCJzYXAvZi9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94LCB7IEFjdGlvbiwgSWNvbiB9IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVBhZ2UgZnJvbSBcInNhcC9tL01lc3NhZ2VQYWdlXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFhNTFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9YTUxWaWV3XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5cbmNvbnN0IExheW91dFR5cGUgPSBmTGlicmFyeS5MYXlvdXRUeXBlO1xuXG5jb25zdCBDT05TVEFOVFMgPSB7XG5cdHBhZ2U6IHtcblx0XHRuYW1lczogW1wiQmVnaW5Db2x1bW5cIiwgXCJNaWRDb2x1bW5cIiwgXCJFbmRDb2x1bW5cIl0sXG5cdFx0Y3VycmVudEdldHRlcjoge1xuXHRcdFx0cHJlZml4OiBcImdldEN1cnJlbnRcIixcblx0XHRcdHN1ZmZpeDogXCJQYWdlXCJcblx0XHR9LFxuXHRcdGdldHRlcjoge1xuXHRcdFx0cHJlZml4OiBcImdldFwiLFxuXHRcdFx0c3VmZml4OiBcIlBhZ2VzXCJcblx0XHR9XG5cdH1cbn07XG5jb25zdCBfZ2V0Vmlld0Zyb21Db250YWluZXIgPSBmdW5jdGlvbiAob0NvbnRhaW5lcjogYW55KSB7XG5cdGlmIChvQ29udGFpbmVyLmlzQShcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdHJldHVybiBvQ29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCkuZ2V0Um9vdENvbnRyb2woKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb0NvbnRhaW5lcjtcblx0fVxufTtcbi8qKlxuICogQmFzZSBjb250cm9sbGVyIGNsYXNzIGZvciB5b3VyIG93biByb290IHZpZXcgd2l0aCBhbiBzYXAuZi5GbGV4aWJsZUNvbHVtbkxheW91dCBjb250cm9sLlxuICpcbiAqIEJ5IHVzaW5nIG9yIGV4dGVuZGluZyB0aGlzIGNvbnRyb2xsZXIsIHlvdSBjYW4gdXNlIHlvdXIgb3duIHJvb3QgdmlldyB3aXRoIHRoZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYW5kXG4gKiB5b3UgY2FuIG1ha2UgdXNlIG9mIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlcyBhbmQgU0FQIEZpb3JpIGVsZW1lbnRzIGJ1aWxkaW5nIGJsb2Nrcy5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIilcbmNsYXNzIEZjbENvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRWaWV3U3RhdGUub3ZlcnJpZGUoe1xuXHRcdFx0YXBwbHlJbml0aWFsU3RhdGVPbmx5OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGFDb250cm9sczogYW55KSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuX2dldEFsbFZpc2libGVWaWV3cygpLmZvckVhY2goZnVuY3Rpb24gKG9DaGlsZFZpZXc6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IHBDaGlsZFZpZXcgPSBQcm9taXNlLnJlc29sdmUob0NoaWxkVmlldyk7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IGFueSkge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLl9nZXRBbGxWaXNpYmxlVmlld3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hpbGRWaWV3OiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBwQ2hpbGRWaWV3ID0gUHJvbWlzZS5yZXNvbHZlKG9DaGlsZFZpZXcpO1xuXHRcdFx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdG9uUmVzdG9yZTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSkge1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IGFwcENvbnRlbnRDb250YWluZXIgPSBmY2xDb250cm9sbGVyLmdldEFwcENvbnRlbnRDb250YWluZXIoKTtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbnRlbnRDb250YWluZXIuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdGNvbnN0IHBhZ2VzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdlc1wiKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudElkIGluIHBhZ2VzKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgL3BhZ2VzLyR7Y29tcG9uZW50SWR9L3Jlc3RvcmVTdGF0dXNgLCBcInBlbmRpbmdcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmNsQ29udHJvbGxlci5vbkNvbnRhaW5lclJlYWR5KCk7XG5cdFx0XHR9LFxuXHRcdFx0b25TdXNwZW5kOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlKSB7XG5cdFx0XHRcdGNvbnN0IG9GQ0xDb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IG9GQ0xDb250cm9sID0gb0ZDTENvbnRyb2xsZXIuZ2V0RmNsQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBhQmVnaW5Db2x1bW5QYWdlczogQ29udHJvbFtdID0gb0ZDTENvbnRyb2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBhTWlkQ29sdW1uUGFnZXM6IENvbnRyb2xbXSA9IG9GQ0xDb250cm9sLmdldE1pZENvbHVtblBhZ2VzKCkgfHwgW107XG5cdFx0XHRcdGNvbnN0IGFFbmRDb2x1bW5QYWdlczogQ29udHJvbFtdID0gb0ZDTENvbnRyb2wuZ2V0RW5kQ29sdW1uUGFnZXMoKSB8fCBbXTtcblx0XHRcdFx0Y29uc3QgYVBhZ2VzID0gKFtdIGFzIENvbnRyb2xbXSkuY29uY2F0KGFCZWdpbkNvbHVtblBhZ2VzLCBhTWlkQ29sdW1uUGFnZXMsIGFFbmRDb2x1bW5QYWdlcyk7XG5cblx0XHRcdFx0YVBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9QYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0VmlldyA9IF9nZXRWaWV3RnJvbUNvbnRhaW5lcihvUGFnZSk7XG5cblx0XHRcdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9UYXJnZXRWaWV3ICYmIG9UYXJnZXRWaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5vblN1c3BlbmQpIHtcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByb3RlY3RlZCBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBzQ3VycmVudFJvdXRlTmFtZSE6IHN0cmluZztcblxuXHRwcml2YXRlIHNDdXJyZW50QXJndW1lbnRzPzogYW55O1xuXG5cdHByaXZhdGUgc1ByZXZpb3VzTGF5b3V0ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgU1FVRVJZS0VZTkFNRSE6IHN0cmluZztcblxuXHRwcm90ZWN0ZWQgX29GQ0xDb25maWc6IGFueTtcblxuXHRwcml2YXRlIG9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbjogYW55O1xuXG5cdHByaXZhdGUgX29UYXJnZXRzQWdncmVnYXRpb246IGFueTtcblxuXHRwcml2YXRlIF9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm46IGFueTtcblxuXHRwcml2YXRlIGFNZXNzYWdlUGFnZXM/OiBhbnlbXTtcblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5nZXRNZXRhZGF0YVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXG5cdFx0dGhpcy5faW50ZXJuYWxJbml0KCk7XG5cdH1cblxuXHRtYW5hZ2VEYXRhUmVjZWl2ZWQoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImVycm9yXCIpKSB7XG5cdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwicGF0aFwiKSxcblx0XHRcdFx0dGFyZ2V0ZWRWaWV3ID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCkuZmluZCgodmlldykgPT4gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHBhdGgpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYW5hZ2UgZXJyb3Igd2hlbiB0aGUgcmVxdWVzdCBpcyByZWxhdGVkIHRvIGEgZm9ybSAgaW50byBhbiBPYmplY3RQYWdlXG5cdFx0XHRpZiAocGF0aCAmJiAodGFyZ2V0ZWRWaWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpPy5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRcdCh0YXJnZXRlZFZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5vbkRhdGFSZWNlaXZlZChldmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpIHtcblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9nZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uLCB0aGlzKTtcblx0XHRzdXBlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5faW50ZXJuYWxJbml0KCk7XG5cblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLm9uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLm9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLl9zYXZlTGF5b3V0LCB0aGlzKTtcblx0fVxuXG5cdF9pbnRlcm5hbEluaXQoKSB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZXJQcm94eSkge1xuXHRcdFx0cmV0dXJuOyAvLyBBbHJlYWR5IGluaXRpYWxpemVkXG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IFwiXCI7XG5cdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50cyA9IHt9O1xuXHRcdHRoaXMuU1FVRVJZS0VZTkFNRSA9IFwiP3F1ZXJ5XCI7XG5cblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblxuXHRcdGNvbnN0IG9EYXRhTW9kZWwgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0b0RhdGFNb2RlbD8uYXR0YWNoRXZlbnQoXCJkYXRhUmVjZWl2ZWRcIiwgdGhpcy5tYW5hZ2VEYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XG5cblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHQvLyBHZXQgRkNMIGNvbmZpZ3VyYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0dGhpcy5fb0ZDTENvbmZpZyA9IHsgbWF4Q29sdW1uc0NvdW50OiAzIH07XG5cdFx0Y29uc3Qgb1JvdXRpbmdDb25maWcgPSAob0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpIGFzIGFueSlbXCJzYXAudWk1XCJdLnJvdXRpbmc7XG5cblx0XHRpZiAob1JvdXRpbmdDb25maWc/LmNvbmZpZz8uZmxleGlibGVDb2x1bW5MYXlvdXQpIHtcblx0XHRcdGNvbnN0IG9GQ0xNYW5pZmVzdENvbmZpZyA9IG9Sb3V0aW5nQ29uZmlnLmNvbmZpZy5mbGV4aWJsZUNvbHVtbkxheW91dDtcblxuXHRcdFx0Ly8gRGVmYXVsdCBsYXlvdXQgZm9yIDIgY29sdW1uc1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlID0gb0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZWZhdWx0IGxheW91dCBmb3IgMyBjb2x1bW5zXG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlID0gb0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExpbWl0IEZDTCB0byAyIGNvbHVtbnMgP1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5saW1pdEZDTFRvVHdvQ29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCA9IDI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbiA9IG9Sb3V0aW5nQ29uZmlnLmNvbmZpZy5jb250cm9sQWdncmVnYXRpb247XG5cdFx0fVxuXG5cdFx0dGhpcy5faW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uKG9BcHBDb21wb25lbnQpO1xuXHRcdHRoaXMuX2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbihvQXBwQ29tcG9uZW50KTtcblxuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmF0dGFjaFN0YXRlQ2hhbmdlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdH1cblxuXHRnZXRGY2xDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbnRlbnRDb250YWluZXIoKSBhcyBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxuXG5cdF9zYXZlTGF5b3V0KG9FdmVudDogYW55KSB7XG5cdFx0dGhpcy5zUHJldmlvdXNMYXlvdXQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmxheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGFkZGl0aW9uYWwgdmlldyAob24gdG9wIG9mIHRoZSB2aXNpYmxlIHZpZXdzKSwgdG8gYmUgYWJsZSB0byBjb21wdXRlIHRoZSBsYXRlc3QgdGFibGUgbmF2aWdhdGVkIHJvd3Mgb2Zcblx0ICogdGhlIG1vc3QgcmlnaHQgdmlzaWJsZSB2aWV3IGFmdGVyIGEgbmF2IGJhY2sgb3IgY29sdW1uIGZ1bGxzY3JlZW4uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNfZ2V0UmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICovXG5cblx0X2dldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKSB7XG5cdFx0Y29uc3QgYUFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZCA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cyh0aGlzLnNQcmV2aW91c0xheW91dCk7XG5cdFx0Y29uc3Qgb1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQgPSBhQWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkW2FBbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWQubGVuZ3RoIC0gMV07XG5cdFx0bGV0IG9SaWdodE1vc3RWaWV3O1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuYXR0YWNoRXZlbnRPbmNlKFwicm91dGVNYXRjaGVkXCIsIChvRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0b1JpZ2h0TW9zdFZpZXcgPSBfZ2V0Vmlld0Zyb21Db250YWluZXIob0V2ZW50LmdldFBhcmFtZXRlcihcInZpZXdzXCIpW29FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKS5sZW5ndGggLSAxXSk7XG5cdFx0XHRpZiAob1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQpIHtcblx0XHRcdFx0Ly8gTmF2aWdhdGlvbiBmb3J3YXJkIGZyb20gTDIgdG8gdmlldyBsZXZlbCBMMyAoRnVsbFNjcmVlbkxheW91dCk6XG5cdFx0XHRcdGlmIChvUmlnaHRNb3N0Vmlldy5nZXRWaWV3RGF0YSgpICYmIG9SaWdodE1vc3RWaWV3LmdldFZpZXdEYXRhKCkudmlld0xldmVsID09PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0XHRcdHRoaXMub0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uID0gb1JpZ2h0TW9zdFZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gTmF2aWdhdGlvbnMgYmFja3dhcmQgZnJvbSBMMyBkb3duIHRvIEwyLCBMMSwgTDAgKFRocmVlQ29sdW1uIGxheW91dCk6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvUmlnaHRNb3N0Vmlldy5nZXRWaWV3RGF0YSgpICYmXG5cdFx0XHRcdFx0b1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQuZ2V0Vmlld0RhdGEoKSAmJlxuXHRcdFx0XHRcdG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkLmdldFZpZXdEYXRhKCkudmlld0xldmVsIDwgdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgJiZcblx0XHRcdFx0XHRvUmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZC5nZXRWaWV3RGF0YSgpICYmXG5cdFx0XHRcdFx0b1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWwgPiBvUmlnaHRNb3N0Vmlldy5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbCAmJlxuXHRcdFx0XHRcdG9SaWdodE1vc3RWaWV3ICE9PSBvUmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbiA9IG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbjtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHR0aGlzLmdldFJvdXRlcigpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLm9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldFJvdXRlcigpLmRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLm9uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5kZXRhY2hTdGF0ZUNoYW5nZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5kZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb24gPSBudWxsO1xuXHRcdHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiA9IG51bGw7XG5cblx0XHRCYXNlQ29udHJvbGxlci5wcm90b3R5cGUub25FeGl0LmJpbmQodGhpcykoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgRkNMIGNvbXBvbmVudCBpcyBlbmFibGVkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjaXNGY2xFbmFibGVkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgc2luY2Ugd2UgYXJlIGluIEZDTCBzY2VuYXJpb1xuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRpc0ZjbEVuYWJsZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBQYWdlIHRvIGRpc3BsYXkgdGhlIElsbHVzdHJhdGVkTWVzc2FnZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGVycm9yLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0Vycm9yTWVzc2FnZVxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI2Rpc3BsYXlFcnJvclBhZ2Vcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY3JlYXRlcyBhIFBhZ2UgdG8gZGlzcGxheSB0aGUgZXJyb3Jcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZGlzcGxheUVycm9yUGFnZShzRXJyb3JNZXNzYWdlOiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBvRkNMQ29udHJvbCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpO1xuXG5cdFx0aWYgKHRoaXMuX29GQ0xDb25maWcgJiYgbVBhcmFtZXRlcnMuRkNMTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLkZDTExldmVsID0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgLSAxO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5hTWVzc2FnZVBhZ2VzKSB7XG5cdFx0XHR0aGlzLmFNZXNzYWdlUGFnZXMgPSBbbnVsbCwgbnVsbCwgbnVsbF07XG5cdFx0fVxuXHRcdGxldCBvTWVzc2FnZVBhZ2UgPSB0aGlzLmFNZXNzYWdlUGFnZXNbbVBhcmFtZXRlcnMuRkNMTGV2ZWxdO1xuXHRcdGlmICghb01lc3NhZ2VQYWdlKSB7XG5cdFx0XHRvTWVzc2FnZVBhZ2UgPSBuZXcgTWVzc2FnZVBhZ2Uoe1xuXHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0aWNvbjogXCJzYXAtaWNvbjovL21lc3NhZ2UtZXJyb3JcIlxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFNZXNzYWdlUGFnZXNbbVBhcmFtZXRlcnMuRkNMTGV2ZWxdID0gb01lc3NhZ2VQYWdlO1xuXG5cdFx0XHRzd2l0Y2ggKG1QYXJhbWV0ZXJzLkZDTExldmVsKSB7XG5cdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRvRkNMQ29udHJvbC5hZGRCZWdpbkNvbHVtblBhZ2Uob01lc3NhZ2VQYWdlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0b0ZDTENvbnRyb2wuYWRkTWlkQ29sdW1uUGFnZShvTWVzc2FnZVBhZ2UpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0b0ZDTENvbnRyb2wuYWRkRW5kQ29sdW1uUGFnZShvTWVzc2FnZVBhZ2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9NZXNzYWdlUGFnZS5zZXRUZXh0KHNFcnJvck1lc3NhZ2UpO1xuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnRlY2huaWNhbE1lc3NhZ2UpIHtcblx0XHRcdG9NZXNzYWdlUGFnZS5zZXRDdXN0b21EZXNjcmlwdGlvbihcblx0XHRcdFx0bmV3IExpbmsoe1xuXHRcdFx0XHRcdHRleHQ6IG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIHx8IG1QYXJhbWV0ZXJzLnRlY2huaWNhbE1lc3NhZ2UsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guc2hvdyhtUGFyYW1ldGVycy50ZWNobmljYWxNZXNzYWdlLCB7XG5cdFx0XHRcdFx0XHRcdGljb246IEljb24uRVJST1IsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBtUGFyYW1ldGVycy50aXRsZSxcblx0XHRcdFx0XHRcdFx0YWN0aW9uczogW0FjdGlvbi5PS10sXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRBY3Rpb246IEFjdGlvbi5PSyxcblx0XHRcdFx0XHRcdFx0ZGV0YWlsczogbVBhcmFtZXRlcnMudGVjaG5pY2FsRGV0YWlscyB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiNjAlXCJcblx0XHRcdFx0XHRcdH0gYXMgYW55KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvTWVzc2FnZVBhZ2Uuc2V0RGVzY3JpcHRpb24obVBhcmFtZXRlcnMuZGVzY3JpcHRpb24gfHwgXCJcIik7XG5cdFx0fVxuXG5cdFx0KG9GQ0xDb250cm9sIGFzIGFueSkudG8ob01lc3NhZ2VQYWdlLmdldElkKCkpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgb2JqZWN0IF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIHRoYXQgZGVmaW5lcyBmb3IgZWFjaCByb3V0ZSB0aGUgcmVsZXZhbnQgYWdncmVnYXRpb24gYW5kIHBhdHRlcm4uXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI19pbml0aWFsaXplVGFyZ2V0QWdncmVnYXRpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gW29BcHBDb21wb25lbnRdIFJlZmVyZW5jZSB0byB0aGUgQXBwQ29tcG9uZW50XG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdGNvbnN0IG9NYW5pZmVzdCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSBhcyBhbnksXG5cdFx0XHRvVGFyZ2V0cyA9IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZyA/IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZy50YXJnZXRzIDogbnVsbDtcblxuXHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb24gPSB7fTtcblxuXHRcdGlmIChvVGFyZ2V0cykge1xuXHRcdFx0T2JqZWN0LmtleXMob1RhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9UYXJnZXRzW3NUYXJnZXROYW1lXTtcblx0XHRcdFx0aWYgKG9UYXJnZXQuY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbltzVGFyZ2V0TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbjogb1RhcmdldC5jb250cm9sQWdncmVnYXRpb24sXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBvVGFyZ2V0LmNvbnRleHRQYXR0ZXJuXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uW3NUYXJnZXROYW1lXSA9IHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uOiBcInBhZ2VcIixcblx0XHRcdFx0XHRcdHBhdHRlcm46IG51bGxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBhIHJvdXRlIChpZGVudGlmZWQgYXMgaXRzIHBhdHRlcm4pIGFuZCB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI19pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gb0FwcENvbXBvbmVudCByZWYgdG8gdGhlIEFwcENvbXBvbmVudFxuXHQgKi9cblxuXHRfaW5pdGlhbGl6ZVJvdXRlc0luZm9ybWF0aW9uKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdGNvbnN0IG9NYW5pZmVzdCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSBhcyBhbnksXG5cdFx0XHRhUm91dGVzID0gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nID8gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nLnJvdXRlcyA6IG51bGw7XG5cblx0XHR0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm4gPSB7fTtcblxuXHRcdGlmIChhUm91dGVzKSB7XG5cdFx0XHRhUm91dGVzLmZvckVhY2goKHJvdXRlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW3JvdXRlLnBhdHRlcm5dID0gcm91dGUudGFyZ2V0O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q3VycmVudEFyZ3VtZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnNDdXJyZW50QXJndW1lbnRzO1xuXHR9XG5cblx0Z2V0Q3VycmVudFJvdXRlTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zQ3VycmVudFJvdXRlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgRkUgRkNMIGNvbnN0YW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgVGhlIGNvbnN0YW50c1xuXHQgKi9cblx0Z2V0Q29uc3RhbnRzKCkge1xuXHRcdHJldHVybiBDT05TVEFOVFM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0dGVyIGZvciBvVGFyZ2V0c0FnZ3JlZ2F0aW9uIGFycmF5LlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNnZXRUYXJnZXRBZ2dyZWdhdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBfb1RhcmdldHNBZ2dyZWdhdGlvbiBhcnJheVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldFRhcmdldEFnZ3JlZ2F0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgcm91dGVyIFJvdXRlTWF0Y2hlZCBldmVudC5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjb25Sb3V0ZU1hdGNoZWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdG9uUm91dGVNYXRjaGVkKG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgY3VycmVudC9wcmV2aW91cyByb3V0ZXMgYW5kIGFyZ3VtZW50c1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBzUm91dGVOYW1lO1xuXHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYXJndW1lbnRzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmluZyB0aGUgdGFibGUgc2Nyb2xsIHRvIHRoZSBuYXZpZ2F0ZWQgcm93IGFmdGVyIGVhY2ggbGF5b3V0IGNoYW5nZS5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjc2Nyb2xsVG9MYXN0U2VsZWN0ZWRJdGVtXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKSB7XG5cdFx0Y29uc3QgYVZpZXdzID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCk7XG5cdFx0Ly9UaGUgc2Nyb2xscyBhcmUgdHJpZ2dlcmVkIG9ubHkgaWYgdGhlIGxheW91dCBpcyB3aXRoIHNldmVyYWwgY29sdW1ucyBvciB3aGVuIHN3aXRjaGluZyB0aGUgbW9zdFJpZ2h0IGNvbHVtbiBpbiBmdWxsIHNjcmVlblxuXHRcdGlmIChhVmlld3MubGVuZ3RoID4gMSB8fCBhVmlld3NbMF0uZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWwgPCB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0bGV0IHNDdXJyZW50Vmlld1BhdGg7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFZpZXcgPSB0aGlzLmdldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKTtcblx0XHRcdGlmIChvQWRkaXRpb25hbFZpZXcgJiYgYVZpZXdzLmluZGV4T2Yob0FkZGl0aW9uYWxWaWV3KSA9PT0gLTEpIHtcblx0XHRcdFx0YVZpZXdzLnB1c2gob0FkZGl0aW9uYWxWaWV3KTtcblx0XHRcdH1cblx0XHRcdGZvciAobGV0IGluZGV4ID0gYVZpZXdzLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IGFWaWV3c1tpbmRleF0sXG5cdFx0XHRcdFx0b1ByZXZpb3VzVmlldyA9IGFWaWV3c1tpbmRleCAtIDFdO1xuXHRcdFx0XHRpZiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHNDdXJyZW50Vmlld1BhdGggPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldFBhdGgoKTtcblx0XHRcdFx0XHRvUHJldmlvdXNWaWV3LmdldENvbnRyb2xsZXIoKS5fc2Nyb2xsVGFibGVzVG9Sb3coc0N1cnJlbnRWaWV3UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSBGQ0wgU3RhdGVDaGFuZ2VkIGV2ZW50LlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNvblN0YXRlQ2hhbmdlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0b25TdGF0ZUNoYW5nZWQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBiSXNOYXZpZ2F0aW9uQXJyb3cgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNOYXZpZ2F0aW9uQXJyb3dcIik7XG5cdFx0aWYgKHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLnNDdXJyZW50QXJndW1lbnRzW3RoaXMuU1FVRVJZS0VZTkFNRV0pIHtcblx0XHRcdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50c1t0aGlzLlNRVUVSWUtFWU5BTUVdID0ge307XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzW3RoaXMuU1FVRVJZS0VZTkFNRV0ubGF5b3V0ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImxheW91dFwiKTtcblx0XHR9XG5cdFx0dGhpcy5fZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzKG9FdmVudCk7XG5cblx0XHQvLyBSZXBsYWNlIHRoZSBVUkwgd2l0aCB0aGUgbmV3IGxheW91dCBpZiBhIG5hdmlnYXRpb24gYXJyb3cgd2FzIHVzZWRcblx0XHRpZiAoYklzTmF2aWdhdGlvbkFycm93KSB7XG5cdFx0XHR0aGlzLl9vUm91dGVyUHJveHkubmF2VG8odGhpcy5zQ3VycmVudFJvdXRlTmFtZSwgdGhpcy5zQ3VycmVudEFyZ3VtZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKTtcblx0XHRpZiAob1ZpZXcpIHtcblx0XHRcdHRoaXMuX2NvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIGV2ZW50IG9uIGFsbCBicmVhZGNydW1icyAoIG9uIGVhY2ggT2JqZWN0UGFnZXMpLlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNfZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzKG9FdmVudDogYW55KSB7XG5cdFx0Ly9mb3JjZSBtb2RlbGNvbnRleHRjaGFuZ2Ugb24gT2JqZWN0UGFnZXMgdG8gcmVmcmVzaCB0aGUgYnJlYWRjcnVtYnMgbGluayBocmVmc1xuXHRcdGNvbnN0IG9GY2wgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IG9QYWdlczogYW55W10gPSBbXTtcblx0XHRvUGFnZXMgPSBvUGFnZXMuY29uY2F0KG9GY2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpKS5jb25jYXQob0ZjbC5nZXRNaWRDb2x1bW5QYWdlcygpKS5jb25jYXQob0ZjbC5nZXRFbmRDb2x1bW5QYWdlcygpKTtcblx0XHRvUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAob1BhZ2U6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBfZ2V0Vmlld0Zyb21Db250YWluZXIob1BhZ2UpO1xuXHRcdFx0Y29uc3Qgb0JyZWFkQ3J1bWJzID0gb1ZpZXcuYnlJZCAmJiBvVmlldy5ieUlkKFwiYnJlYWRjcnVtYnNcIik7XG5cdFx0XHRpZiAob0JyZWFkQ3J1bWJzKSB7XG5cdFx0XHRcdG9CcmVhZENydW1icy5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIHRvIHVwZGF0ZSB0aGUgU2hhcmUgYnV0dG9uIFZpc2liaWxpdHkuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlld0NvbHVtbiBOYW1lIG9mIHRoZSBjdXJyZW50IGNvbHVtbiAoXCJiZWdpbkNvbHVtblwiLCBcIm1pZENvbHVtblwiLCBcImVuZENvbHVtblwiKVxuXHQgKiBAcGFyYW0gc0xheW91dCBUaGUgY3VycmVudCBsYXlvdXQgdXNlZCBieSB0aGUgRkNMXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0X3VwZGF0ZVNoYXJlQnV0dG9uVmlzaWJpbGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZykge1xuXHRcdGxldCBiU2hvd1NoYXJlSWNvbjtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgXCJPbmVDb2x1bW5cIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcImJlZ2luQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdGNhc2UgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwibWlkQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJlbmRDb2x1bW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gYlNob3dTaGFyZUljb247XG5cdH1cblxuXHRfdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZykge1xuXHRcdGxldCBiRWRpdEJ1dHRvblZpc2libGUgPSB0cnVlO1xuXHRcdHN3aXRjaCAodmlld0NvbHVtbikge1xuXHRcdFx0Y2FzZSBcIm1pZENvbHVtblwiOlxuXHRcdFx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVHdvQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImVuZENvbHVtblwiOlxuXHRcdFx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRcdGJFZGl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYkVkaXRCdXR0b25WaXNpYmxlO1xuXHR9XG5cblx0dXBkYXRlVUlTdGF0ZUZvclZpZXcob1ZpZXc6IGFueSwgRkNMTGV2ZWw6IGFueSkge1xuXHRcdGNvbnN0IG9VSVN0YXRlID0gdGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpIGFzIGFueSxcblx0XHRcdG9GY2xDb2xOYW1lID0gW1wiYmVnaW5Db2x1bW5cIiwgXCJtaWRDb2x1bW5cIiwgXCJlbmRDb2x1bW5cIl0sXG5cdFx0XHRzTGF5b3V0ID0gdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCk7XG5cdFx0bGV0IHZpZXdDb2x1bW47XG5cblx0XHRpZiAoIW9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpKSB7XG5cdFx0XHRvVmlldy5zZXRNb2RlbCh0aGlzLl9jcmVhdGVIZWxwZXJNb2RlbCgpLCBcImZjbGhlbHBlclwiKTtcblx0XHR9XG5cdFx0aWYgKEZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHQvLyBUaGUgdmlldyBpcyBvbiBhIGxldmVsID4gbWF4IG51bWJlciBvZiBjb2x1bW5zLiBJdCdzIGFsd2F5cyBmdWxsc2NyZWVuIHdpdGhvdXQgY2xvc2UvZXhpdCBidXR0b25zXG5cdFx0XHR2aWV3Q29sdW1uID0gb0ZjbENvbE5hbWVbdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgLSAxXTtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbi5mdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbi5leGl0RnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uY2xvc2VDb2x1bW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uLmV4aXRGdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5mdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5jbG9zZUNvbHVtbiA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXdDb2x1bW4gPSBvRmNsQ29sTmFtZVtGQ0xMZXZlbF07XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0RkNMTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiIHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIiB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJPbmVDb2x1bW5cIlxuXHRcdCkge1xuXHRcdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvYnJlYWRDcnVtYklzVmlzaWJsZVwiLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvYnJlYWRDcnVtYklzVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHRoZSBGQ0xIZWxwZXIgZG9lc24ndCBwcm92aWRlIGFjdGlvbkJ1dHRvbiB2YWx1ZXMgZm9yIHRoZSBmaXJzdCBjb2x1bW5cblx0XHQvLyBzbyB3ZSBoYXZlIHRvIGFkZCB0aGlzIGluZm8gbWFudWFsbHlcblx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5iZWdpbkNvbHVtbiA9IHsgZnVsbFNjcmVlbjogbnVsbCwgZXhpdEZ1bGxTY3JlZW46IG51bGwsIGNsb3NlQ29sdW1uOiBudWxsIH07XG5cblx0XHRjb25zdCBvQWN0aW9uQnV0dG9uSW5mb3MgPSBPYmplY3QuYXNzaWduKHt9LCBvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mb1t2aWV3Q29sdW1uXSk7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLnN3aXRjaFZpc2libGUgPSBvQWN0aW9uQnV0dG9uSW5mb3MuZnVsbFNjcmVlbiAhPT0gbnVsbCB8fCBvQWN0aW9uQnV0dG9uSW5mb3MuZXhpdEZ1bGxTY3JlZW4gIT09IG51bGw7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLnN3aXRjaEljb24gPSBvQWN0aW9uQnV0dG9uSW5mb3MuZnVsbFNjcmVlbiAhPT0gbnVsbCA/IFwic2FwLWljb246Ly9mdWxsLXNjcmVlblwiIDogXCJzYXAtaWNvbjovL2V4aXQtZnVsbC1zY3JlZW5cIjtcblx0XHRvQWN0aW9uQnV0dG9uSW5mb3MuaXNGdWxsU2NyZWVuID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gPT09IG51bGw7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLmNsb3NlVmlzaWJsZSA9IG9BY3Rpb25CdXR0b25JbmZvcy5jbG9zZUNvbHVtbiAhPT0gbnVsbDtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2FjdGlvbkJ1dHRvbnNJbmZvXCIsIG9BY3Rpb25CdXR0b25JbmZvcyk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93RWRpdEJ1dHRvblwiLCB0aGlzLl91cGRhdGVFZGl0QnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL3Nob3dTaGFyZUljb25cIiwgdGhpcy5fdXBkYXRlU2hhcmVCdXR0b25WaXNpYmlsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHJvdXRlciBCZWZvcmVSb3V0ZU1hdGNoZWQgZXZlbnQuXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI29uQmVmb3JlUm91dGVNYXRjaGVkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRvbkJlZm9yZVJvdXRlTWF0Y2hlZChvRXZlbnQ6IGFueSkge1xuXHRcdGlmIChvRXZlbnQpIHtcblx0XHRcdGNvbnN0IG9RdWVyeVBhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkuYXJndW1lbnRzW3RoaXMuU1FVRVJZS0VZTkFNRV07XG5cdFx0XHRsZXQgc0xheW91dCA9IG9RdWVyeVBhcmFtcyA/IG9RdWVyeVBhcmFtcy5sYXlvdXQgOiBudWxsO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBubyBsYXlvdXQgcGFyYW1ldGVyLCBxdWVyeSBmb3IgdGhlIGRlZmF1bHQgbGV2ZWwgMCBsYXlvdXQgKG5vcm1hbGx5IE9uZUNvbHVtbilcblx0XHRcdGlmICghc0xheW91dCkge1xuXHRcdFx0XHRjb25zdCBvTmV4dFVJU3RhdGUgPSB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKDApO1xuXHRcdFx0XHRzTGF5b3V0ID0gb05leHRVSVN0YXRlLmxheW91dDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxheW91dCBpZiBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhlIGNhc2UgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLCBqdXN0IG5lZWRlZCBpbiBjYXNlXG5cdFx0XHQvLyB0aGUgVVJMIGhhcyBiZWVuIG1hbnVhbGx5IG1vZGlmaWVkXG5cdFx0XHRjb25zdCBhVGFyZ2V0cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25maWdcIikudGFyZ2V0O1xuXHRcdFx0c0xheW91dCA9IHRoaXMuX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNMYXlvdXQsIGFUYXJnZXRzKTtcblxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBsYXlvdXQgb2YgdGhlIEZsZXhpYmxlQ29sdW1uTGF5b3V0XG5cdFx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5zZXRMYXlvdXQoc0xheW91dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmb3IgdGhlIEZDTCBDb21wb25lbnQuXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI2dldEhlbHBlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgSW5zdGFuY2Ugb2YgYSBzZW1hbnRpYyBoZWxwZXJcblx0ICovXG5cdGdldEhlbHBlcigpIHtcblx0XHRyZXR1cm4gRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlci5nZXRJbnN0YW5jZUZvcih0aGlzLmdldEZjbENvbnRyb2woKSwgdGhpcy5fb0ZDTENvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgRkNMIGxheW91dCBmb3IgYSBnaXZlbiBGQ0wgbGV2ZWwgYW5kIGEgdGFyZ2V0IGhhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBpTmV4dEZDTExldmVsIEZDTCBsZXZlbCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gc1Byb3Bvc2VkTGF5b3V0IFRoZSBwcm9wb3NlZCBsYXlvdXRcblx0ICogQHBhcmFtIGtlZXBDdXJyZW50TGF5b3V0IFRydWUgaWYgd2Ugd2FudCB0byBrZWVwIHRoZSBjdXJyZW50IGxheW91dCBpZiBwb3NzaWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBsYXlvdXRcblx0ICovXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKSB7XG5cdFx0Ly8gRmlyc3QsIGFzayB0aGUgRkNMIGhlbHBlciB0byBjYWxjdWxhdGUgdGhlIGxheW91dCBpZiBub3RoaW5nIGlzIHByb3Bvc2VkXG5cdFx0aWYgKCFzUHJvcG9zZWRMYXlvdXQpIHtcblx0XHRcdHNQcm9wb3NlZExheW91dCA9IGtlZXBDdXJyZW50TGF5b3V0ID8gdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCkgOiB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKGlOZXh0RkNMTGV2ZWwpLmxheW91dDtcblx0XHR9XG5cblx0XHQvLyBUaGVuIGNoYW5nZSB0aGlzIHZhbHVlIGlmIG5lY2Vzc2FyeSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0Y29uc3Qgb1JvdXRlID0gKHRoaXMuZ2V0Um91dGVyKCkgYXMgYW55KS5nZXRSb3V0ZUJ5SGFzaChgJHtzSGFzaH0/bGF5b3V0PSR7c1Byb3Bvc2VkTGF5b3V0fWApO1xuXHRcdGNvbnN0IGFUYXJnZXRzID0gdGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW29Sb3V0ZS5nZXRQYXR0ZXJuKCldO1xuXG5cdFx0cmV0dXJuIHRoaXMuX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNQcm9wb3NlZExheW91dCwgYVRhcmdldHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gRkNMIGxheW91dCBpcyBjb21wYXRpYmxlIHdpdGggYW4gYXJyYXkgb2YgdGFyZ2V0cy5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wb3NlZExheW91dCBQcm9wb3NlZCB2YWx1ZSBmb3IgdGhlIEZDTCBsYXlvdXRcblx0ICogQHBhcmFtIGFUYXJnZXRzIEFycmF5IG9mIHRhcmdldCBuYW1lcyB1c2VkIGZvciBjaGVja2luZ1xuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdGVkIGxheW91dFxuXHQgKi9cblx0X2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNQcm9wb3NlZExheW91dDogYW55LCBhVGFyZ2V0czogYW55KSB7XG5cdFx0Y29uc3QgYWxsQWxsb3dlZExheW91dHM6IGFueSA9IHtcblx0XHRcdFwiMlwiOiBbXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIiwgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiLCBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIl0sXG5cdFx0XHRcIjNcIjogW1xuXHRcdFx0XHRcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlblwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW5cIixcblx0XHRcdFx0XCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIsXG5cdFx0XHRcdFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiXG5cdFx0XHRdXG5cdFx0fTtcblxuXHRcdGlmIChhVGFyZ2V0cyAmJiAhQXJyYXkuaXNBcnJheShhVGFyZ2V0cykpIHtcblx0XHRcdC8vIFRvIHN1cHBvcnQgc2luZ2xlIHRhcmdldCBhcyBhIHN0cmluZyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdGFUYXJnZXRzID0gW2FUYXJnZXRzXTtcblx0XHR9XG5cblx0XHRpZiAoIWFUYXJnZXRzKSB7XG5cdFx0XHQvLyBEZWZlbnNpdmUsIGp1c3QgaW4gY2FzZS4uLlxuXHRcdFx0cmV0dXJuIHNQcm9wb3NlZExheW91dDtcblx0XHR9IGVsc2UgaWYgKGFUYXJnZXRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdC8vIE1vcmUgdGhhbiAxIHRhcmdldDoganVzdCBzaW1wbHkgY2hlY2sgZnJvbSB0aGUgYWxsb3dlZCB2YWx1ZXNcblx0XHRcdGNvbnN0IGFMYXlvdXRzID0gYWxsQWxsb3dlZExheW91dHNbYVRhcmdldHMubGVuZ3RoXTtcblx0XHRcdGlmIChhTGF5b3V0cy5pbmRleE9mKHNQcm9wb3NlZExheW91dCkgPCAwKSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wb3NlZCBsYXlvdXQgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuXHRcdFx0XHQvLyAtLT4gQXNrIHRoZSBoZWxwZXIgZm9yIHRoZSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIG51bWJlciBvZiBjb2x1bW5zXG5cdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IGFMYXlvdXRzWzBdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IG9uZSB0YXJnZXRcblx0XHRcdGNvbnN0IHNUYXJnZXRBZ2dyZWdhdGlvbiA9IHRoaXMuZ2V0VGFyZ2V0QWdncmVnYXRpb24oKVthVGFyZ2V0c1swXV0uYWdncmVnYXRpb24gfHwgdGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0c3dpdGNoIChzVGFyZ2V0QWdncmVnYXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBcIk9uZUNvbHVtblwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVuZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc1Byb3Bvc2VkTGF5b3V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGluc3RhbmNlZCB2aWV3cyBpbiB0aGUgRkNMIGNvbXBvbmVudC5cblx0ICpcblx0ICogQHJldHVybnMge0FycmF5fSBSZXR1cm4gdGhlIHZpZXdzLlxuXHQgKi9cblx0Z2V0SW5zdGFuY2VkVmlld3MoKTogWE1MVmlld1tdIHtcblx0XHRjb25zdCBmY2xDb250cm9sID0gdGhpcy5nZXRGY2xDb250cm9sKCk7XG5cdFx0Y29uc3QgY29tcG9uZW50Q29udGFpbmVyczogQ29udHJvbFtdID0gW1xuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldE1pZENvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldEVuZENvbHVtblBhZ2VzKClcblx0XHRdO1xuXHRcdHJldHVybiBjb21wb25lbnRDb250YWluZXJzLm1hcCgob1BhZ2UpID0+IChvUGFnZSBhcyBhbnkpLmdldENvbXBvbmVudEluc3RhbmNlKCkuZ2V0Um9vdENvbnRyb2woKSk7XG5cdH1cblxuXHQvKipcblx0ICogZ2V0IGFsbCB2aXNpYmxlIHZpZXdzIGluIHRoZSBGQ0wgY29tcG9uZW50LlxuXHQgKiBzTGF5b3V0IG9wdGlvbmFsIHBhcmFtZXRlciBpcyB2ZXJ5IHNwZWNpZmljIGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBsYXRlc3QgbmF2aWdhdGVkIHJvd1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHNMYXlvdXQgTGF5b3V0IHRoYXQgd2FzIGFwcGxpZWQganVzdCBiZWZvcmUgdGhlIGN1cnJlbnQgbmF2aWdhdGlvblxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybiB2aWV3c1xuXHQgKi9cblxuXHRfZ2V0QWxsVmlzaWJsZVZpZXdzKHNMYXlvdXQ/OiBhbnkpIHtcblx0XHRjb25zdCBhVmlld3MgPSBbXTtcblx0XHRzTGF5b3V0ID0gc0xheW91dCA/IHNMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNFbmRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cuZXJyb3IoYFVuaGFuZGxlZCBzd2l0Y2ggY2FzZSBmb3IgJHt0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKX1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYVZpZXdzO1xuXHR9XG5cblx0X2dldEFsbFZpZXdzKHNMYXlvdXQ/OiBhbnkpIHtcblx0XHRjb25zdCBhVmlld3MgPSBbXTtcblx0XHRzTGF5b3V0ID0gc0xheW91dCA/IHNMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zQmVnaW5FeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWlkIGNvbHVtbiBmdWxsc2NyZWVuIGNvbWVzIGZyb20gYSAyIG9yIGEgMyBjb2x1bW4gbGF5b3V0XG5cdFx0XHRcdGNvbnN0IHNMYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4gPSAodGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpIGFzIGFueSkuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmV4aXRGdWxsU2NyZWVuO1xuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc0xheW91dFdoZW5FeGl0RnVsbFNjcmVlbi5pbmRleE9mKFwiVGhyZWVDb2x1bW5cIikgPj0gMCkge1xuXHRcdFx0XHRcdC8vIFdlIGNvbWUgZnJvbSBhIDMgY29sdW1uIGxheW91dFxuXHRcdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLmVycm9yKGBVbmhhbmRsZWQgc3dpdGNoIGNhc2UgZm9yICR7dGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCl9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBhVmlld3M7XG5cdH1cblxuXHRvbkNvbnRhaW5lclJlYWR5KCkge1xuXHRcdC8vIFJlc3RvcmUgdmlld3MgaWYgbmVjY2Vzc2FyeS5cblx0XHRjb25zdCBhVmlld3MgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0XHRjb25zdCBhUmVzdG9yZVByb21pc2VzOiBhbnlbXSA9IGFWaWV3cy5yZWR1Y2UoZnVuY3Rpb24gKGFQcm9taXNlczogYW55LCBvVGFyZ2V0VmlldzogYW55KSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaChLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcob1RhcmdldFZpZXcpKTtcblx0XHRcdHJldHVybiBhUHJvbWlzZXM7XG5cdFx0fSwgW10pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdG9yZVByb21pc2VzKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdENvbnRleHQoKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFZpZXdzKCkucG9wKCk7XG5cdH1cblxuXHRpc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5nZXRGY2xDb250cm9sKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgYUFsbFZpc2libGVWaWV3cyA9IHRoaXMuX2dldEFsbFZpZXdzKCk7XG5cdFx0Zm9yIChjb25zdCB2aWV3IG9mIGFBbGxWaXNpYmxlVmlld3MpIHtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdGlmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG9Db250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdmlldyBoYXMgYmVlbiBkZXN0cm95ZWQgLS0+IGFwcCBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3NldFNoZWxsTWVudVRpdGxlKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc1RpdGxlOiBzdHJpbmcsIHNBcHBUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW4gIT09IHRydWUpIHtcblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNBcHBUaXRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZjbENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFB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
843
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJDT05TVEFOVFMiLCJwYWdlIiwibmFtZXMiLCJjdXJyZW50R2V0dGVyIiwicHJlZml4Iiwic3VmZml4IiwiZ2V0dGVyIiwiX2dldFZpZXdGcm9tQ29udGFpbmVyIiwib0NvbnRhaW5lciIsImlzQSIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJGY2xDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZm9yRWFjaCIsIm9DaGlsZFZpZXciLCJwQ2hpbGRWaWV3IiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiYWRhcHRTdGF0ZUNvbnRyb2xzIiwiYVN0YXRlQ29udHJvbHMiLCJvblJlc3RvcmUiLCJmY2xDb250cm9sbGVyIiwiYXBwQ29udGVudENvbnRhaW5lciIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJpbnRlcm5hbE1vZGVsIiwiZ2V0TW9kZWwiLCJwYWdlcyIsImdldFByb3BlcnR5IiwiY29tcG9uZW50SWQiLCJzZXRQcm9wZXJ0eSIsIm9uQ29udGFpbmVyUmVhZHkiLCJvblN1c3BlbmQiLCJvRkNMQ29udHJvbGxlciIsIm9GQ0xDb250cm9sIiwiZ2V0RmNsQ29udHJvbCIsImFCZWdpbkNvbHVtblBhZ2VzIiwiZ2V0QmVnaW5Db2x1bW5QYWdlcyIsImFNaWRDb2x1bW5QYWdlcyIsImdldE1pZENvbHVtblBhZ2VzIiwiYUVuZENvbHVtblBhZ2VzIiwiZ2V0RW5kQ29sdW1uUGFnZXMiLCJhUGFnZXMiLCJjb25jYXQiLCJvUGFnZSIsIm9UYXJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJvbkluaXQiLCJfaW50ZXJuYWxJbml0IiwibWFuYWdlRGF0YVJlY2VpdmVkIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJwYXRoIiwidGFyZ2V0ZWRWaWV3IiwiZmluZCIsInZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJpc0tlZXBBbGl2ZSIsIl9yb3V0aW5nIiwib25EYXRhUmVjZWl2ZWQiLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiX2dldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24iLCJvbkJlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm9uUm91dGVNYXRjaGVkIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJfc2F2ZUxheW91dCIsIl9vUm91dGVyUHJveHkiLCJzQ3VycmVudFJvdXRlTmFtZSIsInNDdXJyZW50QXJndW1lbnRzIiwiU1FVRVJZS0VZTkFNRSIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJvRGF0YU1vZGVsIiwiYXR0YWNoRXZlbnQiLCJiaW5kIiwiZ2V0Um91dGVyUHJveHkiLCJfb0ZDTENvbmZpZyIsIm1heENvbHVtbnNDb3VudCIsIm9Sb3V0aW5nQ29uZmlnIiwiZ2V0TWFuaWZlc3QiLCJyb3V0aW5nIiwiY29uZmlnIiwiZmxleGlibGVDb2x1bW5MYXlvdXQiLCJvRkNMTWFuaWZlc3RDb25maWciLCJkZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSIsImRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUiLCJsaW1pdEZDTFRvVHdvQ29sdW1ucyIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImRlZmF1bHRDb250cm9sQWdncmVnYXRpb24iLCJfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbiIsIm9uU3RhdGVDaGFuZ2VkIiwiYXR0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSIsIm9FdmVudCIsInNQcmV2aW91c0xheW91dCIsImdldFBhcmFtZXRlcnMiLCJsYXlvdXQiLCJhQWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwib1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQiLCJsZW5ndGgiLCJvUmlnaHRNb3N0VmlldyIsImF0dGFjaEV2ZW50T25jZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uIiwiZ2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uRXhpdCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsImRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsImRldGFjaFN0YXRlQ2hhbmdlIiwiZGV0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSIsIl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIiwiX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiIsIkJhc2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiaXNGY2xFbmFibGVkIiwiZGlzcGxheUVycm9yUGFnZSIsInNFcnJvck1lc3NhZ2UiLCJtUGFyYW1ldGVycyIsIkZDTExldmVsIiwiYU1lc3NhZ2VQYWdlcyIsIm9NZXNzYWdlUGFnZSIsIk1lc3NhZ2VQYWdlIiwic2hvd0hlYWRlciIsImljb24iLCJhZGRCZWdpbkNvbHVtblBhZ2UiLCJhZGRNaWRDb2x1bW5QYWdlIiwiYWRkRW5kQ29sdW1uUGFnZSIsInNldFRleHQiLCJ0ZWNobmljYWxNZXNzYWdlIiwic2V0Q3VzdG9tRGVzY3JpcHRpb24iLCJMaW5rIiwidGV4dCIsImRlc2NyaXB0aW9uIiwicHJlc3MiLCJNZXNzYWdlQm94Iiwic2hvdyIsIkljb24iLCJFUlJPUiIsInRpdGxlIiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZGVmYXVsdEFjdGlvbiIsImRldGFpbHMiLCJ0ZWNobmljYWxEZXRhaWxzIiwiY29udGVudFdpZHRoIiwic2V0RGVzY3JpcHRpb24iLCJ0byIsImdldElkIiwib01hbmlmZXN0Iiwib1RhcmdldHMiLCJ0YXJnZXRzIiwiT2JqZWN0Iiwia2V5cyIsInNUYXJnZXROYW1lIiwib1RhcmdldCIsImFnZ3JlZ2F0aW9uIiwicGF0dGVybiIsImNvbnRleHRQYXR0ZXJuIiwiYVJvdXRlcyIsInJvdXRlcyIsInJvdXRlIiwidGFyZ2V0IiwiZ2V0Q3VycmVudEFyZ3VtZW50IiwiZ2V0Q3VycmVudFJvdXRlTmFtZSIsImdldENvbnN0YW50cyIsImdldFRhcmdldEFnZ3JlZ2F0aW9uIiwic1JvdXRlTmFtZSIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImFWaWV3cyIsInNDdXJyZW50Vmlld1BhdGgiLCJvQWRkaXRpb25hbFZpZXciLCJpbmRleE9mIiwiaW5kZXgiLCJvVmlldyIsIm9QcmV2aW91c1ZpZXciLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJiSXNOYXZpZ2F0aW9uQXJyb3ciLCJ1bmRlZmluZWQiLCJfZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzIiwibmF2VG8iLCJnZXRSaWdodG1vc3RWaWV3IiwiX2NvbXB1dGVUaXRsZUhpZXJhcmNoeSIsIm9GY2wiLCJnZXRTb3VyY2UiLCJvUGFnZXMiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJiRWRpdEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImVuZENvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJhcmd1bWVudHMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwic2V0TGF5b3V0IiwiRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciIsImdldEluc3RhbmNlRm9yIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNIYXNoIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvUm91dGUiLCJnZXRSb3V0ZUJ5SGFzaCIsImdldFBhdHRlcm4iLCJhbGxBbGxvd2VkTGF5b3V0cyIsIkFycmF5IiwiaXNBcnJheSIsImFMYXlvdXRzIiwic1RhcmdldEFnZ3JlZ2F0aW9uIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJmY2xDb250cm9sIiwiY29tcG9uZW50Q29udGFpbmVycyIsIm1hcCIsIkVuZENvbHVtbkZ1bGxTY3JlZW4iLCJnZXRDdXJyZW50RW5kQ29sdW1uUGFnZSIsIk1pZENvbHVtbkZ1bGxTY3JlZW4iLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsIk9uZUNvbHVtbiIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZCIsIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkIiwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQiLCJUd29Db2x1bW5zTWlkRXhwYW5kZWQiLCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlbiIsIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW4iLCJMb2ciLCJlcnJvciIsIl9nZXRBbGxWaWV3cyIsInNMYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4iLCJhUmVzdG9yZVByb21pc2VzIiwicmVkdWNlIiwiYVByb21pc2VzIiwiS2VlcEFsaXZlSGVscGVyIiwicmVzdG9yZVZpZXciLCJhbGwiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwicG9wIiwiaXNDb250ZXh0VXNlZEluUGFnZXMiLCJvQ29udGV4dCIsImFBbGxWaXNpYmxlVmlld3MiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJzVGl0bGUiLCJzQXBwVGl0bGUiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0VGl0bGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZjbC5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlclwiO1xuaW1wb3J0IGZMaWJyYXJ5IGZyb20gXCJzYXAvZi9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94LCB7IEFjdGlvbiwgSWNvbiB9IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVBhZ2UgZnJvbSBcInNhcC9tL01lc3NhZ2VQYWdlXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcIi4uL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuXG5jb25zdCBMYXlvdXRUeXBlID0gZkxpYnJhcnkuTGF5b3V0VHlwZTtcblxuY29uc3QgQ09OU1RBTlRTID0ge1xuXHRwYWdlOiB7XG5cdFx0bmFtZXM6IFtcIkJlZ2luQ29sdW1uXCIsIFwiTWlkQ29sdW1uXCIsIFwiRW5kQ29sdW1uXCJdLFxuXHRcdGN1cnJlbnRHZXR0ZXI6IHtcblx0XHRcdHByZWZpeDogXCJnZXRDdXJyZW50XCIsXG5cdFx0XHRzdWZmaXg6IFwiUGFnZVwiXG5cdFx0fSxcblx0XHRnZXR0ZXI6IHtcblx0XHRcdHByZWZpeDogXCJnZXRcIixcblx0XHRcdHN1ZmZpeDogXCJQYWdlc1wiXG5cdFx0fVxuXHR9XG59O1xuY29uc3QgX2dldFZpZXdGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24gKG9Db250YWluZXI6IGFueSkge1xuXHRpZiAob0NvbnRhaW5lci5pc0EoXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRyZXR1cm4gb0NvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpLmdldFJvb3RDb250cm9sKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG9Db250YWluZXI7XG5cdH1cbn07XG4vKipcbiAqIEJhc2UgY29udHJvbGxlciBjbGFzcyBmb3IgeW91ciBvd24gcm9vdCB2aWV3IHdpdGggYW4gc2FwLmYuRmxleGlibGVDb2x1bW5MYXlvdXQgY29udHJvbC5cbiAqXG4gKiBCeSB1c2luZyBvciBleHRlbmRpbmcgdGhpcyBjb250cm9sbGVyLCB5b3UgY2FuIHVzZSB5b3VyIG93biByb290IHZpZXcgd2l0aCB0aGUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFuZFxuICogeW91IGNhbiBtYWtlIHVzZSBvZiBTQVAgRmlvcmkgZWxlbWVudHMgcGFnZXMgYW5kIFNBUCBGaW9yaSBlbGVtZW50cyBidWlsZGluZyBibG9ja3MuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuMTEwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5jbGFzcyBGY2xDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0Vmlld1N0YXRlLm92ZXJyaWRlKHtcblx0XHRcdGFwcGx5SW5pdGlhbFN0YXRlT25seTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IGFueSkge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLl9nZXRBbGxWaXNpYmxlVmlld3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hpbGRWaWV3OiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBwQ2hpbGRWaWV3ID0gUHJvbWlzZS5yZXNvbHZlKG9DaGlsZFZpZXcpO1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKHBDaGlsZFZpZXcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRhZGFwdFN0YXRlQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGFTdGF0ZUNvbnRyb2xzOiBhbnkpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5fZ2V0QWxsVmlzaWJsZVZpZXdzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NoaWxkVmlldzogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgcENoaWxkVmlldyA9IFByb21pc2UucmVzb2x2ZShvQ2hpbGRWaWV3KTtcblx0XHRcdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKHBDaGlsZFZpZXcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRvblJlc3RvcmU6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpIHtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBhcHBDb250ZW50Q29udGFpbmVyID0gZmNsQ29udHJvbGxlci5nZXRBcHBDb250ZW50Q29udGFpbmVyKCk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb250ZW50Q29udGFpbmVyLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRjb25zdCBwYWdlcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnZXNcIik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb21wb25lbnRJZCBpbiBwYWdlcykge1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYC9wYWdlcy8ke2NvbXBvbmVudElkfS9yZXN0b3JlU3RhdHVzYCwgXCJwZW5kaW5nXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZjbENvbnRyb2xsZXIub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0fSxcblx0XHRcdG9uU3VzcGVuZDogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSkge1xuXHRcdFx0XHRjb25zdCBvRkNMQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBvRkNMQ29udHJvbCA9IG9GQ0xDb250cm9sbGVyLmdldEZjbENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgYUJlZ2luQ29sdW1uUGFnZXM6IENvbnRyb2xbXSA9IG9GQ0xDb250cm9sLmdldEJlZ2luQ29sdW1uUGFnZXMoKSB8fCBbXTtcblx0XHRcdFx0Y29uc3QgYU1pZENvbHVtblBhZ2VzOiBDb250cm9sW10gPSBvRkNMQ29udHJvbC5nZXRNaWRDb2x1bW5QYWdlcygpIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBhRW5kQ29sdW1uUGFnZXM6IENvbnRyb2xbXSA9IG9GQ0xDb250cm9sLmdldEVuZENvbHVtblBhZ2VzKCkgfHwgW107XG5cdFx0XHRcdGNvbnN0IGFQYWdlcyA9IChbXSBhcyBDb250cm9sW10pLmNvbmNhdChhQmVnaW5Db2x1bW5QYWdlcywgYU1pZENvbHVtblBhZ2VzLCBhRW5kQ29sdW1uUGFnZXMpO1xuXG5cdFx0XHRcdGFQYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFnZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldFZpZXcgPSBfZ2V0Vmlld0Zyb21Db250YWluZXIob1BhZ2UpO1xuXG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVGFyZ2V0VmlldyAmJiBvVGFyZ2V0Vmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUub25TdXNwZW5kKSB7XG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlci52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRwcm90ZWN0ZWQgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgc0N1cnJlbnRSb3V0ZU5hbWUhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBzQ3VycmVudEFyZ3VtZW50cz86IGFueTtcblxuXHRwcml2YXRlIHNQcmV2aW91c0xheW91dCE6IHN0cmluZztcblxuXHRwcml2YXRlIFNRVUVSWUtFWU5BTUUhOiBzdHJpbmc7XG5cblx0cHJvdGVjdGVkIF9vRkNMQ29uZmlnOiBhbnk7XG5cblx0cHJpdmF0ZSBvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb246IGFueTtcblxuXHRwcml2YXRlIF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uOiBhbnk7XG5cblx0cHJpdmF0ZSBfb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuOiBhbnk7XG5cblx0cHJpdmF0ZSBhTWVzc2FnZVBhZ2VzPzogYW55W107XG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuZ2V0TWV0YWRhdGFcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblxuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXHR9XG5cblx0bWFuYWdlRGF0YVJlY2VpdmVkKGV2ZW50OiBFdmVudCkge1xuXHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJlcnJvclwiKSkge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInBhdGhcIiksXG5cdFx0XHRcdHRhcmdldGVkVmlldyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpLmZpbmQoKHZpZXcpID0+IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBwYXRoKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gbWFuYWdlIGVycm9yIHdoZW4gdGhlIHJlcXVlc3QgaXMgcmVsYXRlZCB0byBhIGZvcm0gIGludG8gYW4gT2JqZWN0UGFnZVxuXHRcdFx0aWYgKHBhdGggJiYgKHRhcmdldGVkVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KT8uaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0XHQodGFyZ2V0ZWRWaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX3JvdXRpbmcub25EYXRhUmVjZWl2ZWQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKSB7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fZ2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiwgdGhpcyk7XG5cdFx0c3VwZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5vbkJlZm9yZVJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcy5vblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5fc2F2ZUxheW91dCwgdGhpcyk7XG5cdH1cblxuXHRfaW50ZXJuYWxJbml0KCkge1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkpIHtcblx0XHRcdHJldHVybjsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxuXHRcdH1cblxuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBcIlwiO1xuXHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgPSB7fTtcblx0XHR0aGlzLlNRVUVSWUtFWU5BTUUgPSBcIj9xdWVyeVwiO1xuXG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cblx0XHRjb25zdCBvRGF0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdG9EYXRhTW9kZWw/LmF0dGFjaEV2ZW50KFwiZGF0YVJlY2VpdmVkXCIsIHRoaXMubWFuYWdlRGF0YVJlY2VpdmVkLmJpbmQodGhpcykpO1xuXG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXG5cdFx0Ly8gR2V0IEZDTCBjb25maWd1cmF0aW9uIGluIHRoZSBtYW5pZmVzdFxuXHRcdHRoaXMuX29GQ0xDb25maWcgPSB7IG1heENvbHVtbnNDb3VudDogMyB9O1xuXHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gKG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSBhcyBhbnkpW1wic2FwLnVpNVwiXS5yb3V0aW5nO1xuXG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LmZsZXhpYmxlQ29sdW1uTGF5b3V0KSB7XG5cdFx0XHRjb25zdCBvRkNMTWFuaWZlc3RDb25maWcgPSBvUm91dGluZ0NvbmZpZy5jb25maWcuZmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cblx0XHRcdC8vIERlZmF1bHQgbGF5b3V0IGZvciAyIGNvbHVtbnNcblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSA9IG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVmYXVsdCBsYXlvdXQgZm9yIDMgY29sdW1uc1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZSA9IG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMaW1pdCBGQ0wgdG8gMiBjb2x1bW5zID9cblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcubGltaXRGQ0xUb1R3b0NvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgPSAyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAob1JvdXRpbmdDb25maWc/LmNvbmZpZz8uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRDb250cm9sQWdncmVnYXRpb24gPSBvUm91dGluZ0NvbmZpZy5jb25maWcuY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdH1cblxuXHRcdHRoaXMuX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbihvQXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24ob0FwcENvbXBvbmVudCk7XG5cblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHR9XG5cblx0Z2V0RmNsQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBcHBDb250ZW50Q29udGFpbmVyKCkgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHRfc2F2ZUxheW91dChvRXZlbnQ6IGFueSkge1xuXHRcdHRoaXMuc1ByZXZpb3VzTGF5b3V0ID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKS5sYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBhZGRpdGlvbmFsIHZpZXcgKG9uIHRvcCBvZiB0aGUgdmlzaWJsZSB2aWV3cyksIHRvIGJlIGFibGUgdG8gY29tcHV0ZSB0aGUgbGF0ZXN0IHRhYmxlIG5hdmlnYXRlZCByb3dzIG9mXG5cdCAqIHRoZSBtb3N0IHJpZ2h0IHZpc2libGUgdmlldyBhZnRlciBhIG5hdiBiYWNrIG9yIGNvbHVtbiBmdWxsc2NyZWVuLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjX2dldFJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqL1xuXG5cdF9nZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCkge1xuXHRcdGNvbnN0IGFBbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWQgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3ModGhpcy5zUHJldmlvdXNMYXlvdXQpO1xuXHRcdGNvbnN0IG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkID0gYUFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZFthQWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkLmxlbmd0aCAtIDFdO1xuXHRcdGxldCBvUmlnaHRNb3N0Vmlldztcblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEV2ZW50T25jZShcInJvdXRlTWF0Y2hlZFwiLCAob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdG9SaWdodE1vc3RWaWV3ID0gX2dldFZpZXdGcm9tQ29udGFpbmVyKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKVtvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIikubGVuZ3RoIC0gMV0pO1xuXHRcdFx0aWYgKG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkKSB7XG5cdFx0XHRcdC8vIE5hdmlnYXRpb24gZm9yd2FyZCBmcm9tIEwyIHRvIHZpZXcgbGV2ZWwgTDMgKEZ1bGxTY3JlZW5MYXlvdXQpOlxuXHRcdFx0XHRpZiAob1JpZ2h0TW9zdFZpZXcuZ2V0Vmlld0RhdGEoKSAmJiBvUmlnaHRNb3N0Vmlldy5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbCA9PT0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdFx0XHR0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbiA9IG9SaWdodE1vc3RWaWV3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE5hdmlnYXRpb25zIGJhY2t3YXJkIGZyb20gTDMgZG93biB0byBMMiwgTDEsIEwwIChUaHJlZUNvbHVtbiBsYXlvdXQpOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1JpZ2h0TW9zdFZpZXcuZ2V0Vmlld0RhdGEoKSAmJlxuXHRcdFx0XHRcdG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkLmdldFZpZXdEYXRhKCkgJiZcblx0XHRcdFx0XHRvUmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZC5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbCA8IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50ICYmXG5cdFx0XHRcdFx0b1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQuZ2V0Vmlld0RhdGEoKSAmJlxuXHRcdFx0XHRcdG9SaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkLmdldFZpZXdEYXRhKCkudmlld0xldmVsID4gb1JpZ2h0TW9zdFZpZXcuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWwgJiZcblx0XHRcdFx0XHRvUmlnaHRNb3N0VmlldyAhPT0gb1JpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24gPSBvUmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb247XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5vblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5kZXRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5vbkJlZm9yZVJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuZGV0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uID0gbnVsbDtcblx0XHR0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm4gPSBudWxsO1xuXG5cdFx0QmFzZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uRXhpdC5iaW5kKHRoaXMpKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIEZDTCBjb21wb25lbnQgaXMgZW5hYmxlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI2lzRmNsRW5hYmxlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgYHRydWVgIHNpbmNlIHdlIGFyZSBpbiBGQ0wgc2NlbmFyaW9cblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0aXNGY2xFbmFibGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgUGFnZSB0byBkaXNwbGF5IHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2UgY29udGFpbmluZyB0aGUgY3VycmVudCBlcnJvci5cblx0ICpcblx0ICogQHBhcmFtIHNFcnJvck1lc3NhZ2Vcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNkaXNwbGF5RXJyb3JQYWdlXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGNyZWF0ZXMgYSBQYWdlIHRvIGRpc3BsYXkgdGhlIGVycm9yXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGRpc3BsYXlFcnJvclBhZ2Uoc0Vycm9yTWVzc2FnZTogYW55LCBtUGFyYW1ldGVyczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgb0ZDTENvbnRyb2wgPSB0aGlzLmdldEZjbENvbnRyb2woKTtcblxuXHRcdGlmICh0aGlzLl9vRkNMQ29uZmlnICYmIG1QYXJhbWV0ZXJzLkZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHRtUGFyYW1ldGVycy5GQ0xMZXZlbCA9IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IC0gMTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuYU1lc3NhZ2VQYWdlcykge1xuXHRcdFx0dGhpcy5hTWVzc2FnZVBhZ2VzID0gW251bGwsIG51bGwsIG51bGxdO1xuXHRcdH1cblx0XHRsZXQgb01lc3NhZ2VQYWdlID0gdGhpcy5hTWVzc2FnZVBhZ2VzW21QYXJhbWV0ZXJzLkZDTExldmVsXTtcblx0XHRpZiAoIW9NZXNzYWdlUGFnZSkge1xuXHRcdFx0b01lc3NhZ2VQYWdlID0gbmV3IE1lc3NhZ2VQYWdlKHtcblx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdGljb246IFwic2FwLWljb246Ly9tZXNzYWdlLWVycm9yXCJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5hTWVzc2FnZVBhZ2VzW21QYXJhbWV0ZXJzLkZDTExldmVsXSA9IG9NZXNzYWdlUGFnZTtcblxuXHRcdFx0c3dpdGNoIChtUGFyYW1ldGVycy5GQ0xMZXZlbCkge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0b0ZDTENvbnRyb2wuYWRkQmVnaW5Db2x1bW5QYWdlKG9NZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdG9GQ0xDb250cm9sLmFkZE1pZENvbHVtblBhZ2Uob01lc3NhZ2VQYWdlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG9GQ0xDb250cm9sLmFkZEVuZENvbHVtblBhZ2Uob01lc3NhZ2VQYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTWVzc2FnZVBhZ2Uuc2V0VGV4dChzRXJyb3JNZXNzYWdlKTtcblxuXHRcdGlmIChtUGFyYW1ldGVycy50ZWNobmljYWxNZXNzYWdlKSB7XG5cdFx0XHRvTWVzc2FnZVBhZ2Uuc2V0Q3VzdG9tRGVzY3JpcHRpb24oXG5cdFx0XHRcdG5ldyBMaW5rKHtcblx0XHRcdFx0XHR0ZXh0OiBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbiB8fCBtUGFyYW1ldGVycy50ZWNobmljYWxNZXNzYWdlLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94LnNob3cobVBhcmFtZXRlcnMudGVjaG5pY2FsTWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0XHRpY29uOiBJY29uLkVSUk9SLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogbVBhcmFtZXRlcnMudGl0bGUsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbnM6IFtBY3Rpb24uT0tdLFxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uOiBBY3Rpb24uT0ssXG5cdFx0XHRcdFx0XHRcdGRldGFpbHM6IG1QYXJhbWV0ZXJzLnRlY2huaWNhbERldGFpbHMgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjYwJVwiXG5cdFx0XHRcdFx0XHR9IGFzIGFueSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b01lc3NhZ2VQYWdlLnNldERlc2NyaXB0aW9uKG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIHx8IFwiXCIpO1xuXHRcdH1cblxuXHRcdChvRkNMQ29udHJvbCBhcyBhbnkpLnRvKG9NZXNzYWdlUGFnZS5nZXRJZCgpKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemUgdGhlIG9iamVjdCBfb1RhcmdldHNBZ2dyZWdhdGlvbiB0aGF0IGRlZmluZXMgZm9yIGVhY2ggcm91dGUgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGFuZCBwYXR0ZXJuLlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIFtvQXBwQ29tcG9uZW50XSBSZWZlcmVuY2UgdG8gdGhlIEFwcENvbXBvbmVudFxuXHQgKi9cblx0X2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRjb25zdCBvTWFuaWZlc3QgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCkgYXMgYW55LFxuXHRcdFx0b1RhcmdldHMgPSBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcgPyBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcudGFyZ2V0cyA6IG51bGw7XG5cblx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uID0ge307XG5cblx0XHRpZiAob1RhcmdldHMpIHtcblx0XHRcdE9iamVjdC5rZXlzKG9UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdFx0XHRcdGlmIChvVGFyZ2V0LmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb25bc1RhcmdldE5hbWVdID0ge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb246IG9UYXJnZXQuY29udHJvbEFnZ3JlZ2F0aW9uLFxuXHRcdFx0XHRcdFx0cGF0dGVybjogb1RhcmdldC5jb250ZXh0UGF0dGVyblxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbltzVGFyZ2V0TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbjogXCJwYWdlXCIsXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBudWxsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBtYXBwaW5nIGJldHdlZW4gYSByb3V0ZSAoaWRlbnRpZmVkIGFzIGl0cyBwYXR0ZXJuKSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0c1xuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNfaW5pdGlhbGl6ZVJvdXRlc0luZm9ybWF0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIG9BcHBDb21wb25lbnQgcmVmIHRvIHRoZSBBcHBDb21wb25lbnRcblx0ICovXG5cblx0X2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRjb25zdCBvTWFuaWZlc3QgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCkgYXMgYW55LFxuXHRcdFx0YVJvdXRlcyA9IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZyA/IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZy5yb3V0ZXMgOiBudWxsO1xuXG5cdFx0dGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuID0ge307XG5cblx0XHRpZiAoYVJvdXRlcykge1xuXHRcdFx0YVJvdXRlcy5mb3JFYWNoKChyb3V0ZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybltyb3V0ZS5wYXR0ZXJuXSA9IHJvdXRlLnRhcmdldDtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGdldEN1cnJlbnRBcmd1bWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zQ3VycmVudEFyZ3VtZW50cztcblx0fVxuXG5cdGdldEN1cnJlbnRSb3V0ZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IEZFIEZDTCBjb25zdGFudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEByZXR1cm5zIFRoZSBjb25zdGFudHNcblx0ICovXG5cdGdldENvbnN0YW50cygpIHtcblx0XHRyZXR1cm4gQ09OU1RBTlRTO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3Igb1RhcmdldHNBZ2dyZWdhdGlvbiBhcnJheS5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjZ2V0VGFyZ2V0QWdncmVnYXRpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgX29UYXJnZXRzQWdncmVnYXRpb24gYXJyYXlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRUYXJnZXRBZ2dyZWdhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHJvdXRlciBSb3V0ZU1hdGNoZWQgZXZlbnQuXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI29uUm91dGVNYXRjaGVkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlclxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRvblJvdXRlTWF0Y2hlZChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IHNSb3V0ZU5hbWUgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmFtZVwiKTtcblxuXHRcdC8vIFNhdmUgdGhlIGN1cnJlbnQvcHJldmlvdXMgcm91dGVzIGFuZCBhcmd1bWVudHNcblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gc1JvdXRlTmFtZTtcblx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImFyZ3VtZW50c1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJpbmcgdGhlIHRhYmxlIHNjcm9sbCB0byB0aGUgbmF2aWdhdGVkIHJvdyBhZnRlciBlYWNoIGxheW91dCBjaGFuZ2UuXG5cdCAqXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyI3Njcm9sbFRvTGFzdFNlbGVjdGVkSXRlbVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCkge1xuXHRcdGNvbnN0IGFWaWV3cyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHRcdC8vVGhlIHNjcm9sbHMgYXJlIHRyaWdnZXJlZCBvbmx5IGlmIHRoZSBsYXlvdXQgaXMgd2l0aCBzZXZlcmFsIGNvbHVtbnMgb3Igd2hlbiBzd2l0Y2hpbmcgdGhlIG1vc3RSaWdodCBjb2x1bW4gaW4gZnVsbCBzY3JlZW5cblx0XHRpZiAoYVZpZXdzLmxlbmd0aCA+IDEgfHwgYVZpZXdzWzBdLmdldFZpZXdEYXRhKCkudmlld0xldmVsIDwgdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdGxldCBzQ3VycmVudFZpZXdQYXRoO1xuXHRcdFx0Y29uc3Qgb0FkZGl0aW9uYWxWaWV3ID0gdGhpcy5nZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk7XG5cdFx0XHRpZiAob0FkZGl0aW9uYWxWaWV3ICYmIGFWaWV3cy5pbmRleE9mKG9BZGRpdGlvbmFsVmlldykgPT09IC0xKSB7XG5cdFx0XHRcdGFWaWV3cy5wdXNoKG9BZGRpdGlvbmFsVmlldyk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpbmRleCA9IGFWaWV3cy5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBhVmlld3NbaW5kZXhdLFxuXHRcdFx0XHRcdG9QcmV2aW91c1ZpZXcgPSBhVmlld3NbaW5kZXggLSAxXTtcblx0XHRcdFx0aWYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRzQ3VycmVudFZpZXdQYXRoID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0b1ByZXZpb3VzVmlldy5nZXRDb250cm9sbGVyKCkuX3Njcm9sbFRhYmxlc1RvUm93KHNDdXJyZW50Vmlld1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgRkNMIFN0YXRlQ2hhbmdlZCBldmVudC5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjb25TdGF0ZUNoYW5nZWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdG9uU3RhdGVDaGFuZ2VkKG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3QgYklzTmF2aWdhdGlvbkFycm93ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImlzTmF2aWdhdGlvbkFycm93XCIpO1xuXHRcdGlmICh0aGlzLnNDdXJyZW50QXJndW1lbnRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5zQ3VycmVudEFyZ3VtZW50c1t0aGlzLlNRVUVSWUtFWU5BTUVdKSB7XG5cdFx0XHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHNbdGhpcy5TUVVFUllLRVlOQU1FXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50c1t0aGlzLlNRVUVSWUtFWU5BTUVdLmxheW91dCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJsYXlvdXRcIik7XG5cdFx0fVxuXHRcdHRoaXMuX2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1icyhvRXZlbnQpO1xuXG5cdFx0Ly8gUmVwbGFjZSB0aGUgVVJMIHdpdGggdGhlIG5ldyBsYXlvdXQgaWYgYSBuYXZpZ2F0aW9uIGFycm93IHdhcyB1c2VkXG5cdFx0aWYgKGJJc05hdmlnYXRpb25BcnJvdykge1xuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5Lm5hdlRvKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUsIHRoaXMuc0N1cnJlbnRBcmd1bWVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRSaWdodG1vc3RWaWV3KCk7XG5cdFx0aWYgKG9WaWV3KSB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVGl0bGVIaWVyYXJjaHkob1ZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBldmVudCBvbiBhbGwgYnJlYWRjcnVtYnMgKCBvbiBlYWNoIE9iamVjdFBhZ2VzKS5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXIjX2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1ic1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1icyhvRXZlbnQ6IGFueSkge1xuXHRcdC8vZm9yY2UgbW9kZWxjb250ZXh0Y2hhbmdlIG9uIE9iamVjdFBhZ2VzIHRvIHJlZnJlc2ggdGhlIGJyZWFkY3J1bWJzIGxpbmsgaHJlZnNcblx0XHRjb25zdCBvRmNsID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGxldCBvUGFnZXM6IGFueVtdID0gW107XG5cdFx0b1BhZ2VzID0gb1BhZ2VzLmNvbmNhdChvRmNsLmdldEJlZ2luQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0TWlkQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0RW5kQ29sdW1uUGFnZXMoKSk7XG5cdFx0b1BhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9QYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gX2dldFZpZXdGcm9tQ29udGFpbmVyKG9QYWdlKTtcblx0XHRcdGNvbnN0IG9CcmVhZENydW1icyA9IG9WaWV3LmJ5SWQgJiYgb1ZpZXcuYnlJZChcImJyZWFkY3J1bWJzXCIpO1xuXHRcdFx0aWYgKG9CcmVhZENydW1icykge1xuXHRcdFx0XHRvQnJlYWRDcnVtYnMuZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB0byB1cGRhdGUgdGhlIFNoYXJlIGJ1dHRvbiBWaXNpYmlsaXR5LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXdDb2x1bW4gTmFtZSBvZiB0aGUgY3VycmVudCBjb2x1bW4gKFwiYmVnaW5Db2x1bW5cIiwgXCJtaWRDb2x1bW5cIiwgXCJlbmRDb2x1bW5cIilcblx0ICogQHBhcmFtIHNMYXlvdXQgVGhlIGN1cnJlbnQgbGF5b3V0IHVzZWQgYnkgdGhlIEZDTFxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdF91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkodmlld0NvbHVtbjogc3RyaW5nLCBzTGF5b3V0OiBzdHJpbmcpIHtcblx0XHRsZXQgYlNob3dTaGFyZUljb247XG5cdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRjYXNlIFwiT25lQ29sdW1uXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJiZWdpbkNvbHVtblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRjYXNlIFwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIjpcblx0XHRcdGNhc2UgXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcIm1pZENvbHVtblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwiZW5kQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGJTaG93U2hhcmVJY29uO1xuXHR9XG5cblx0X3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkodmlld0NvbHVtbjogc3RyaW5nLCBzTGF5b3V0OiBzdHJpbmcpIHtcblx0XHRsZXQgYkVkaXRCdXR0b25WaXNpYmxlID0gdHJ1ZTtcblx0XHRzd2l0Y2ggKHZpZXdDb2x1bW4pIHtcblx0XHRcdGNhc2UgXCJtaWRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0YkVkaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJlbmRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGJFZGl0QnV0dG9uVmlzaWJsZTtcblx0fVxuXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBhbnksIEZDTExldmVsOiBhbnkpIHtcblx0XHRjb25zdCBvVUlTdGF0ZSA9IHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKSBhcyBhbnksXG5cdFx0XHRvRmNsQ29sTmFtZSA9IFtcImJlZ2luQ29sdW1uXCIsIFwibWlkQ29sdW1uXCIsIFwiZW5kQ29sdW1uXCJdLFxuXHRcdFx0c0xheW91dCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpO1xuXHRcdGxldCB2aWV3Q29sdW1uO1xuXG5cdFx0aWYgKCFvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKSkge1xuXHRcdFx0b1ZpZXcuc2V0TW9kZWwodGhpcy5fY3JlYXRlSGVscGVyTW9kZWwoKSwgXCJmY2xoZWxwZXJcIik7XG5cdFx0fVxuXHRcdGlmIChGQ0xMZXZlbCA+PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0Ly8gVGhlIHZpZXcgaXMgb24gYSBsZXZlbCA+IG1heCBudW1iZXIgb2YgY29sdW1ucy4gSXQncyBhbHdheXMgZnVsbHNjcmVlbiB3aXRob3V0IGNsb3NlL2V4aXQgYnV0dG9uc1xuXHRcdFx0dmlld0NvbHVtbiA9IG9GY2xDb2xOYW1lW3RoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IC0gMV07XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZXhpdEZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmNsb3NlQ29sdW1uID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5leGl0RnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uY2xvc2VDb2x1bW4gPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29sdW1uID0gb0ZjbENvbE5hbWVbRkNMTGV2ZWxdO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIiB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiT25lQ29sdW1uXCJcblx0XHQpIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgZmFsc2UpO1xuXHRcdH1cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgRkNMSGVscGVyIGRvZXNuJ3QgcHJvdmlkZSBhY3Rpb25CdXR0b24gdmFsdWVzIGZvciB0aGUgZmlyc3QgY29sdW1uXG5cdFx0Ly8gc28gd2UgaGF2ZSB0byBhZGQgdGhpcyBpbmZvIG1hbnVhbGx5XG5cdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uYmVnaW5Db2x1bW4gPSB7IGZ1bGxTY3JlZW46IG51bGwsIGV4aXRGdWxsU2NyZWVuOiBudWxsLCBjbG9zZUNvbHVtbjogbnVsbCB9O1xuXG5cdFx0Y29uc3Qgb0FjdGlvbkJ1dHRvbkluZm9zID0gT2JqZWN0LmFzc2lnbih7fSwgb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm9bdmlld0NvbHVtbl0pO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hWaXNpYmxlID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgfHwgb0FjdGlvbkJ1dHRvbkluZm9zLmV4aXRGdWxsU2NyZWVuICE9PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hJY29uID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgPyBcInNhcC1pY29uOi8vZnVsbC1zY3JlZW5cIiA6IFwic2FwLWljb246Ly9leGl0LWZ1bGwtc2NyZWVuXCI7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLmlzRnVsbFNjcmVlbiA9IG9BY3Rpb25CdXR0b25JbmZvcy5mdWxsU2NyZWVuID09PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5jbG9zZVZpc2libGUgPSBvQWN0aW9uQnV0dG9uSW5mb3MuY2xvc2VDb2x1bW4gIT09IG51bGw7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9hY3Rpb25CdXR0b25zSW5mb1wiLCBvQWN0aW9uQnV0dG9uSW5mb3MpO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvc2hvd0VkaXRCdXR0b25cIiwgdGhpcy5fdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93U2hhcmVJY29uXCIsIHRoaXMuX3VwZGF0ZVNoYXJlQnV0dG9uVmlzaWJpbGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSByb3V0ZXIgQmVmb3JlUm91dGVNYXRjaGVkIGV2ZW50LlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNvbkJlZm9yZVJvdXRlTWF0Y2hlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsLmNvbnRyb2xsZXJcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0b25CZWZvcmVSb3V0ZU1hdGNoZWQob0V2ZW50OiBhbnkpIHtcblx0XHRpZiAob0V2ZW50KSB7XG5cdFx0XHRjb25zdCBvUXVlcnlQYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmFyZ3VtZW50c1t0aGlzLlNRVUVSWUtFWU5BTUVdO1xuXHRcdFx0bGV0IHNMYXlvdXQgPSBvUXVlcnlQYXJhbXMgPyBvUXVlcnlQYXJhbXMubGF5b3V0IDogbnVsbDtcblxuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgbm8gbGF5b3V0IHBhcmFtZXRlciwgcXVlcnkgZm9yIHRoZSBkZWZhdWx0IGxldmVsIDAgbGF5b3V0IChub3JtYWxseSBPbmVDb2x1bW4pXG5cdFx0XHRpZiAoIXNMYXlvdXQpIHtcblx0XHRcdFx0Y29uc3Qgb05leHRVSVN0YXRlID0gdGhpcy5nZXRIZWxwZXIoKS5nZXROZXh0VUlTdGF0ZSgwKTtcblx0XHRcdFx0c0xheW91dCA9IG9OZXh0VUlTdGF0ZS5sYXlvdXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBsYXlvdXQgaWYgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgdGFyZ2V0c1xuXHRcdFx0Ly8gVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRoZSBjYXNlIGZvciBub3JtYWwgbmF2aWdhdGlvbiwganVzdCBuZWVkZWQgaW4gY2FzZVxuXHRcdFx0Ly8gdGhlIFVSTCBoYXMgYmVlbiBtYW51YWxseSBtb2RpZmllZFxuXHRcdFx0Y29uc3QgYVRhcmdldHMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZmlnXCIpLnRhcmdldDtcblx0XHRcdHNMYXlvdXQgPSB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzTGF5b3V0LCBhVGFyZ2V0cyk7XG5cblx0XHRcdC8vIFVwZGF0ZSB0aGUgbGF5b3V0IG9mIHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFxuXHRcdFx0aWYgKHNMYXlvdXQpIHtcblx0XHRcdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuc2V0TGF5b3V0KHNMYXlvdXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZm9yIHRoZSBGQ0wgQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wuY29udHJvbGxlciNnZXRIZWxwZXJcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbC5jb250cm9sbGVyXG5cdCAqIEByZXR1cm5zIEluc3RhbmNlIG9mIGEgc2VtYW50aWMgaGVscGVyXG5cdCAqL1xuXHRnZXRIZWxwZXIoKSB7XG5cdFx0cmV0dXJuIEZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXIuZ2V0SW5zdGFuY2VGb3IodGhpcy5nZXRGY2xDb250cm9sKCksIHRoaXMuX29GQ0xDb25maWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIEZDTCBsYXlvdXQgZm9yIGEgZ2l2ZW4gRkNMIGxldmVsIGFuZCBhIHRhcmdldCBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gaU5leHRGQ0xMZXZlbCBGQ0wgbGV2ZWwgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHNQcm9wb3NlZExheW91dCBUaGUgcHJvcG9zZWQgbGF5b3V0XG5cdCAqIEBwYXJhbSBrZWVwQ3VycmVudExheW91dCBUcnVlIGlmIHdlIHdhbnQgdG8ga2VlcCB0aGUgY3VycmVudCBsYXlvdXQgaWYgcG9zc2libGVcblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgbGF5b3V0XG5cdCAqL1xuXHRjYWxjdWxhdGVMYXlvdXQoaU5leHRGQ0xMZXZlbDogbnVtYmVyLCBzSGFzaDogc3RyaW5nLCBzUHJvcG9zZWRMYXlvdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2VlcEN1cnJlbnRMYXlvdXQgPSBmYWxzZSkge1xuXHRcdC8vIEZpcnN0LCBhc2sgdGhlIEZDTCBoZWxwZXIgdG8gY2FsY3VsYXRlIHRoZSBsYXlvdXQgaWYgbm90aGluZyBpcyBwcm9wb3NlZFxuXHRcdGlmICghc1Byb3Bvc2VkTGF5b3V0KSB7XG5cdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBrZWVwQ3VycmVudExheW91dCA/IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpIDogdGhpcy5nZXRIZWxwZXIoKS5nZXROZXh0VUlTdGF0ZShpTmV4dEZDTExldmVsKS5sYXlvdXQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGFuZ2UgdGhpcyB2YWx1ZSBpZiBuZWNlc3NhcnksIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGFyZ2V0c1xuXHRcdGNvbnN0IG9Sb3V0ZSA9ICh0aGlzLmdldFJvdXRlcigpIGFzIGFueSkuZ2V0Um91dGVCeUhhc2goYCR7c0hhc2h9P2xheW91dD0ke3NQcm9wb3NlZExheW91dH1gKTtcblx0XHRjb25zdCBhVGFyZ2V0cyA9IHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybltvUm91dGUuZ2V0UGF0dGVybigpXTtcblxuXHRcdHJldHVybiB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzUHJvcG9zZWRMYXlvdXQsIGFUYXJnZXRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIEZDTCBsYXlvdXQgaXMgY29tcGF0aWJsZSB3aXRoIGFuIGFycmF5IG9mIHRhcmdldHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJvcG9zZWRMYXlvdXQgUHJvcG9zZWQgdmFsdWUgZm9yIHRoZSBGQ0wgbGF5b3V0XG5cdCAqIEBwYXJhbSBhVGFyZ2V0cyBBcnJheSBvZiB0YXJnZXQgbmFtZXMgdXNlZCBmb3IgY2hlY2tpbmdcblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3RlZCBsYXlvdXRcblx0ICovXG5cdF9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzUHJvcG9zZWRMYXlvdXQ6IGFueSwgYVRhcmdldHM6IGFueSkge1xuXHRcdGNvbnN0IGFsbEFsbG93ZWRMYXlvdXRzOiBhbnkgPSB7XG5cdFx0XHRcIjJcIjogW1wiVHdvQ29sdW1uc01pZEV4cGFuZGVkXCIsIFwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIiwgXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCJdLFxuXHRcdFx0XCIzXCI6IFtcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCIsXG5cdFx0XHRcdFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiLFxuXHRcdFx0XHRcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIlxuXHRcdFx0XVxuXHRcdH07XG5cblx0XHRpZiAoYVRhcmdldHMgJiYgIUFycmF5LmlzQXJyYXkoYVRhcmdldHMpKSB7XG5cdFx0XHQvLyBUbyBzdXBwb3J0IHNpbmdsZSB0YXJnZXQgYXMgYSBzdHJpbmcgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRhVGFyZ2V0cyA9IFthVGFyZ2V0c107XG5cdFx0fVxuXG5cdFx0aWYgKCFhVGFyZ2V0cykge1xuXHRcdFx0Ly8gRGVmZW5zaXZlLCBqdXN0IGluIGNhc2UuLi5cblx0XHRcdHJldHVybiBzUHJvcG9zZWRMYXlvdXQ7XG5cdFx0fSBlbHNlIGlmIChhVGFyZ2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBNb3JlIHRoYW4gMSB0YXJnZXQ6IGp1c3Qgc2ltcGx5IGNoZWNrIGZyb20gdGhlIGFsbG93ZWQgdmFsdWVzXG5cdFx0XHRjb25zdCBhTGF5b3V0cyA9IGFsbEFsbG93ZWRMYXlvdXRzW2FUYXJnZXRzLmxlbmd0aF07XG5cdFx0XHRpZiAoYUxheW91dHMuaW5kZXhPZihzUHJvcG9zZWRMYXlvdXQpIDwgMCkge1xuXHRcdFx0XHQvLyBUaGUgcHJvcG9zZWQgbGF5b3V0IGlzbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgbnVtYmVyIG9mIGNvbHVtbnNcblx0XHRcdFx0Ly8gLS0+IEFzayB0aGUgaGVscGVyIGZvciB0aGUgZGVmYXVsdCBsYXlvdXQgZm9yIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuXHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBhTGF5b3V0c1swXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBvbmUgdGFyZ2V0XG5cdFx0XHRjb25zdCBzVGFyZ2V0QWdncmVnYXRpb24gPSB0aGlzLmdldFRhcmdldEFnZ3JlZ2F0aW9uKClbYVRhcmdldHNbMF1dLmFnZ3JlZ2F0aW9uIHx8IHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdHN3aXRjaCAoc1RhcmdldEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gXCJPbmVDb2x1bW5cIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1pZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJlbmRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQcm9wb3NlZExheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbnN0YW5jZWQgdmlld3MgaW4gdGhlIEZDTCBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJuIHRoZSB2aWV3cy5cblx0ICovXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFhNTFZpZXdbXSB7XG5cdFx0Y29uc3QgZmNsQ29udHJvbCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpO1xuXHRcdGNvbnN0IGNvbXBvbmVudENvbnRhaW5lcnM6IENvbnRyb2xbXSA9IFtcblx0XHRcdC4uLmZjbENvbnRyb2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpLFxuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRNaWRDb2x1bW5QYWdlcygpLFxuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRFbmRDb2x1bW5QYWdlcygpXG5cdFx0XTtcblx0XHRyZXR1cm4gY29tcG9uZW50Q29udGFpbmVycy5tYXAoKG9QYWdlKSA9PiB7XG5cdFx0XHRpZiAob1BhZ2UgJiYgb1BhZ2UuaXNBPENvbXBvbmVudENvbnRhaW5lcj4oXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIG9QYWdlLmdldENvbXBvbmVudEluc3RhbmNlKCkuZ2V0Um9vdENvbnRyb2woKSBhcyBYTUxWaWV3O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG9QYWdlIGFzIFhNTFZpZXc7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogZ2V0IGFsbCB2aXNpYmxlIHZpZXdzIGluIHRoZSBGQ0wgY29tcG9uZW50LlxuXHQgKiBzTGF5b3V0IG9wdGlvbmFsIHBhcmFtZXRlciBpcyB2ZXJ5IHNwZWNpZmljIGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBsYXRlc3QgbmF2aWdhdGVkIHJvd1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHNMYXlvdXQgTGF5b3V0IHRoYXQgd2FzIGFwcGxpZWQganVzdCBiZWZvcmUgdGhlIGN1cnJlbnQgbmF2aWdhdGlvblxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybiB2aWV3c1xuXHQgKi9cblxuXHRfZ2V0QWxsVmlzaWJsZVZpZXdzKHNMYXlvdXQ/OiBhbnkpIHtcblx0XHRjb25zdCBhVmlld3MgPSBbXTtcblx0XHRzTGF5b3V0ID0gc0xheW91dCA/IHNMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNFbmRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cuZXJyb3IoYFVuaGFuZGxlZCBzd2l0Y2ggY2FzZSBmb3IgJHt0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKX1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYVZpZXdzO1xuXHR9XG5cblx0X2dldEFsbFZpZXdzKHNMYXlvdXQ/OiBhbnkpIHtcblx0XHRjb25zdCBhVmlld3MgPSBbXTtcblx0XHRzTGF5b3V0ID0gc0xheW91dCA/IHNMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkge1xuXHRcdFx0XHRcdGFWaWV3cy5wdXNoKF9nZXRWaWV3RnJvbUNvbnRhaW5lcih0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zQmVnaW5FeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpIHtcblx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWlkIGNvbHVtbiBmdWxsc2NyZWVuIGNvbWVzIGZyb20gYSAyIG9yIGEgMyBjb2x1bW4gbGF5b3V0XG5cdFx0XHRcdGNvbnN0IHNMYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4gPSAodGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpIGFzIGFueSkuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmV4aXRGdWxsU2NyZWVuO1xuXHRcdFx0XHRpZiAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0YVZpZXdzLnB1c2goX2dldFZpZXdGcm9tQ29udGFpbmVyKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc0xheW91dFdoZW5FeGl0RnVsbFNjcmVlbi5pbmRleE9mKFwiVGhyZWVDb2x1bW5cIikgPj0gMCkge1xuXHRcdFx0XHRcdC8vIFdlIGNvbWUgZnJvbSBhIDMgY29sdW1uIGxheW91dFxuXHRcdFx0XHRcdGlmICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKSB7XG5cdFx0XHRcdFx0XHRhVmlld3MucHVzaChfZ2V0Vmlld0Zyb21Db250YWluZXIodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLmVycm9yKGBVbmhhbmRsZWQgc3dpdGNoIGNhc2UgZm9yICR7dGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCl9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBhVmlld3M7XG5cdH1cblxuXHRvbkNvbnRhaW5lclJlYWR5KCkge1xuXHRcdC8vIFJlc3RvcmUgdmlld3MgaWYgbmVjY2Vzc2FyeS5cblx0XHRjb25zdCBhVmlld3MgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0XHRjb25zdCBhUmVzdG9yZVByb21pc2VzOiBhbnlbXSA9IGFWaWV3cy5yZWR1Y2UoZnVuY3Rpb24gKGFQcm9taXNlczogYW55LCBvVGFyZ2V0VmlldzogYW55KSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaChLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcob1RhcmdldFZpZXcpKTtcblx0XHRcdHJldHVybiBhUHJvbWlzZXM7XG5cdFx0fSwgW10pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdG9yZVByb21pc2VzKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdENvbnRleHQoKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFZpZXdzKCkucG9wKCk7XG5cdH1cblxuXHRpc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5nZXRGY2xDb250cm9sKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgYUFsbFZpc2libGVWaWV3cyA9IHRoaXMuX2dldEFsbFZpZXdzKCk7XG5cdFx0Zm9yIChjb25zdCB2aWV3IG9mIGFBbGxWaXNpYmxlVmlld3MpIHtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdGlmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG9Db250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdmlldyBoYXMgYmVlbiBkZXN0cm95ZWQgLS0+IGFwcCBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3NldFNoZWxsTWVudVRpdGxlKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc1RpdGxlOiBzdHJpbmcsIHNBcHBUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW4gIT09IHRydWUpIHtcblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNBcHBUaXRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZjbENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQXFCQSxNQUFNQSxVQUFVLEdBQUdDLFFBQVEsQ0FBQ0QsVUFBVTtFQUV0QyxNQUFNRSxTQUFTLEdBQUc7SUFDakJDLElBQUksRUFBRTtNQUNMQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztNQUNoREMsYUFBYSxFQUFFO1FBQ2RDLE1BQU0sRUFBRSxZQUFZO1FBQ3BCQyxNQUFNLEVBQUU7TUFDVCxDQUFDO01BQ0RDLE1BQU0sRUFBRTtRQUNQRixNQUFNLEVBQUUsS0FBSztRQUNiQyxNQUFNLEVBQUU7TUFDVDtJQUNEO0VBQ0QsQ0FBQztFQUNELE1BQU1FLHFCQUFxQixHQUFHLFVBQVVDLFVBQWUsRUFBRTtJQUN4RCxJQUFJQSxVQUFVLENBQUNDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO01BQ3JELE9BQU9ELFVBQVUsQ0FBQ0Usb0JBQW9CLEVBQUUsQ0FBQ0MsY0FBYyxFQUFFO0lBQzFELENBQUMsTUFBTTtNQUNOLE9BQU9ILFVBQVU7SUFDbEI7RUFDRCxDQUFDO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQSxJQVdNSSxhQUFhLFdBRGxCQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsVUFFekNDLGNBQWMsQ0FDZEMsU0FBUyxDQUFDQyxRQUFRLENBQUM7SUFDbEJDLHFCQUFxQixFQUFFLFlBQVk7TUFDbEMsT0FBTyxL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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/base/Log","sap/f/FlexibleColumnLayoutSemanticHelper","sap/f/library","sap/fe/core/controllerextensions/ViewState","sap/fe/core/helpers/ClassSupport","sap/fe/core/helpers/KeepAliveHelper","sap/m/Link","sap/m/MessageBox","sap/m/MessagePage","./RootViewBaseController"],function(e,t,n,o,i,r,l,s,a,u){"use strict";var g,c,C,h,d;var f=s.Icon;var m=s.Action;var p=i.usingExtension;var F=i.defineUI5Class;function w(e,t,n,o){if(!n)return;Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(o):void 0})}function E(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function P(e,t){e.prototype=Object.create(t.prototype);e.prototype.constructor=e;b(e,t)}function b(e,t){b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function e(t,n){t.__proto__=n;return t};return b(e,t)}function M(e,t,n,o,i){var r={};Object.keys(o).forEach(function(e){r[e]=o[e]});r.enumerable=!!r.enumerable;r.configurable=!!r.configurable;if("value"in r||r.initializer){r.writable=true}r=n.slice().reverse().reduce(function(n,o){return o(e,t,n)||n},r);if(i&&r.initializer!==void 0){r.value=r.initializer?r.initializer.call(i):void 0;r.initializer=undefined}if(r.initializer===void 0){Object.defineProperty(e,t,r);r=null}return r}function v(e,t){throw new Error("Decorating class property failed. Please ensure that "+"proposal-class-properties is enabled and runs after the decorators transform.")}const y=n.LayoutType;const x={page:{names:["BeginColumn","MidColumn","EndColumn"],currentGetter:{prefix:"getCurrent",suffix:"Page"},getter:{prefix:"get",suffix:"Pages"}}};const T=function(e){if(e.isA("sap.ui.core.ComponentContainer")){return e.getComponentInstance().getRootControl()}else{return e}};let R=(g=F("sap.fe.core.rootView.Fcl"),c=p(o.override({applyInitialStateOnly:function(){return false},adaptBindingRefreshControls:function(e){this.getView().getController()._getAllVisibleViews().forEach(function(t){const n=Promise.resolve(t);e.push(n)})},adaptStateControls:function(e){this.getView().getController()._getAllVisibleViews().forEach(function(t){const n=Promise.resolve(t);e.push(n)})},onRestore:function(){const e=this.getView().getController();const t=e.getAppContentContainer();const n=t.getModel("internal");const o=n.getProperty("/pages");for(const e in o){n.setProperty(`/pages/${e}/restoreStatus`,"pending")}e.onContainerReady()},onSuspend:function(){const e=this.getView().getController();const t=e.getFclControl();const n=t.getBeginColumnPages()||[];const o=t.getMidColumnPages()||[];const i=t.getEndColumnPages()||[];const r=[].concat(n,o,i);r.forEach(function(e){const t=T(e);const n=t&&t.getController();if(n&&n.viewState&&n.viewState.onSuspend){n.viewState.onSuspend()}})}})),g(C=(h=function(n){P(o,n);function o(){var e;for(var t=arguments.length,o=new Array(t),i=0;i<t;i++){o[i]=arguments[i]}e=n.call(this,...o)||this;w(e,"viewState",d,E(e));return e}var i=o.prototype;i.onInit=function e(){n.prototype.onInit.call(this);this._internalInit()};i.manageDataReceived=function e(t){if(t.getParameter("error")){var n;const e=t.getParameter("path"),o=this._getAllVisibleViews().find(t=>{var n;return((n=t.getBindingContext())===null||n===void 0?void 0:n.getPath())===e});if(e&&o!==null&&o!==void 0&&(n=o.getBindingContext())!==null&&n!==void 0&&n.isKeepAlive()){o.getController()._routing.onDataReceived(t)}}};i.attachRouteMatchers=function e(){this.getRouter().attachBeforeRouteMatched(this._getViewForNavigatedRowsComputation,this);n.prototype.attachRouteMatchers.call(this);this._internalInit();this.getRouter().attachBeforeRouteMatched(this.onBeforeRouteMatched,this);this.getRouter().attachRouteMatched(this.onRouteMatched,this);this.getFclControl().attachStateChange(this._saveLayout,this)};i._internalInit=function e(){var t,n;if(this._oRouterProxy){return}this.sCurrentRouteName="";this.sCurrentArguments={};this.SQUERYKEYNAME="?query";const o=this.getAppComponent();const i=this.getAppComponent().getModel();i===null||i===void 0?void 0:i.attachEvent("dataReceived",this.manageDataReceived.bind(this));this._oRouterProxy=o.getRouterProxy();this._oFCLConfig={maxColumnsCount:3};const r=o.getManifest()["sap.ui5"].routing;if(r!==null&&r!==void 0&&(t=r.config)!==null&&t!==void 0&&t.flexibleColumnLayout){const e=r.config.flexibleColumnLayout;if(e.defaultTwoColumnLayoutType){this._oFCLConfig.defaultTwoColumnLayoutType=e.defaultTwoColumnLayoutType}if(e.defaultThreeColumnLayoutType){this._oFCLConfig.defaultThreeColumnLayoutType=e.defaultThreeColumnLayoutType}if(e.limitFCLToTwoColumns===true){this._oFCLConfig.maxColumnsCount=2}}if(r!==null&&r!==void 0&&(n=r.config)!==null&&n!==void 0&&n.controlAggregation){this._oFCLConfig.defaultControlAggregation=r.config.controlAggregation}this._initializeTargetAggregation(o);this._initializeRoutesInformation(o);this.getFclControl().attachStateChange(this.onStateChanged,this);this.getFclControl().attachAfterEndColumnNavigate(this.onStateChanged,this)};i.getFclControl=function e(){return this.getAppContentContainer()};i._saveLayout=function e(t){this.sPreviousLayout=t.getParameters().layout};i._getViewForNavigatedRowsComputation=function e(){const t=this._getAllVisibleViews(this.sPreviousLayout);const n=t[t.length-1];let o;this.getRouter().attachEventOnce("routeMatched",e=>{o=T(e.getParameter("views")[e.getParameter("views").length-1]);if(n){if(o.getViewData()&&o.getViewData().viewLevel===this._oFCLConfig.maxColumnsCount){this.oAdditionalViewForNavRowsComputation=o}if(o.getViewData()&&n.getViewData()&&n.getViewData().viewLevel<this._oFCLConfig.maxColumnsCount&&n.getViewData()&&n.getViewData().viewLevel>o.getViewData().viewLevel&&o!==n){this.oAdditionalViewForNavRowsComputation=n}}})};i.getViewForNavigatedRowsComputation=function e(){return this.oAdditionalViewForNavRowsComputation};i.onExit=function e(){this.getRouter().detachRouteMatched(this.onRouteMatched,this);this.getRouter().detachBeforeRouteMatched(this.onBeforeRouteMatched,this);this.getFclControl().detachStateChange(this.onStateChanged,this);this.getFclControl().detachAfterEndColumnNavigate(this.onStateChanged,this);this._oTargetsAggregation=null;this._oTargetsFromRoutePattern=null;u.prototype.onExit.bind(this)()};i.isFclEnabled=function e(){return true};i.displayErrorPage=function e(t,n){const o=this.getFclControl();if(this._oFCLConfig&&n.FCLLevel>=this._oFCLConfig.maxColumnsCount){n.FCLLevel=this._oFCLConfig.maxColumnsCount-1}if(!this.aMessagePages){this.aMessagePages=[null,null,null]}let i=this.aMessagePages[n.FCLLevel];if(!i){i=new a({showHeader:false,icon:"sap-icon://message-error"});this.aMessagePages[n.FCLLevel]=i;switch(n.FCLLevel){case 0:o.addBeginColumnPage(i);break;case 1:o.addMidColumnPage(i);break;default:o.addEndColumnPage(i)}}i.setText(t);if(n.technicalMessage){i.setCustomDescription(new l({text:n.description||n.technicalMessage,press:function(){s.show(n.technicalMessage,{icon:f.ERROR,title:n.title,actions:[m.OK],defaultAction:m.OK,details:n.technicalDetails||"",contentWidth:"60%"})}}))}else{i.setDescription(n.description||"")}o.to(i.getId());return Promise.resolve(true)};i._initializeTargetAggregation=function e(t){const n=t.getManifest(),o=n["sap.ui5"].routing?n["sap.ui5"].routing.targets:null;this._oTargetsAggregation={};if(o){Object.keys(o).forEach(e=>{const t=o[e];if(t.controlAggregation){this._oTargetsAggregation[e]={aggregation:t.controlAggregation,pattern:t.contextPattern}}else{this._oTargetsAggregation[e]={aggregation:"page",pattern:null}}})}};i._initializeRoutesInformation=function e(t){const n=t.getManifest(),o=n["sap.ui5"].routing?n["sap.ui5"].routing.routes:null;this._oTargetsFromRoutePattern={};if(o){o.forEach(e=>{this._oTargetsFromRoutePattern[e.pattern]=e.target})}};i.getCurrentArgument=function e(){return this.sCurrentArguments};i.getCurrentRouteName=function e(){return this.sCurrentRouteName};i.getConstants=function e(){return x};i.getTargetAggregation=function e(){return this._oTargetsAggregation};i.onRouteMatched=function e(t){const n=t.getParameter("name");this.sCurrentRouteName=n;this.sCurrentArguments=t.getParameter("arguments")};i._scrollTablesToLastNavigatedItems=function e(){const t=this._getAllVisibleViews();if(t.length>1||t[0].getViewData().viewLevel<this._oFCLConfig.maxColumnsCount){let e;const n=this.getViewForNavigatedRowsComputation();if(n&&t.indexOf(n)===-1){t.push(n)}for(let n=t.length-1;n>0;n--){const o=t[n],i=t[n-1];if(o.getBindingContext()){e=o.getBindingContext().getPath();i.getController()._scrollTablesToRow(e)}}}};i.onStateChanged=function e(t){const n=t.getParameter("isNavigationArrow");if(this.sCurrentArguments!==undefined){if(!this.sCurrentArguments[this.SQUERYKEYNAME]){this.sCurrentArguments[this.SQUERYKEYNAME]={}}this.sCurrentArguments[this.SQUERYKEYNAME].layout=t.getParameter("layout")}this._forceModelContextChangeOnBreadCrumbs(t);if(n){this._oRouterProxy.navTo(this.sCurrentRouteName,this.sCurrentArguments)}const o=this.getRightmostView();if(o){this._computeTitleHierarchy(o)}};i._forceModelContextChangeOnBreadCrumbs=function e(t){const n=t.getSource();let o=[];o=o.concat(n.getBeginColumnPages()).concat(n.getMidColumnPages()).concat(n.getEndColumnPages());o.forEach(function(e){const t=T(e);const n=t.byId&&t.byId("breadcrumbs");if(n){n.fireModelContextChange()}})};i._updateShareButtonVisibility=function e(t,n){let o;switch(n){case"OneColumn":o=t==="beginColumn";break;case"MidColumnFullScreen":case"ThreeColumnsBeginExpandedEndHidden":case"ThreeColumnsMidExpandedEndHidden":case"TwoColumnsBeginExpanded":case"TwoColumnsMidExpanded":o=t==="midColumn";break;case"EndColumnFullScreen":case"ThreeColumnsEndExpanded":case"ThreeColumnsMidExpanded":o=t==="endColumn";break;default:o=false}return o};i._updateEditButtonVisiblity=function e(t,n){let o=true;switch(t){case"midColumn":switch(n){case"TwoColumnsMidExpanded":case"ThreeColumnsMidExpanded":case"ThreeColumnsEndExpanded":o=false;break}break;case"endColumn":switch(n){case"ThreeColumnsMidExpanded":case"ThreeColumnsEndExpanded":o=false}break}return o};i.updateUIStateForView=function e(t,n){const o=this.getHelper().getCurrentUIState(),i=["beginColumn","midColumn","endColumn"],r=this.getFclControl().getLayout();let l;if(!t.getModel("fclhelper")){t.setModel(this._createHelperModel(),"fclhelper")}if(n>=this._oFCLConfig.maxColumnsCount){l=i[this._oFCLConfig.maxColumnsCount-1];o.actionButtonsInfo.midColumn.fullScreen=null;o.actionButtonsInfo.midColumn.exitFullScreen=null;o.actionButtonsInfo.midColumn.closeColumn=null;o.actionButtonsInfo.endColumn.exitFullScreen=null;o.actionButtonsInfo.endColumn.fullScreen=null;o.actionButtonsInfo.endColumn.closeColumn=null}else{l=i[n]}if(n>=this._oFCLConfig.maxColumnsCount||r==="EndColumnFullScreen"||r==="MidColumnFullScreen"||r==="OneColumn"){t.getModel("fclhelper").setProperty("/breadCrumbIsVisible",true)}else{t.getModel("fclhelper").setProperty("/breadCrumbIsVisible",false)}o.actionButtonsInfo.beginColumn={fullScreen:null,exitFullScreen:null,closeColumn:null};const s=Object.assign({},o.actionButtonsInfo[l]);s.switchVisible=s.fullScreen!==null||s.exitFullScreen!==null;s.switchIcon=s.fullScreen!==null?"sap-icon://full-screen":"sap-icon://exit-full-screen";s.isFullScreen=s.fullScreen===null;s.closeVisible=s.closeColumn!==null;t.getModel("fclhelper").setProperty("/actionButtonsInfo",s);t.getModel("fclhelper").setProperty("/showEditButton",this._updateEditButtonVisiblity(l,r));t.getModel("fclhelper").setProperty("/showShareIcon",this._updateShareButtonVisibility(l,r))};i.onBeforeRouteMatched=function e(t){if(t){const e=t.getParameters().arguments[this.SQUERYKEYNAME];let n=e?e.layout:null;if(!n){const e=this.getHelper().getNextUIState(0);n=e.layout}const o=t.getParameter("config").target;n=this._correctLayoutForTargets(n,o);if(n){this.getFclControl().setLayout(n)}}};i.getHelper=function e(){return t.getInstanceFor(this.getFclControl(),this._oFCLConfig)};i.calculateLayout=function e(t,n,o){let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(!o){o=i?this.getFclControl().getLayout():this.getHelper().getNextUIState(t).layout}const r=this.getRouter().getRouteByHash(`${n}?layout=${o}`);const l=this._oTargetsFromRoutePattern[r.getPattern()];return this._correctLayoutForTargets(o,l)};i._correctLayoutForTargets=function e(t,n){const o={2:["TwoColumnsMidExpanded","TwoColumnsBeginExpanded","MidColumnFullScreen"],3:["ThreeColumnsMidExpanded","ThreeColumnsEndExpanded","ThreeColumnsMidExpandedEndHidden","ThreeColumnsBeginExpandedEndHidden","MidColumnFullScreen","EndColumnFullScreen"]};if(n&&!Array.isArray(n)){n=[n]}if(!n){return t}else if(n.length>1){const e=o[n.length];if(e.indexOf(t)<0){t=e[0]}}else{const e=this.getTargetAggregation()[n[0]].aggregation||this._oFCLConfig.defaultControlAggregation;switch(e){case"beginColumnPages":t="OneColumn";break;case"midColumnPages":t="MidColumnFullScreen";break;case"endColumnPages":t="EndColumnFullScreen";break}}return t};i.getInstancedViews=function e(){const t=this.getFclControl();const n=[...t.getBeginColumnPages(),...t.getMidColumnPages(),...t.getEndColumnPages()];return n.map(e=>e.getComponentInstance().getRootControl())};i._getAllVisibleViews=function t(n){const o=[];n=n?n:this.getFclControl().getLayout();switch(n){case y.EndColumnFullScreen:if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.MidColumnFullScreen:if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;case y.OneColumn:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}break;case y.ThreeColumnsEndExpanded:case y.ThreeColumnsMidExpanded:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.TwoColumnsBeginExpanded:case y.TwoColumnsMidExpanded:case y.ThreeColumnsMidExpandedEndHidden:case y.ThreeColumnsBeginExpandedEndHidden:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;default:e.error(`Unhandled switch case for ${this.getFclControl().getLayout()}`)}return o};i._getAllViews=function t(n){const o=[];n=n?n:this.getFclControl().getLayout();switch(n){case y.OneColumn:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}break;case y.ThreeColumnsEndExpanded:case y.ThreeColumnsMidExpanded:case y.ThreeColumnsMidExpandedEndHidden:case y.ThreeColumnsBeginExpandedEndHidden:case y.EndColumnFullScreen:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.TwoColumnsBeginExpanded:case y.TwoColumnsMidExpanded:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;case y.MidColumnFullScreen:const t=this.getHelper().getCurrentUIState().actionButtonsInfo.midColumn.exitFullScreen;if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(t.indexOf("ThreeColumn")>=0){if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}}break;default:e.error(`Unhandled switch case for ${this.getFclControl().getLayout()}`)}return o};i.onContainerReady=function e(){const t=this._getAllVisibleViews();const n=t.reduce(function(e,t){e.push(r.restoreView(t));return e},[]);return Promise.all(n)};i.getRightmostContext=function e(){const t=this.getRightmostView();return t&&t.getBindingContext()};i.getRightmostView=function e(){return this._getAllViews().pop()};i.isContextUsedInPages=function e(t){if(!this.getFclControl()){return false}const n=this._getAllViews();for(const e of n){if(e){if(e.getBindingContext()===t){return true}}else{return false}}return false};i._setShellMenuTitle=function e(t,n,o){if(this.getHelper().getCurrentUIState().isFullScreen!==true){t.getShellServices().setTitle(o)}else{t.getShellServices().setTitle(n)}};return o}(u),d=M(h.prototype,"viewState",[c],{configurable:true,enumerable:true,writable:true,initializer:null}),h))||C);return R},false);
5
+ sap.ui.define(["sap/base/Log","sap/f/FlexibleColumnLayoutSemanticHelper","sap/f/library","sap/fe/core/controllerextensions/ViewState","sap/fe/core/helpers/ClassSupport","sap/fe/core/helpers/KeepAliveHelper","sap/m/Link","sap/m/MessageBox","sap/m/MessagePage","./RootViewBaseController"],function(e,t,n,o,i,r,l,s,a,u){"use strict";var g,c,C,h,d;var f=s.Icon;var m=s.Action;var p=i.usingExtension;var F=i.defineUI5Class;function w(e,t,n,o){if(!n)return;Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(o):void 0})}function E(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function P(e,t){e.prototype=Object.create(t.prototype);e.prototype.constructor=e;b(e,t)}function b(e,t){b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function e(t,n){t.__proto__=n;return t};return b(e,t)}function M(e,t,n,o,i){var r={};Object.keys(o).forEach(function(e){r[e]=o[e]});r.enumerable=!!r.enumerable;r.configurable=!!r.configurable;if("value"in r||r.initializer){r.writable=true}r=n.slice().reverse().reduce(function(n,o){return o(e,t,n)||n},r);if(i&&r.initializer!==void 0){r.value=r.initializer?r.initializer.call(i):void 0;r.initializer=undefined}if(r.initializer===void 0){Object.defineProperty(e,t,r);r=null}return r}function v(e,t){throw new Error("Decorating class property failed. Please ensure that "+"proposal-class-properties is enabled and runs after the decorators transform.")}const y=n.LayoutType;const x={page:{names:["BeginColumn","MidColumn","EndColumn"],currentGetter:{prefix:"getCurrent",suffix:"Page"},getter:{prefix:"get",suffix:"Pages"}}};const T=function(e){if(e.isA("sap.ui.core.ComponentContainer")){return e.getComponentInstance().getRootControl()}else{return e}};let R=(g=F("sap.fe.core.rootView.Fcl"),c=p(o.override({applyInitialStateOnly:function(){return false},adaptBindingRefreshControls:function(e){this.getView().getController()._getAllVisibleViews().forEach(function(t){const n=Promise.resolve(t);e.push(n)})},adaptStateControls:function(e){this.getView().getController()._getAllVisibleViews().forEach(function(t){const n=Promise.resolve(t);e.push(n)})},onRestore:function(){const e=this.getView().getController();const t=e.getAppContentContainer();const n=t.getModel("internal");const o=n.getProperty("/pages");for(const e in o){n.setProperty(`/pages/${e}/restoreStatus`,"pending")}e.onContainerReady()},onSuspend:function(){const e=this.getView().getController();const t=e.getFclControl();const n=t.getBeginColumnPages()||[];const o=t.getMidColumnPages()||[];const i=t.getEndColumnPages()||[];const r=[].concat(n,o,i);r.forEach(function(e){const t=T(e);const n=t&&t.getController();if(n&&n.viewState&&n.viewState.onSuspend){n.viewState.onSuspend()}})}})),g(C=(h=function(n){P(o,n);function o(){var e;for(var t=arguments.length,o=new Array(t),i=0;i<t;i++){o[i]=arguments[i]}e=n.call(this,...o)||this;w(e,"viewState",d,E(e));return e}var i=o.prototype;i.onInit=function e(){n.prototype.onInit.call(this);this._internalInit()};i.manageDataReceived=function e(t){if(t.getParameter("error")){var n;const e=t.getParameter("path"),o=this._getAllVisibleViews().find(t=>{var n;return((n=t.getBindingContext())===null||n===void 0?void 0:n.getPath())===e});if(e&&o!==null&&o!==void 0&&(n=o.getBindingContext())!==null&&n!==void 0&&n.isKeepAlive()){o.getController()._routing.onDataReceived(t)}}};i.attachRouteMatchers=function e(){this.getRouter().attachBeforeRouteMatched(this._getViewForNavigatedRowsComputation,this);n.prototype.attachRouteMatchers.call(this);this._internalInit();this.getRouter().attachBeforeRouteMatched(this.onBeforeRouteMatched,this);this.getRouter().attachRouteMatched(this.onRouteMatched,this);this.getFclControl().attachStateChange(this._saveLayout,this)};i._internalInit=function e(){var t,n;if(this._oRouterProxy){return}this.sCurrentRouteName="";this.sCurrentArguments={};this.SQUERYKEYNAME="?query";const o=this.getAppComponent();const i=this.getAppComponent().getModel();i===null||i===void 0?void 0:i.attachEvent("dataReceived",this.manageDataReceived.bind(this));this._oRouterProxy=o.getRouterProxy();this._oFCLConfig={maxColumnsCount:3};const r=o.getManifest()["sap.ui5"].routing;if(r!==null&&r!==void 0&&(t=r.config)!==null&&t!==void 0&&t.flexibleColumnLayout){const e=r.config.flexibleColumnLayout;if(e.defaultTwoColumnLayoutType){this._oFCLConfig.defaultTwoColumnLayoutType=e.defaultTwoColumnLayoutType}if(e.defaultThreeColumnLayoutType){this._oFCLConfig.defaultThreeColumnLayoutType=e.defaultThreeColumnLayoutType}if(e.limitFCLToTwoColumns===true){this._oFCLConfig.maxColumnsCount=2}}if(r!==null&&r!==void 0&&(n=r.config)!==null&&n!==void 0&&n.controlAggregation){this._oFCLConfig.defaultControlAggregation=r.config.controlAggregation}this._initializeTargetAggregation(o);this._initializeRoutesInformation(o);this.getFclControl().attachStateChange(this.onStateChanged,this);this.getFclControl().attachAfterEndColumnNavigate(this.onStateChanged,this)};i.getFclControl=function e(){return this.getAppContentContainer()};i._saveLayout=function e(t){this.sPreviousLayout=t.getParameters().layout};i._getViewForNavigatedRowsComputation=function e(){const t=this._getAllVisibleViews(this.sPreviousLayout);const n=t[t.length-1];let o;this.getRouter().attachEventOnce("routeMatched",e=>{o=T(e.getParameter("views")[e.getParameter("views").length-1]);if(n){if(o.getViewData()&&o.getViewData().viewLevel===this._oFCLConfig.maxColumnsCount){this.oAdditionalViewForNavRowsComputation=o}if(o.getViewData()&&n.getViewData()&&n.getViewData().viewLevel<this._oFCLConfig.maxColumnsCount&&n.getViewData()&&n.getViewData().viewLevel>o.getViewData().viewLevel&&o!==n){this.oAdditionalViewForNavRowsComputation=n}}})};i.getViewForNavigatedRowsComputation=function e(){return this.oAdditionalViewForNavRowsComputation};i.onExit=function e(){this.getRouter().detachRouteMatched(this.onRouteMatched,this);this.getRouter().detachBeforeRouteMatched(this.onBeforeRouteMatched,this);this.getFclControl().detachStateChange(this.onStateChanged,this);this.getFclControl().detachAfterEndColumnNavigate(this.onStateChanged,this);this._oTargetsAggregation=null;this._oTargetsFromRoutePattern=null;u.prototype.onExit.bind(this)()};i.isFclEnabled=function e(){return true};i.displayErrorPage=function e(t,n){const o=this.getFclControl();if(this._oFCLConfig&&n.FCLLevel>=this._oFCLConfig.maxColumnsCount){n.FCLLevel=this._oFCLConfig.maxColumnsCount-1}if(!this.aMessagePages){this.aMessagePages=[null,null,null]}let i=this.aMessagePages[n.FCLLevel];if(!i){i=new a({showHeader:false,icon:"sap-icon://message-error"});this.aMessagePages[n.FCLLevel]=i;switch(n.FCLLevel){case 0:o.addBeginColumnPage(i);break;case 1:o.addMidColumnPage(i);break;default:o.addEndColumnPage(i)}}i.setText(t);if(n.technicalMessage){i.setCustomDescription(new l({text:n.description||n.technicalMessage,press:function(){s.show(n.technicalMessage,{icon:f.ERROR,title:n.title,actions:[m.OK],defaultAction:m.OK,details:n.technicalDetails||"",contentWidth:"60%"})}}))}else{i.setDescription(n.description||"")}o.to(i.getId());return Promise.resolve(true)};i._initializeTargetAggregation=function e(t){const n=t.getManifest(),o=n["sap.ui5"].routing?n["sap.ui5"].routing.targets:null;this._oTargetsAggregation={};if(o){Object.keys(o).forEach(e=>{const t=o[e];if(t.controlAggregation){this._oTargetsAggregation[e]={aggregation:t.controlAggregation,pattern:t.contextPattern}}else{this._oTargetsAggregation[e]={aggregation:"page",pattern:null}}})}};i._initializeRoutesInformation=function e(t){const n=t.getManifest(),o=n["sap.ui5"].routing?n["sap.ui5"].routing.routes:null;this._oTargetsFromRoutePattern={};if(o){o.forEach(e=>{this._oTargetsFromRoutePattern[e.pattern]=e.target})}};i.getCurrentArgument=function e(){return this.sCurrentArguments};i.getCurrentRouteName=function e(){return this.sCurrentRouteName};i.getConstants=function e(){return x};i.getTargetAggregation=function e(){return this._oTargetsAggregation};i.onRouteMatched=function e(t){const n=t.getParameter("name");this.sCurrentRouteName=n;this.sCurrentArguments=t.getParameter("arguments")};i._scrollTablesToLastNavigatedItems=function e(){const t=this._getAllVisibleViews();if(t.length>1||t[0].getViewData().viewLevel<this._oFCLConfig.maxColumnsCount){let e;const n=this.getViewForNavigatedRowsComputation();if(n&&t.indexOf(n)===-1){t.push(n)}for(let n=t.length-1;n>0;n--){const o=t[n],i=t[n-1];if(o.getBindingContext()){e=o.getBindingContext().getPath();i.getController()._scrollTablesToRow(e)}}}};i.onStateChanged=function e(t){const n=t.getParameter("isNavigationArrow");if(this.sCurrentArguments!==undefined){if(!this.sCurrentArguments[this.SQUERYKEYNAME]){this.sCurrentArguments[this.SQUERYKEYNAME]={}}this.sCurrentArguments[this.SQUERYKEYNAME].layout=t.getParameter("layout")}this._forceModelContextChangeOnBreadCrumbs(t);if(n){this._oRouterProxy.navTo(this.sCurrentRouteName,this.sCurrentArguments)}const o=this.getRightmostView();if(o){this._computeTitleHierarchy(o)}};i._forceModelContextChangeOnBreadCrumbs=function e(t){const n=t.getSource();let o=[];o=o.concat(n.getBeginColumnPages()).concat(n.getMidColumnPages()).concat(n.getEndColumnPages());o.forEach(function(e){const t=T(e);const n=t.byId&&t.byId("breadcrumbs");if(n){n.fireModelContextChange()}})};i._updateShareButtonVisibility=function e(t,n){let o;switch(n){case"OneColumn":o=t==="beginColumn";break;case"MidColumnFullScreen":case"ThreeColumnsBeginExpandedEndHidden":case"ThreeColumnsMidExpandedEndHidden":case"TwoColumnsBeginExpanded":case"TwoColumnsMidExpanded":o=t==="midColumn";break;case"EndColumnFullScreen":case"ThreeColumnsEndExpanded":case"ThreeColumnsMidExpanded":o=t==="endColumn";break;default:o=false}return o};i._updateEditButtonVisiblity=function e(t,n){let o=true;switch(t){case"midColumn":switch(n){case"TwoColumnsMidExpanded":case"ThreeColumnsMidExpanded":case"ThreeColumnsEndExpanded":o=false;break}break;case"endColumn":switch(n){case"ThreeColumnsMidExpanded":case"ThreeColumnsEndExpanded":o=false}break}return o};i.updateUIStateForView=function e(t,n){const o=this.getHelper().getCurrentUIState(),i=["beginColumn","midColumn","endColumn"],r=this.getFclControl().getLayout();let l;if(!t.getModel("fclhelper")){t.setModel(this._createHelperModel(),"fclhelper")}if(n>=this._oFCLConfig.maxColumnsCount){l=i[this._oFCLConfig.maxColumnsCount-1];o.actionButtonsInfo.midColumn.fullScreen=null;o.actionButtonsInfo.midColumn.exitFullScreen=null;o.actionButtonsInfo.midColumn.closeColumn=null;o.actionButtonsInfo.endColumn.exitFullScreen=null;o.actionButtonsInfo.endColumn.fullScreen=null;o.actionButtonsInfo.endColumn.closeColumn=null}else{l=i[n]}if(n>=this._oFCLConfig.maxColumnsCount||r==="EndColumnFullScreen"||r==="MidColumnFullScreen"||r==="OneColumn"){t.getModel("fclhelper").setProperty("/breadCrumbIsVisible",true)}else{t.getModel("fclhelper").setProperty("/breadCrumbIsVisible",false)}o.actionButtonsInfo.beginColumn={fullScreen:null,exitFullScreen:null,closeColumn:null};const s=Object.assign({},o.actionButtonsInfo[l]);s.switchVisible=s.fullScreen!==null||s.exitFullScreen!==null;s.switchIcon=s.fullScreen!==null?"sap-icon://full-screen":"sap-icon://exit-full-screen";s.isFullScreen=s.fullScreen===null;s.closeVisible=s.closeColumn!==null;t.getModel("fclhelper").setProperty("/actionButtonsInfo",s);t.getModel("fclhelper").setProperty("/showEditButton",this._updateEditButtonVisiblity(l,r));t.getModel("fclhelper").setProperty("/showShareIcon",this._updateShareButtonVisibility(l,r))};i.onBeforeRouteMatched=function e(t){if(t){const e=t.getParameters().arguments[this.SQUERYKEYNAME];let n=e?e.layout:null;if(!n){const e=this.getHelper().getNextUIState(0);n=e.layout}const o=t.getParameter("config").target;n=this._correctLayoutForTargets(n,o);if(n){this.getFclControl().setLayout(n)}}};i.getHelper=function e(){return t.getInstanceFor(this.getFclControl(),this._oFCLConfig)};i.calculateLayout=function e(t,n,o){let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(!o){o=i?this.getFclControl().getLayout():this.getHelper().getNextUIState(t).layout}const r=this.getRouter().getRouteByHash(`${n}?layout=${o}`);const l=this._oTargetsFromRoutePattern[r.getPattern()];return this._correctLayoutForTargets(o,l)};i._correctLayoutForTargets=function e(t,n){const o={2:["TwoColumnsMidExpanded","TwoColumnsBeginExpanded","MidColumnFullScreen"],3:["ThreeColumnsMidExpanded","ThreeColumnsEndExpanded","ThreeColumnsMidExpandedEndHidden","ThreeColumnsBeginExpandedEndHidden","MidColumnFullScreen","EndColumnFullScreen"]};if(n&&!Array.isArray(n)){n=[n]}if(!n){return t}else if(n.length>1){const e=o[n.length];if(e.indexOf(t)<0){t=e[0]}}else{const e=this.getTargetAggregation()[n[0]].aggregation||this._oFCLConfig.defaultControlAggregation;switch(e){case"beginColumnPages":t="OneColumn";break;case"midColumnPages":t="MidColumnFullScreen";break;case"endColumnPages":t="EndColumnFullScreen";break}}return t};i.getInstancedViews=function e(){const t=this.getFclControl();const n=[...t.getBeginColumnPages(),...t.getMidColumnPages(),...t.getEndColumnPages()];return n.map(e=>{if(e&&e.isA("sap.ui.core.ComponentContainer")){return e.getComponentInstance().getRootControl()}else{return e}})};i._getAllVisibleViews=function t(n){const o=[];n=n?n:this.getFclControl().getLayout();switch(n){case y.EndColumnFullScreen:if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.MidColumnFullScreen:if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;case y.OneColumn:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}break;case y.ThreeColumnsEndExpanded:case y.ThreeColumnsMidExpanded:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.TwoColumnsBeginExpanded:case y.TwoColumnsMidExpanded:case y.ThreeColumnsMidExpandedEndHidden:case y.ThreeColumnsBeginExpandedEndHidden:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;default:e.error(`Unhandled switch case for ${this.getFclControl().getLayout()}`)}return o};i._getAllViews=function t(n){const o=[];n=n?n:this.getFclControl().getLayout();switch(n){case y.OneColumn:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}break;case y.ThreeColumnsEndExpanded:case y.ThreeColumnsMidExpanded:case y.ThreeColumnsMidExpandedEndHidden:case y.ThreeColumnsBeginExpandedEndHidden:case y.EndColumnFullScreen:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}break;case y.TwoColumnsBeginExpanded:case y.TwoColumnsMidExpanded:if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}break;case y.MidColumnFullScreen:const t=this.getHelper().getCurrentUIState().actionButtonsInfo.midColumn.exitFullScreen;if(this.getFclControl().getCurrentBeginColumnPage()){o.push(T(this.getFclControl().getCurrentBeginColumnPage()))}if(this.getFclControl().getCurrentMidColumnPage()){o.push(T(this.getFclControl().getCurrentMidColumnPage()))}if(t.indexOf("ThreeColumn")>=0){if(this.getFclControl().getCurrentEndColumnPage()){o.push(T(this.getFclControl().getCurrentEndColumnPage()))}}break;default:e.error(`Unhandled switch case for ${this.getFclControl().getLayout()}`)}return o};i.onContainerReady=function e(){const t=this._getAllVisibleViews();const n=t.reduce(function(e,t){e.push(r.restoreView(t));return e},[]);return Promise.all(n)};i.getRightmostContext=function e(){const t=this.getRightmostView();return t&&t.getBindingContext()};i.getRightmostView=function e(){return this._getAllViews().pop()};i.isContextUsedInPages=function e(t){if(!this.getFclControl()){return false}const n=this._getAllViews();for(const e of n){if(e){if(e.getBindingContext()===t){return true}}else{return false}}return false};i._setShellMenuTitle=function e(t,n,o){if(this.getHelper().getCurrentUIState().isFullScreen!==true){t.getShellServices().setTitle(o)}else{t.getShellServices().setTitle(n)}};return o}(u),d=M(h.prototype,"viewState",[c],{configurable:true,enumerable:true,writable:true,initializer:null}),h))||C);return R},false);
6
6
  //# sourceMappingURL=Fcl.controller.js.map