@sapui5/sap.fe.macros 1.141.2 → 1.142.1

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 (239) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +34 -17
  14. package/src/sap/fe/macros/Field.ts +64 -32
  15. package/src/sap/fe/macros/FooterContent.js +7 -3
  16. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +4 -3
  22. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/Page.js +8 -4
  28. package/src/sap/fe/macros/Page.tsx +13 -4
  29. package/src/sap/fe/macros/RichTextEditor.js +14 -17
  30. package/src/sap/fe/macros/RichTextEditor.tsx +12 -16
  31. package/src/sap/fe/macros/Status.js +35 -8
  32. package/src/sap/fe/macros/Status.tsx +23 -2
  33. package/src/sap/fe/macros/ValueHelp.js +5 -2
  34. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  43. package/src/sap/fe/macros/chart/Action.js +37 -2
  44. package/src/sap/fe/macros/chart/Action.ts +21 -0
  45. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  46. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  47. package/src/sap/fe/macros/chart/ChartDelegate.js +19 -8
  48. package/src/sap/fe/macros/chart/ChartDelegate.ts +36 -12
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +59 -14
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +81 -31
  51. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  52. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  53. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  54. package/src/sap/fe/macros/controls/FilterBar.ts +50 -2
  55. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  56. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  57. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  58. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +46 -13
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +51 -10
  63. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  64. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  65. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  66. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  67. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  68. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  69. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  70. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  71. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +6 -35
  72. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +35 -60
  73. package/src/sap/fe/macros/field/FieldTemplating.js +10 -4
  74. package/src/sap/fe/macros/field/FieldTemplating.ts +12 -5
  75. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  76. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  77. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  78. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  79. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  80. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  81. package/src/sap/fe/macros/filterBar/FilterBar.block.js +13 -3
  82. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +29 -8
  83. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  84. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  85. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  86. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  87. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  88. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  89. package/src/sap/fe/macros/form/Form.block.js +27 -2
  90. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  91. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  92. package/src/sap/fe/macros/form/FormContainer.block.js +104 -72
  93. package/src/sap/fe/macros/form/FormContainer.block.ts +114 -72
  94. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  95. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  96. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  97. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  98. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  100. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  101. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  102. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  103. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  104. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  105. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  106. package/src/sap/fe/macros/internal/field/EditStyle.js +18 -24
  107. package/src/sap/fe/macros/internal/field/EditStyle.tsx +24 -44
  108. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  109. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  110. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  111. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  112. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  113. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  114. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  115. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  116. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +44 -12
  117. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +42 -11
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  123. package/src/sap/fe/macros/library.js +5 -6
  124. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  125. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  126. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  127. package/src/sap/fe/macros/messagebundle.properties +13 -5
  128. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  129. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  130. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  133. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  136. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  137. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  139. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  140. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  150. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  154. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  169. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  172. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  177. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  178. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  179. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
  180. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
  181. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  182. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  183. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  184. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  185. package/src/sap/fe/macros/table/Action.js +15 -2
  186. package/src/sap/fe/macros/table/Action.ts +11 -1
  187. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  188. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  189. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  190. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  191. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  192. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  193. package/src/sap/fe/macros/table/ActionsTemplating.js +21 -6
  194. package/src/sap/fe/macros/table/ActionsTemplating.tsx +19 -4
  195. package/src/sap/fe/macros/table/MdcTableTemplate.js +113 -15
  196. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +162 -14
  197. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  198. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  199. package/src/sap/fe/macros/table/Table.block.js +72 -29
  200. package/src/sap/fe/macros/table/Table.block.tsx +71 -15
  201. package/src/sap/fe/macros/table/TableAPI.js +213 -154
  202. package/src/sap/fe/macros/table/TableAPI.ts +116 -60
  203. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  204. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  205. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +8 -5
  206. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +14 -12
  207. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  208. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  209. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  210. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  211. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  212. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  213. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -28
  214. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +111 -122
  215. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  216. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  217. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  218. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  219. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  220. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  221. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  222. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  223. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  224. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  225. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  226. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  227. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  228. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  229. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
  230. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
  231. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  232. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  233. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  234. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  235. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  236. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  237. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  238. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  239. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Label", "sap/m/MessageBox", "sap/m/ResponsivePopover", "sap/m/library", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/IconPool", "sap/ui/util/openWindow", "../controls/FieldWrapper", "../internal/helpers/Upload"], function (Log, CommonUtils, CollaborationCommon, draft, KeepAliveHelper, ModelHelper, ResourceModelHelper, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Label, MessageBox, ResponsivePopover, mobilelibrary, Device, Element, IconPool, openWindow, FieldWrapper, Upload) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/MessageBox", "sap/m/ResponsivePopover", "sap/m/library", "sap/ui/Device", "sap/ui/core/IconPool", "sap/ui/util/openWindow", "../controls/FieldWrapper", "../internal/helpers/Upload"], function (Log, CommonUtils, CollaborationCommon, draft, KeepAliveHelper, ModelHelper, ResourceModelHelper, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, MessageBox, ResponsivePopover, mobilelibrary, Device, IconPool, openWindow, FieldWrapper, Upload) {
6
6
  "use strict";
7
7
 
8
8
  var showTypeMismatchDialog = Upload.showTypeMismatchDialog;
@@ -10,7 +10,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
10
10
  var setHeaderFields = Upload.setHeaderFields;
11
11
  var displayMessageForFailedUpload = Upload.displayMessageForFailedUpload;
12
12
  var getResourceModel = ResourceModelHelper.getResourceModel;
13
- var getActivityKeyFromPath = CollaborationCommon.getActivityKeyFromPath;
14
13
  var Activity = CollaborationCommon.Activity;
15
14
  const FieldRuntimeHelper = {
16
15
  uploadPromises: {},
@@ -75,7 +74,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
75
74
  if (oSourceField.isA(FieldWrapper.getMetadata().getName()) && oSourceField.getEditMode() === "Editable") {
76
75
  oSourceField = oSourceField.getContentEdit()[0];
77
76
  }
78
- if (oSourceField.isA("sap.ui.mdc.Field")) {
77
+ if (oSourceField?.isA("sap.ui.mdc.Field")) {
79
78
  let bIsValid = oEvent.getParameter("valid") || oEvent.getParameter("isValid");
80
79
  if (bIsValid === undefined) {
81
80
  if (oSourceField.getMaxConditions() === 1) {
@@ -469,8 +468,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
469
468
  const viewData = view.getViewData();
470
469
  const draftRootPath = ModelHelper.getDraftRootPath(bindingContext) ?? bindingContext.getPath();
471
470
  let urlNavigation = await controller._routing.getHashForNavigation(bindingContext, navPath);
471
+ const isStickyMode = ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()),
472
+ isHiddenDraftEnabled = controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false;
472
473
  const navigateFn = () => {
473
- controller.getAppComponent().getRouterProxy().navToHash(urlNavigation, true, false, false, !ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()));
474
+ controller.getAppComponent().getRouterProxy().navToHash(urlNavigation, true, false, false, isStickyMode || isHiddenDraftEnabled);
474
475
  };
475
476
 
476
477
  // To know if we're navigating on the same OP Entity
@@ -488,38 +489,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
488
489
  } else {
489
490
  Log.error("FieldRuntime: No routing listener controller extension found. Internal navigation aborted.", "sap.fe.macros.field.FieldRuntime", "onDataFieldWithNavigationPath");
490
491
  }
491
- },
492
- /**
493
- * Event handler to create and show who is editing the field popover.
494
- * @param source The avatar which is next to the field locked
495
- * @param view Current view
496
- */
497
- showCollaborationEditUser: function (source, view) {
498
- const resourceModel = ResourceModelHelper.getResourceModel(view);
499
- let popover = Element.getElementById(`manageCollaborationDraft--editUser`);
500
- if (!popover) {
501
- popover = new ResponsivePopover("manageCollaborationDraft--editUser", {
502
- showHeader: false,
503
- placement: "Bottom"
504
- });
505
- popover.addStyleClass("sapUiContentPadding");
506
- view.addDependent(popover);
507
- }
508
- const bindingPath = source.getBinding("initials")?.getBindings().find(binding => binding?.getPath()?.startsWith("/collaboration/activities")).getPath();
509
- const activities = source.getBindingContext("internal")?.getObject(bindingPath);
510
- let editingActivity;
511
- if (activities && activities.length > 0) {
512
- editingActivity = activities.find(activity => {
513
- return activity.key === getActivityKeyFromPath(source.getBindingContext().getPath());
514
- });
515
- }
516
- popover.destroyContent();
517
- popover.addContent(new Label({
518
- text: resourceModel.getText("C_COLLABORATIONAVATAR_USER_EDIT_FIELD", [`${editingActivity?.name}`])
519
- }));
520
- popover.openBy(source);
521
492
  }
522
493
  };
523
494
  return FieldRuntimeHelper;
524
495
  }, false);
525
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImZpZWxkIiwiY29udHJvbGxlciIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJmaWVsZEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0IiwiZmllbGRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzQSIsImZlQ29udHJvbGxlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJ2YWx1ZUhlbHBJZCIsImdldFZhbHVlSGVscCIsIm1ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJkYXRhIiwicmVwbGFjZSIsImZpZWxkUGF0aCIsImdldFBhdGgiLCJzZWxlY3RlZFZhbHVlIiwiZ2V0VmFsdWUiLCJyZWNvbW1lbmRhdGlvbnMiLCJ1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24iLCJpbmNsdWRlcyIsInRhYmxlSWQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwidGFibGUiLCJieUlkIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJjb250ZXh0Iiwib0NvbnRyb2xsZXIiLCJfY29udHJvbGxlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2VGaWVsZCIsImdldFNvdXJjZSIsIm1GaWVsZFN0YXRlIiwiX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMiLCJvQmluZGluZyIsImdldERhdGFTdGF0ZSIsImdldEludmFsaWRWYWx1ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnQiLCJGaWVsZFdyYXBwZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRFZGl0TW9kZSIsImdldENvbnRlbnRFZGl0IiwiYklzVmFsaWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNYXhDb25kaXRpb25zIiwib1ZhbHVlQmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImZpZWxkVmFsdWUiLCJ2YWxpZGl0eSIsInN0YXRlIiwicHJlc3NMaW5rIiwib1NvdXJjZSIsInNhcG1MaW5rIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsImdldERlcGVuZGVudHMiLCJsZW5ndGgiLCJvRmllbGRJbmZvIiwib3BlbkxpbmsiLCJtZGNMaW5rIiwiaFJlZiIsImdldFRyaWdnZXJIcmVmIiwiX3VzZURlbGVnYXRlSXRlbXMiLCJsaW5rSXRlbXMiLCJyZXRyaWV2ZUxpbmtJdGVtcyIsImdldFBheWxvYWQiLCJoYXNRdWlja1ZpZXdGYWNldHMiLCJwb3BvdmVyIiwiY3JlYXRlUG9wb3ZlcldpdGhOb1RhcmdldHMiLCJhZGREZXBlbmRlbnQiLCJvcGVuQnkiLCJvcGVuIiwiZXJyb3IiLCJMb2ciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2hlbGxIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJuYXZBcmdzIiwidGFyZ2V0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJLZWVwQWxpdmVIZWxwZXIiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwiaXNTdGlja3lFZGl0TW9kZSIsIm5hdmlnYXRlIiwibmV3SHJlZiIsImhyZWZGb3JFeHRlcm5hbCIsIm9wZW5XaW5kb3ciLCJtZGNMaW5rSWQiLCJnZXRJZCIsImlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIiwidGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImRlc2NyaXB0aW9uIiwiZW5hYmxlRm9ybWF0dGVkVGV4dCIsImlsbHVzdHJhdGlvblNpemUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIiwiRXh0cmFTbWFsbCIsImlsbHVzdHJhdGlvblR5cGUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9EYXRhIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwicG9wb3ZlclNldHRpbmdzIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInNob3dIZWFkZXIiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsInBsYWNlbWVudCIsIm1vYmlsZWxpYnJhcnkiLCJQbGFjZW1lbnRUeXBlIiwiQXV0byIsImNvbnRlbnQiLCJhZnRlckNsb3NlIiwiZXZlbnQiLCJkZXN0cm95IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZmlsZVVwbG9hZGVyIiwiZ2l2ZW5UeXBlIiwiYWNjZXB0ZWRUeXBlcyIsImdldE1pbWVUeXBlIiwic2hvd1R5cGVNaXNtYXRjaERpYWxvZyIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwic2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nIiwiZ2V0TWF4aW11bUZpbGVTaXplIiwidG9GaXhlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwicHJvcGVydHlGaWxlTmFtZSIsInN0YXR1cyIsIk51bWJlciIsImZpbGVXcmFwcGVyIiwic2V0VUlCdXN5IiwiZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQiLCJyZWplY3QiLCJuZXdFVGFnIiwiZXRhZyIsInNldFByb3BlcnR5IiwicGF0aCIsImF2YXRhciIsInJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmciLCJfY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtIiwicmVzb2x2ZSIsImZpcmVFdmVudCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsIm5vdGlmaWNhdGlvbkRhdGEiLCJwdXNoIiwib1ZpZXciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJBY3Rpdml0eSIsIkNoYW5nZSIsIlVubG9jayIsInJlbW92ZVN0cmVhbSIsImRlbGV0ZUJ1dHRvbiIsImJDb2xsYWJvcmF0aW9uRW5hYmxlZCIsIkxvY2siLCJvQ29udHJvbCIsIm9GRUNvbnRyb2xsZXIiLCJpc1RyYW5zaWVudCIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwidXBsb2FkU3RyZWFtIiwiRkVDb250cm9sbGVyIiwidXBsb2FkVXJsIiwiZ2V0VXBsb2FkVXJsIiwic2V0VXBsb2FkVXJsIiwiZmlsZXMiLCJmaWxlVHlwZSIsInR5cGUiLCJzZXRIZWFkZXJGaWVsZHMiLCJ1cGxvYWRQcm9taXNlIiwiUHJvbWlzZSIsInVwbG9hZCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJNZXNzYWdlQm94IiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlciIsImdldENvbnRyb2xsZXIiLCJiaW5kaW5nUGF0aCIsImZ1bGxQYXRoIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJzb3VyY2UiLCJnZXRJY29uRm9yTWltZVR5cGUiLCJtaW1lVHlwZSIsIkljb25Qb29sIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJuYXZQYXRoIiwiX3JvdXRpbmciLCJiaW5kaW5nQ29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwidXJsTmF2aWdhdGlvbiIsImdldEhhc2hGb3JOYXZpZ2F0aW9uIiwibmF2aWdhdGVGbiIsImdldFJvdXRlclByb3h5IiwibmF2VG9IYXNoIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRzV2l0aCIsInNhbWVPUE5hdmlnYXRpb24iLCJjb252ZXJ0ZXJUeXBlIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiIsInNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImFkZFN0eWxlQ2xhc3MiLCJnZXRCaW5kaW5ncyIsImZpbmQiLCJhY3Rpdml0aWVzIiwiZ2V0T2JqZWN0IiwiZWRpdGluZ0FjdGl2aXR5IiwiYWN0aXZpdHkiLCJrZXkiLCJnZXRBY3Rpdml0eUtleUZyb21QYXRoIiwiZGVzdHJveUNvbnRlbnQiLCJhZGRDb250ZW50IiwiTGFiZWwiLCJ0ZXh0IiwibmFtZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIGdldEFjdGl2aXR5S2V5RnJvbVBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciwgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGV4dExpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvVGV4dExpbmtcIjtcbmltcG9ydCB0eXBlIHsgTGlua0RlbGVnYXRlUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0SWRlbnRpZmllciBmcm9tIFwic2FwL20vT2JqZWN0SWRlbnRpZmllclwiO1xuaW1wb3J0IHR5cGUgeyAkUmVzcG9uc2l2ZVBvcG92ZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IG1vYmlsZWxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50LCBkZWZhdWx0IGFzIG1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE1kY0xpbmsgZnJvbSBcInNhcC91aS9tZGMvTGlua1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIERhdGFTdGF0ZSBmcm9tIFwic2FwL3VpL21vZGVsL0RhdGFTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IG9wZW5XaW5kb3cgZnJvbSBcInNhcC91aS91dGlsL29wZW5XaW5kb3dcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkV3JhcHBlciBmcm9tIFwiLi4vY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBGaWxlV3JhcHBlciBmcm9tIFwiLi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCB7XG5cdGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLFxuXHRzZXRIZWFkZXJGaWVsZHMsXG5cdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyxcblx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZ1xufSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCIuLi90YWJsZS9UYWJsZUFQSVwiO1xuXG50eXBlIEZpbGUgPSB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbmNvbnN0IEZpZWxkUnVudGltZUhlbHBlciA9IHtcblx0dXBsb2FkUHJvbWlzZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHsgcmVzb2x2ZTogRnVuY3Rpb247IHJlamVjdDogRnVuY3Rpb24gfT4sXG5cdGNyZWF0aW5nSW5hY3RpdmVSb3c6IGZhbHNlLFxuXG5cdGZldGNoUmVjb21tZW5kYXRpb25zOiBmdW5jdGlvbiAoZmllbGQ6IENvbnRyb2wsIGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyIHwgRXh0ZW5zaW9uQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmllbGQpO1xuXHRcdGNvbnN0IGZpZWxkQmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCByZWNvbW1lbmRhdGlvbnNDb250ZXh0OiBDb250ZXh0O1xuXG5cdFx0Ly8gZGV0ZXJtaW5lIHJlY29tbWVuZGF0aW9uIGNvbnRleHQgdG8gdXNlXG5cdFx0Y29uc3QgZmllbGRCaW5kaW5nID0gKGZpZWxkQmluZGluZ0NvbnRleHQgYXMgQ29udGV4dCk/LmdldEJpbmRpbmcoKTtcblxuXHRcdGlmIChmaWVsZEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIGluc2lkZSBhIHRhYmxlLCB1c2UgdGhlIHJvd1xuXHRcdFx0cmVjb21tZW5kYXRpb25zQ29udGV4dCA9IGZpZWxkQmluZGluZ0NvbnRleHQgYXMgQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaW5zaWRlIGEgZm9ybSBub3dcblx0XHRcdC8vIGNhbiBoYXZlIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnR5L2RpcmVjdCBwcm9wZXJ0eSAtIHVzZSB2aWV3IGNvbnRleHRcblx0XHRcdHJlY29tbWVuZGF0aW9uc0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0fVxuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKGNvbnRyb2xsZXIpO1xuXHRcdGNvbnN0IHZhbHVlSGVscElkID0gZmllbGQuaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgJiYgZmllbGQuZ2V0VmFsdWVIZWxwKCk7XG5cdFx0Ly8gdXBkYXRlIHRlbGVtZXRyeSBkYXRhIGFzIHBlciB1c2VyIHNlbGVjdGlvblxuXHRcdGNvbnN0IG1ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZmllbGQuZGF0YShcInNvdXJjZVBhdGhcIikucmVwbGFjZShtZXRhUGF0aCwgXCJcIik7XG5cdFx0Y29uc3QgZmllbGRQYXRoID0gYCR7ZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfSR7cHJvcGVydHlQYXRofWA7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGZpZWxkLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGZpZWxkLmdldFZhbHVlKCk7XG5cdFx0ZmVDb250cm9sbGVyLnJlY29tbWVuZGF0aW9ucy51cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24oZmllbGRQYXRoLCBzZWxlY3RlZFZhbHVlKTtcblxuXHRcdGlmICh2YWx1ZUhlbHBJZCAmJiB2YWx1ZUhlbHBJZC5pbmNsdWRlcyhcIjo6VGFibGVWYWx1ZUhlbHA6OlwiKSkge1xuXHRcdFx0Y29uc3QgdGFibGVJZCA9IHZhbHVlSGVscElkLnN1YnN0cmluZygwLCB2YWx1ZUhlbHBJZC5pbmRleE9mKFwiOjpUYWJsZVZhbHVlSGVscDo6XCIpKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdmlldy5ieUlkKHRhYmxlSWQpO1xuXHRcdFx0Y29uc3QgY29udGV4dElkZW50aWZpZXIgPSAodGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZ1tdO1xuXHRcdFx0ZmVDb250cm9sbGVyLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zT25GaWVsZENoYW5nZShmaWVsZCwge1xuXHRcdFx0XHRjb250ZXh0OiByZWNvbW1lbmRhdGlvbnNDb250ZXh0LFxuXHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZlQ29udHJvbGxlci5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UoZmllbGQsIHsgY29udGV4dDogcmVjb21tZW5kYXRpb25zQ29udGV4dCB9KTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0RXh0ZW5zaW9uQ29udHJvbGxlcjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSSk6IFBhZ2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuaXNBPEV4dGVuc2lvbkFQST4oXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIikgPyBvQ29udHJvbGxlci5fY29udHJvbGxlciA6IG9Db250cm9sbGVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmaWVsZCB2YWx1ZSBhbmQgdmFsaWRpdHkgb24gYSBjaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgYnkgdGhlIGNoYW5nZSBldmVudFxuXHQgKiBAcmV0dXJucyBGaWVsZCB2YWx1ZSBhbmQgdmFsaWRpdHlcblx0ICovXG5cdGdldEZpZWxkU3RhdGVPbkNoYW5nZTogZnVuY3Rpb24gKG9FdmVudDogRmllbGQkQ2hhbmdlRXZlbnQgJiBFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfSwgQ29udHJvbD4pOiB7XG5cdFx0ZmllbGQ6IG1kY0ZpZWxkO1xuXHRcdHN0YXRlOiB7XG5cdFx0XHRmaWVsZFZhbHVlPzogdW5rbm93bjtcblx0XHRcdHZhbGlkaXR5OiBib29sZWFuO1xuXHRcdH07XG5cdH0ge1xuXHRcdGxldCBvU291cmNlRmllbGQgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRtRmllbGRTdGF0ZToge1xuXHRcdFx0XHRmaWVsZFZhbHVlPzogdW5rbm93bjtcblx0XHRcdFx0dmFsaWRpdHk6IGJvb2xlYW47XG5cdFx0XHR9O1xuXHRcdGNvbnN0IF9pc0JpbmRpbmdTdGF0ZU1lc3NhZ2VzID0gZnVuY3Rpb24gKG9CaW5kaW5nOiBQcm9wZXJ0eUJpbmRpbmcgJiB7IGdldERhdGFTdGF0ZTogKCkgPT4gRGF0YVN0YXRlIH0pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBvQmluZGluZyAmJiBvQmluZGluZy5nZXREYXRhU3RhdGUoKSA/IG9CaW5kaW5nLmdldERhdGFTdGF0ZSgpLmdldEludmFsaWRWYWx1ZSgpID09PSB1bmRlZmluZWQgOiB0cnVlO1xuXHRcdH07XG5cdFx0aWYgKG9Tb3VyY2VGaWVsZC5pc0E8bWRjRmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFwiKSkge1xuXHRcdFx0b1NvdXJjZUZpZWxkID0gb1NvdXJjZUZpZWxkLmdldENvbnRlbnQoKSBhcyBtZGNGaWVsZDtcblx0XHR9XG5cdFx0aWYgKG9Tb3VyY2VGaWVsZC5pc0E8RW5oYW5jZVdpdGhVSTU8RmllbGQ+PihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IG9Tb3VyY2VGaWVsZC5nZXRDb250ZW50KCkgYXMgbWRjRmllbGQ7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0b1NvdXJjZUZpZWxkLmlzQTxFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+PihGaWVsZFdyYXBwZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICYmXG5cdFx0XHRvU291cmNlRmllbGQuZ2V0RWRpdE1vZGUoKSA9PT0gXCJFZGl0YWJsZVwiXG5cdFx0KSB7XG5cdFx0XHRvU291cmNlRmllbGQgPSAob1NvdXJjZUZpZWxkIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4pLmdldENvbnRlbnRFZGl0KClbMF0gYXMgbWRjRmllbGQ7XG5cdFx0fVxuXG5cdFx0aWYgKG9Tb3VyY2VGaWVsZC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0bGV0IGJJc1ZhbGlkID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInZhbGlkXCIpIHx8IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpc1ZhbGlkXCIpO1xuXHRcdFx0aWYgKGJJc1ZhbGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRNYXhDb25kaXRpb25zKCkgPT09IDEpIHtcblx0XHRcdFx0XHRjb25zdCBvVmFsdWVCaW5kaW5nSW5mbyA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpO1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob1ZhbHVlQmluZGluZ0luZm8gJiYgb1ZhbHVlQmluZGluZ0luZm8uYmluZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpID09PSBcIlwiICYmICFvU291cmNlRmllbGQuZ2V0UHJvcGVydHkoXCJyZXF1aXJlZFwiKSkge1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bUZpZWxkU3RhdGUgPSB7XG5cdFx0XHRcdGZpZWxkVmFsdWU6IG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogISFiSXNWYWxpZFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb1NvdXJjZUZpZWxkIGV4dGVuZHMgZnJvbSBhIEZpbGVVcGxvYWRlciB8fCBJbnB1dCB8fCBpcyBhIENoZWNrQm94XG5cdFx0XHRjb25zdCBvQmluZGluZyA9XG5cdFx0XHRcdChvU291cmNlRmllbGQgYXMgQ29udHJvbCkuZ2V0QmluZGluZyhcInVwbG9hZFVybFwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJzZWxlY3RlZFwiKTtcblx0XHRcdG1GaWVsZFN0YXRlID0ge1xuXHRcdFx0XHRmaWVsZFZhbHVlOiBvQmluZGluZyAmJiAob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nKS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nICYgeyBnZXREYXRhU3RhdGU6ICgpID0+IERhdGFTdGF0ZSB9KVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpZWxkOiBvU291cmNlRmllbGQsXG5cdFx0XHRzdGF0ZTogbUZpZWxkU3RhdGVcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgcHJlc3MgZXZlbnQgZm9yIGEgbGluay5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgcHJlc3MgZXZlbnRcblx0ICogQHJldHVybnMgVGhlIHByZXNzZWQgbGlua1xuXHQgKi9cblx0cHJlc3NMaW5rOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IHNhcG1MaW5rID0gb1NvdXJjZS5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpXG5cdFx0XHQ/IG9Tb3VyY2UuZmluZEVsZW1lbnRzKGZhbHNlLCAoZWxlbTogRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIik7XG5cdFx0XHQgIH0pWzBdXG5cdFx0XHQ6IG9Tb3VyY2U7XG5cdFx0aWYgKG9Tb3VyY2U/LmlzQTxUZXh0TGluaz4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHQvL3doZW4gdGhlIGxpbmsgaXMgaW5zaWRlIGEgVGV4dExpbmsgY29udHJvbCwgdGhlIGRlcGVuZGVudCB3aWxsIGJlIG9uIHRoZSBUZXh0TGlua1xuXHRcdFx0c2FwbUxpbmsgPSBvU291cmNlLmdldENvbnRlbnQoKSBhcyBMaW5rO1xuXHRcdH1cblxuXHRcdGlmIChvU291cmNlLmdldERlcGVuZGVudHMoKSAmJiBvU291cmNlLmdldERlcGVuZGVudHMoKS5sZW5ndGggPiAwICYmIHNhcG1MaW5rLmdldFByb3BlcnR5KFwidGV4dFwiKSAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgb0ZpZWxkSW5mbyA9IG9Tb3VyY2UuZ2V0RGVwZW5kZW50cygpWzBdO1xuXHRcdFx0aWYgKG9GaWVsZEluZm8gJiYgb0ZpZWxkSW5mby5pc0E8TWRjTGluaz4oXCJzYXAudWkubWRjLkxpbmtcIikpIHtcblx0XHRcdFx0YXdhaXQgRmllbGRSdW50aW1lSGVscGVyLm9wZW5MaW5rKG9GaWVsZEluZm8sIHNhcG1MaW5rIGFzIExpbmspO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2FwbUxpbmsgYXMgTGluaztcblx0fSxcblxuXHRvcGVuTGluazogYXN5bmMgZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmssIHNhcG1MaW5rOiBMaW5rKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGhSZWYgPSBhd2FpdCBtZGNMaW5rLmdldFRyaWdnZXJIcmVmKCk7XG5cdFx0XHRpZiAoIWhSZWYpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCAobWRjTGluayBhcyB1bmtub3duIGFzIHsgX3VzZURlbGVnYXRlSXRlbXM6IEZ1bmN0aW9uIH0pLl91c2VEZWxlZ2F0ZUl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlua0l0ZW1zID0gYXdhaXQgbWRjTGluay5yZXRyaWV2ZUxpbmtJdGVtcygpO1xuXHRcdFx0XHRcdGlmIChsaW5rSXRlbXM/Lmxlbmd0aCA9PT0gMCAmJiAobWRjTGluay5nZXRQYXlsb2FkKCkgYXMgTGlua0RlbGVnYXRlUGF5bG9hZCkuaGFzUXVpY2tWaWV3RmFjZXRzID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHBvcG92ZXI6IFJlc3BvbnNpdmVQb3BvdmVyID0gRmllbGRSdW50aW1lSGVscGVyLmNyZWF0ZVBvcG92ZXJXaXRoTm9UYXJnZXRzKG1kY0xpbmspO1xuXHRcdFx0XHRcdFx0bWRjTGluay5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0XHRhd2FpdCBtZGNMaW5rLm9wZW4oc2FwbUxpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIFF1aWNrVmlldyBQb3BvdmVyIGRpYWxvZzogJHtlcnJvcn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoc2FwbUxpbmspO1xuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsSGFzaCA9IHNoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChoUmVmKTtcblx0XHRcdFx0Y29uc3QgbmF2QXJncyA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNoZWxsSGFzaC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogc2hlbGxIYXNoLnBhcmFtc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRLZWVwQWxpdmVIZWxwZXIuc3RvcmVDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9ySGFzaCh2aWV3LCBzaGVsbEhhc2gpO1xuXHRcdFx0XHRpZiAoQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly9VUkwgcGFyYW1zIGFuZCB4YXBwU3RhdGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGVhcmxpZXIgaGVuY2UgdXNpbmcgbmF2aWdhdGVcblx0XHRcdFx0XHRhd2FpdCBzaGVsbFNlcnZpY2UubmF2aWdhdGUobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SHJlZiA9IGF3YWl0IHNoZWxsU2VydmljZS5ocmVmRm9yRXh0ZXJuYWwobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdG9wZW5XaW5kb3cobmV3SHJlZik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcmV0aXJldmluZyBocmVmRm9yRXh0ZXJuYWwgOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYEVycm9yIHRyaWdnZXJpbmcgbGluayBIcmVmOiAke2Vycm9yfWApO1xuXHRcdH1cblx0fSxcblxuXHRjcmVhdGVQb3BvdmVyV2l0aE5vVGFyZ2V0czogZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmspOiBSZXNwb25zaXZlUG9wb3ZlciB7XG5cdFx0Y29uc3QgbWRjTGlua0lkID0gbWRjTGluay5nZXRJZCgpO1xuXHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgPSB7XG5cdFx0XHR0aXRsZTogZ2V0UmVzb3VyY2VNb2RlbChtZGNMaW5rIGFzIHVua25vd24gYXMgQ29udHJvbCkuZ2V0VGV4dChcIk1fSUxMVVNUUkFURURNRVNTQUdFX1RJVExFXCIpLFxuXHRcdFx0ZGVzY3JpcHRpb246IGdldFJlc291cmNlTW9kZWwobWRjTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFRleHQoXCJNX0lMTFVTVFJBVEVETUVTU0FHRV9ERVNDUklQVElPTlwiKSxcblx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ6IHRydWUsXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplOiBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGwsXG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdH07XG5cdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZShgJHttZGNMaW5rSWR9LWlsbHVzdHJhdGVkbWVzc2FnZWAsIGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTtcblx0XHRjb25zdCBwb3BvdmVyU2V0dGluZ3M6ICRSZXNwb25zaXZlUG9wb3ZlclNldHRpbmdzID0ge1xuXHRcdFx0aG9yaXpvbnRhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRzaG93SGVhZGVyOiBEZXZpY2Uuc3lzdGVtLnBob25lLFxuXHRcdFx0cGxhY2VtZW50OiBtb2JpbGVsaWJyYXJ5LlBsYWNlbWVudFR5cGUuQXV0byxcblx0XHRcdGNvbnRlbnQ6IFtpbGx1c3RyYXRlZE1lc3NhZ2VdLFxuXHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5nZXRTb3VyY2UoKSkge1xuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zaXZlUG9wb3ZlcihgJHttZGNMaW5rSWR9LXBvcG92ZXJgLCBwb3BvdmVyU2V0dGluZ3MpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB0eXBlIG1pc21hdGNoIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgdHlwZSBtaXNtYXRjaC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB0eXBlIG1pc21hdGNoXG5cdCAqL1xuXHRoYW5kbGVUeXBlTWlzc21hdGNoOiBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gZmlsZVVwbG9hZGVyLmdldE1pbWVUeXBlKCk7XG5cdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWxlIHNpemUgZXhjZWVkIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgZmlsZSBzaXplIGV4Y2VlZC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSBmaWxlIHNpemUgZXhjZWVkXG5cdCAqL1xuXHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyhmaWxlVXBsb2FkZXIsIGZpbGVVcGxvYWRlci5nZXRNYXhpbXVtRmlsZVNpemUoKS50b0ZpeGVkKDMpKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdXBsb2FkIGNvbXBsZXRlIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgbWVzc2FnZSBmb3IgYSBmYWlsZWQgdXBsb2FkIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSB1cGxvYWQgcHJvbWlzZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB1cGxvYWRcblx0ICogQHBhcmFtIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aCBmb3IgdGhlIGZpbGVcblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0aGFuZGxlVXBsb2FkQ29tcGxldGU6IGZ1bmN0aW9uIChcblx0XHRldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQsXG5cdFx0cHJvcGVydHlGaWxlTmFtZTogeyBwYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBOdW1iZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpKSxcblx0XHRcdGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmlsZVdyYXBwZXIgPSBmaWxlVXBsb2FkZXIuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcixcblx0XHRcdGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cdFx0ZmlsZVdyYXBwZXIuc2V0VUlCdXN5KGZhbHNlKTtcblxuXHRcdGNvbnN0IGNvbnRleHQgPSBmaWxlVXBsb2FkZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRpZiAoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA+PSA0MDApIHtcblx0XHRcdGNvbnN0IGVycm9yID0gKGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlUmF3XCIpIHx8IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlXCIpKSBhcyBzdHJpbmc7XG5cdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChmaWxlVXBsb2FkZXIsIGVycm9yKTtcblx0XHRcdEZpZWxkUnVudGltZUhlbHBlci51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV0ucmVqZWN0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5ld0VUYWcgPSAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaGVhZGVyc1wiKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmV0YWc7XG5cblx0XHRcdGlmIChuZXdFVGFnKSB7XG5cdFx0XHRcdC8vIHNldCBuZXcgZXRhZyBmb3IgZmlsZW5hbWUgdXBkYXRlLCBidXQgd2l0aG91dCBzZW5kaW5nIHBhdGNoIHJlcXVlc3Rcblx0XHRcdFx0Y29udGV4dD8uc2V0UHJvcGVydHkoXCJAb2RhdGEuZXRhZ1wiLCBuZXdFVGFnLCBudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IGZpbGVuYW1lIGZvciBsaW5rIHRleHRcblx0XHRcdGlmIChwcm9wZXJ0eUZpbGVOYW1lPy5wYXRoKSB7XG5cdFx0XHRcdGNvbnRleHQ/LnNldFByb3BlcnR5KHByb3BlcnR5RmlsZU5hbWUucGF0aCwgZmlsZVVwbG9hZGVyLmdldFZhbHVlKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWxldGUgdGhlIGF2YXRhciBjYWNoZSB0aGF0IG5vdCBnZXRzIHVwZGF0ZWQgb3RoZXJ3aXNlXG5cdFx0XHRmaWxlV3JhcHBlci5hdmF0YXI/LnJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmcoKTtcblxuXHRcdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oXG5cdFx0XHRcdGV2ZW50IGFzIHVua25vd24gYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdGZpbGVXcmFwcGVyLFxuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXS5yZXNvbHZlKCk7XG5cdFx0XHRmaWVsZD8uZmlyZUV2ZW50KFwiY2hhbmdlXCIsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpcy51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV07XG5cblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gY29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQ/LmlzQ29ubmVjdGVkKCk7XG5cdFx0aWYgKCFpc0NvbGxhYm9yYXRpb25FbmFibGVkIHx8ICFjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90aWZpY2F0aW9uRGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0aWYgKHByb3BlcnR5RmlsZU5hbWU/LnBhdGgpIHtcblx0XHRcdG5vdGlmaWNhdGlvbkRhdGEucHVzaChgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eUZpbGVOYW1lLnBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0bGV0IGJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdFx0YmluZGluZyA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0QmluZGluZygpO1xuXHRcdH1cblx0XHRpZiAoYmluZGluZy5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsICgpID0+IHtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5VbmxvY2ssIGNvbnRlbnQ6IG5vdGlmaWNhdGlvbkRhdGEgfSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHN0cmVhbSBmcm9tIGEgZmlsZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogU2V0cyB0aGUgcHJvcGVydHkgdG8gbnVsbCBhbmQgdGhlbiB1bmRlZmluZWQgdG8gcmVjcmVhdGUgdGhlIHVwbG9hZCBVUkwuXG5cdCAqIEhhbmRsZXMgY29sbGFib3JhdGlvbiBkcmFmdCBhY3Rpdml0eSBzeW5jIGlmIGVuYWJsZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgY2hhbmdlIGV2ZW50IG9iamVjdFxuXHQgKiBAcGFyYW0gIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGggZm9yIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKi9cblx0cmVtb3ZlU3RyZWFtOiBmdW5jdGlvbiAoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdHByb3BlcnR5RmlsZU5hbWU6IHsgcGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgZGVsZXRlQnV0dG9uID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgZmlsZVdyYXBwZXIgPSBkZWxldGVCdXR0b24uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcjtcblx0XHRjb25zdCBjb250ZXh0ID0gZmlsZVdyYXBwZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cblx0XHQvLyBzdHJlYW1zIGFyZSByZW1vdmVkIGJ5IGFzc2lnbmluZyB0aGUgbnVsbCB2YWx1ZVxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCBudWxsKTtcblx0XHQvLyBXaGVuIHNldHRpbmcgdGhlIHByb3BlcnR5IHRvIG51bGwsIHRoZSB1cGxvYWRVcmwgKEBATU9ERUwuZm9ybWF0KSBpcyBzZXQgdG8gXCJcIiBieSB0aGUgbW9kZWxcblx0XHQvL1x0d2l0aCB0aGF0IGFub3RoZXIgdXBsb2FkIGlzIG5vdCBwb3NzaWJsZSBiZWZvcmUgcmVmcmVzaGluZyB0aGUgcGFnZVxuXHRcdC8vIChyZWZyZXNoaW5nIHRoZSBwYWdlIHdvdWxkIHJlY3JlYXRlIHRoZSBVUkwpXG5cdFx0Ly9cdFRoaXMgaXMgdGhlIHdvcmthcm91bmQ6XG5cdFx0Ly9cdFdlIHNldCB0aGUgcHJvcGVydHkgdG8gdW5kZWZpbmVkIG9ubHkgb24gdGhlIGZyb250ZW5kIHdoaWNoIHdpbGwgcmVjcmVhdGUgdGhlIHVwbG9hZFVybFxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCB1bmRlZmluZWQsIG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oZXZlbnQsIGZpbGVXcmFwcGVyLCBjb250cm9sbGVyKTtcblxuXHRcdC8vIENvbGxhYm9yYXRpb24gRHJhZnQgQWN0aXZpdHkgU3luY1xuXHRcdGNvbnN0IGJDb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0Py5pc0Nvbm5lY3RlZCgpO1xuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxldCBiaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGRlbGV0ZUJ1dHRvbik7XG5cdFx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0XHRpZiAocHJvcGVydHlGaWxlTmFtZT8ucGF0aCkge1xuXHRcdFx0XHRkYXRhLnB1c2goYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlGaWxlTmFtZS5wYXRofWApO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuTG9jaywgY29udGVudDogZGF0YSB9KTtcblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogZGF0YSB9KTtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBkYXRhIH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGZpZWxkPy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgZXZlbnQpO1xuXHR9LFxuXG5cdF9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW06IGZ1bmN0aW9uIChcblx0XHRvRXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdG9Db250cm9sOiBDb250cm9sLFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIob0NvbnRyb2xsZXIpO1xuXHRcdGlmIChvQ29udHJvbCAmJiAob0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyB1bmtub3duIGFzIHsgaXNUcmFuc2llbnQ6IEZ1bmN0aW9uIH0pLmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHQob0V2ZW50IGFzIHVua25vd24gYXMgeyBvU291cmNlOiBDb250cm9sIH0pLm9Tb3VyY2UgPSBvQ29udHJvbDtcblx0XHR9XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50LCBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwbG9hZHMgYSBzdHJlYW0gdXNpbmcgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIFNldHMgdGhlIHVwbG9hZCBVUkwsIHN5bmNocm9uaXplcyB0aGUgdXBsb2FkIHdpdGggb3RoZXIgcmVxdWVzdHMsIGFuZCBoYW5kbGVzIGNvbGxhYm9yYXRpb24gZHJhZnQgYWN0aXZpdHkgc3luYyBpZiBlbmFibGVkLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3Qgb2YgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqL1xuXHR1cGxvYWRTdHJlYW06IGZ1bmN0aW9uIChjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0RkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlciksXG5cdFx0XHRmaWxlV3JhcHBlciA9IGZpbGVVcGxvYWRlci5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIEZpbGVXcmFwcGVyLFxuXHRcdFx0dXBsb2FkVXJsID0gZmlsZVdyYXBwZXIuZ2V0VXBsb2FkVXJsKCk7XG5cblx0XHRpZiAodXBsb2FkVXJsICE9PSBcIlwiKSB7XG5cdFx0XHRmaWxlV3JhcHBlci5zZXRVSUJ1c3kodHJ1ZSk7XG5cblx0XHRcdC8vIHVzZSB1cGxvYWRVcmwgZnJvbSBGaWxlV3JhcHBlciB3aGljaCByZXR1cm5zIGEgY2Fub25pY2FsIFVSTFxuXHRcdFx0ZmlsZVVwbG9hZGVyLnNldFVwbG9hZFVybCh1cGxvYWRVcmwpO1xuXG5cdFx0XHQvLyBzZXQgdGhlIHJlcXVlc3QgaGVhZGVyIGZvciB0aGUgdXBsb2FkXG5cdFx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdFx0Ly8gdGhlcmUgaXMgb25seSBvbmUgZmlsZSBhcyB3ZSBhbGxvdyBzZWxlY3Rpbmcgb25seSBvbmVcblx0XHRcdGNvbnN0IGZpbGVUeXBlID0gKGZpbGVzICYmIChmaWxlc1swXSBhcyBGaWxlKS50eXBlKSBhcyBzdHJpbmc7XG5cdFx0XHRzZXRIZWFkZXJGaWVsZHMoZmlsZVVwbG9hZGVyLCBmaWxlVHlwZSk7XG5cblx0XHRcdC8vIHN5bmNocm9uaXplIHVwbG9hZCB3aXRoIG90aGVyIHJlcXVlc3RzXG5cdFx0XHRjb25zdCB1cGxvYWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdHRoaXMudXBsb2FkUHJvbWlzZXMgPSB0aGlzLnVwbG9hZFByb21pc2VzIHx8IHt9O1xuXHRcdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXSA9IHtcblx0XHRcdFx0XHRyZXNvbHZlOiByZXNvbHZlLFxuXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGZpbGVVcGxvYWRlci51cGxvYWQoKTtcblx0XHRcdH0pO1xuXHRcdFx0RkVDb250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKHVwbG9hZFByb21pc2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGdldFJlc291cmNlTW9kZWwoY29udHJvbGxlcikuZ2V0VGV4dChcIk1fRklFTERfRklMRVVQTE9BREVSX0FCT1JURURfVEVYVFwiKSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHdoZW4gYSBGaWxlVXBsb2FkIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0aGFuZGxlT3BlblVwbG9hZGVyOiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyLCBBY3Rpdml0eS5Mb2NrKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNlbmQgY29sbGFib3JhdGlvbiBtZXNzYWdlcyBmcm9tIGEgRmlsZVVwbG9hZGVyLlxuXHQgKiBAcGFyYW0gZmlsZVVwbG9hZGVyXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICovXG5cdF9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyOiBGaWxlVXBsb2FkZXIsIGFjdGlvbjogQWN0aXZpdHkpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRpZiAoY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gZmlsZVVwbG9hZGVyLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcInByb3BlcnR5UGF0aFwiKTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gYCR7ZmlsZVVwbG9hZGVyLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtiaW5kaW5nUGF0aH1gO1xuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb24sIGNvbnRlbnQ6IGZ1bGxQYXRoIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGEgRmlsZVVwbG9hZCBkaWFsb2cgaXMgY2xvc2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZUNsb3NlVXBsb2FkZXI6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlcihmaWxlVXBsb2FkZXIsIEFjdGl2aXR5LlVubG9jayk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZW5zIGFuIGV4dGVybmFsIGxpbmsgaW4gdGhlIHNhbWUgdGFiLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgVVJMIGZyb20gdGhlIGxpbmsncyBkYXRhIGFuZCBvcGVucyBpdCBpbiB0aGUgc2FtZSB0YWIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgbGluayBjbGljay5cblx0ICovXG5cdG9wZW5FeHRlcm5hbExpbms6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIExpbms+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0aWYgKHNvdXJjZS5kYXRhKFwidXJsXCIpICYmIHNvdXJjZS5nZXRQcm9wZXJ0eShcInRleHRcIikgIT09IFwiXCIpIHtcblx0XHRcdC8vIFRoaXMgb3BlbnMgdGhlIGxpbmsgaW4gdGhlIHNhbWUgdGFiIGFzIHRoZSBsaW5rLiBJdCB3YXMgZG9uZSB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB0eXBlIG9mIGxpbmtzLlxuXHRcdFx0b3BlbldpbmRvdyhzb3VyY2UuZGF0YShcInVybFwiKSwgXCJfc2VsZlwiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaWNvbiBmb3IgYSBnaXZlbiBNSU1FIHR5cGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYEljb25Qb29sYCB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGljb24gZm9yIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlLlxuXHQgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlwZSBmb3Igd2hpY2ggdGhlIGljb24gaXMgdG8gYmUgcmV0cmlldmVkXG5cdCAqIEByZXR1cm5zIFRoZSBpY29uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIE1JTUUgdHlwZVxuXHQgKi9cblx0Z2V0SWNvbkZvck1pbWVUeXBlOiBmdW5jdGlvbiAobWltZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEljb25Qb29sLmdldEljb25Gb3JNaW1lVHlwZShtaW1lVHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIGludGVybmFsIG5hdmlnYXRpb24gb24gdGhlIGxpbmsgcGVydGFpbmluZyB0byBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGguXG5cdCAqIEBwYXJhbSBzb3VyY2UgU291cmNlIG9mIHRoZSBwcmVzcyBldmVudFxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBJbnN0YW5jZSBvZiB0aGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gbmF2UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoXG5cdCAqL1xuXHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogYXN5bmMgZnVuY3Rpb24gKHNvdXJjZTogQ29udHJvbCwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG5hdlBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChjb250cm9sbGVyLl9yb3V0aW5nKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNvdXJjZSksXG5cdFx0XHRcdG1ldGFNb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblxuXHRcdFx0Y29uc3QgZHJhZnRSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoYmluZGluZ0NvbnRleHQpID8/IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGxldCB1cmxOYXZpZ2F0aW9uID0gYXdhaXQgY29udHJvbGxlci5fcm91dGluZy5nZXRIYXNoRm9yTmF2aWdhdGlvbihiaW5kaW5nQ29udGV4dCwgbmF2UGF0aCk7XG5cdFx0XHRjb25zdCBuYXZpZ2F0ZUZuID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldFJvdXRlclByb3h5KClcblx0XHRcdFx0XHQubmF2VG9IYXNoKFxuXHRcdFx0XHRcdFx0dXJsTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0IU1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHdlJ3JlIG5hdmlnYXRpbmcgb24gdGhlIHNhbWUgT1AgRW50aXR5XG5cdFx0XHRpZiAoIXVybE5hdmlnYXRpb24/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdHVybE5hdmlnYXRpb24gPSBgLyR7dXJsTmF2aWdhdGlvbn1gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc2FtZU9QTmF2aWdhdGlvbiA9IHVybE5hdmlnYXRpb24uc3RhcnRzV2l0aChkcmFmdFJvb3RQYXRoKTtcblxuXHRcdFx0Ly8gU2hvdyBkcmFmdCBsb3NzIGNvbmZpcm1hdGlvbiBkaWFsb2cgaW4gY2FzZSBvZiBPYmplY3QgcGFnZVxuXHRcdFx0aWYgKHZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiICYmICFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQobWV0YU1vZGVsKSAmJiAhc2FtZU9QTmF2aWdhdGlvbikge1xuXHRcdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0XHRuYXZpZ2F0ZUZuLFxuXHRcdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHR2aWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYXZpZ2F0ZUZuKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XCJGaWVsZFJ1bnRpbWU6IE5vIHJvdXRpbmcgbGlzdGVuZXIgY29udHJvbGxlciBleHRlbnNpb24gZm91bmQuIEludGVybmFsIG5hdmlnYXRpb24gYWJvcnRlZC5cIixcblx0XHRcdFx0XCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZVwiLFxuXHRcdFx0XHRcIm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCJcblx0XHRcdCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBhbmQgc2hvdyB3aG8gaXMgZWRpdGluZyB0aGUgZmllbGQgcG9wb3Zlci5cblx0ICogQHBhcmFtIHNvdXJjZSBUaGUgYXZhdGFyIHdoaWNoIGlzIG5leHQgdG8gdGhlIGZpZWxkIGxvY2tlZFxuXHQgKiBAcGFyYW0gdmlldyBDdXJyZW50IHZpZXdcblx0ICovXG5cdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IGZ1bmN0aW9uIChzb3VyY2U6IEF2YXRhciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodmlldyk7XG5cdFx0bGV0IHBvcG92ZXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGBtYW5hZ2VDb2xsYWJvcmF0aW9uRHJhZnQtLWVkaXRVc2VyYCkgYXMgUmVzcG9uc2l2ZVBvcG92ZXI7XG5cblx0XHRpZiAoIXBvcG92ZXIpIHtcblx0XHRcdHBvcG92ZXIgPSBuZXcgUmVzcG9uc2l2ZVBvcG92ZXIoXCJtYW5hZ2VDb2xsYWJvcmF0aW9uRHJhZnQtLWVkaXRVc2VyXCIsIHtcblx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdHBsYWNlbWVudDogXCJCb3R0b21cIlxuXHRcdFx0fSk7XG5cdFx0XHRwb3BvdmVyLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0dmlldy5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSAoc291cmNlLmdldEJpbmRpbmcoXCJpbml0aWFsc1wiKSBhcyBDb21wb3NpdGVCaW5kaW5nIHwgdW5kZWZpbmVkKVxuXHRcdFx0Py5nZXRCaW5kaW5ncygpXG5cdFx0XHQuZmluZCgoYmluZGluZykgPT4gYmluZGluZz8uZ2V0UGF0aCgpPy5zdGFydHNXaXRoKFwiL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllc1wiKSlcblx0XHRcdC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYWN0aXZpdGllcyA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRPYmplY3QoYmluZGluZ1BhdGgpO1xuXG5cdFx0bGV0IGVkaXRpbmdBY3Rpdml0eTogVXNlckFjdGl2aXR5IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhY3Rpdml0aWVzICYmIGFjdGl2aXRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0ZWRpdGluZ0FjdGl2aXR5ID0gYWN0aXZpdGllcy5maW5kKChhY3Rpdml0eTogVXNlckFjdGl2aXR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhY3Rpdml0eS5rZXkgPT09IGdldEFjdGl2aXR5S2V5RnJvbVBhdGgoc291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLmdldFBhdGgoKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cG9wb3Zlci5kZXN0cm95Q29udGVudCgpO1xuXHRcdHBvcG92ZXIuYWRkQ29udGVudChcblx0XHRcdG5ldyBMYWJlbCh7XG5cdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkFWQVRBUl9VU0VSX0VESVRfRklFTERcIiwgW2Ake2VkaXRpbmdBY3Rpdml0eT8ubmFtZX1gXSlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRwb3BvdmVyLm9wZW5CeShzb3VyY2UpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGaWVsZFJ1bnRpbWVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBNkRBLE1BQU1BLGtCQUFrQixHQUFHO0lBQzFCQyxjQUFjLEVBQUUsQ0FBQyxDQUE0RDtJQUM3RUMsbUJBQW1CLEVBQUUsS0FBSztJQUUxQkMsb0JBQW9CLEVBQUUsU0FBQUEsQ0FBVUMsS0FBYyxFQUFFQyxVQUF5QyxFQUFRO01BQ2hHLE1BQU1DLElBQUksR0FBR0MsV0FBVyxDQUFDQyxhQUFhLENBQUNKLEtBQUssQ0FBQztNQUM3QyxNQUFNSyxtQkFBbUIsR0FBR0wsS0FBSyxDQUFDTSxpQkFBaUIsQ0FBQyxDQUFDO01BQ3JELElBQUlDLHNCQUErQjs7TUFFbkM7TUFDQSxNQUFNQyxZQUFZLEdBQUlILG1CQUFtQixFQUFjSSxVQUFVLENBQUMsQ0FBQztNQUVuRSxJQUFJRCxZQUFZLENBQUNFLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFO1FBQy9EO1FBQ0FILHNCQUFzQixHQUFHRixtQkFBOEI7TUFDeEQsQ0FBQyxNQUFNO1FBQ047UUFDQTtRQUNBRSxzQkFBc0IsR0FBR0wsSUFBSSxDQUFDSSxpQkFBaUIsQ0FBQyxDQUFDO01BQ2xEO01BQ0EsTUFBTUssWUFBWSxHQUFHZixrQkFBa0IsQ0FBQ2dCLHNCQUFzQixDQUFDWCxVQUFVLENBQUM7TUFDMUUsTUFBTVksV0FBVyxHQUFHYixLQUFLLENBQUNVLEdBQUcsQ0FBVyxrQkFBa0IsQ0FBQyxJQUFJVixLQUFLLENBQUNjLFlBQVksQ0FBQyxDQUFDO01BQ25GO01BQ0EsTUFBTUMsUUFBUSxHQUFHQyxXQUFXLENBQUNDLHFCQUFxQixDQUFDakIsS0FBSyxDQUFDTSxpQkFBaUIsQ0FBQyxD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
496
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImZpZWxkIiwiY29udHJvbGxlciIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJmaWVsZEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0IiwiZmllbGRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzQSIsImZlQ29udHJvbGxlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJ2YWx1ZUhlbHBJZCIsImdldFZhbHVlSGVscCIsIm1ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJkYXRhIiwicmVwbGFjZSIsImZpZWxkUGF0aCIsImdldFBhdGgiLCJzZWxlY3RlZFZhbHVlIiwiZ2V0VmFsdWUiLCJyZWNvbW1lbmRhdGlvbnMiLCJ1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24iLCJpbmNsdWRlcyIsInRhYmxlSWQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwidGFibGUiLCJieUlkIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJjb250ZXh0Iiwib0NvbnRyb2xsZXIiLCJfY29udHJvbGxlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2VGaWVsZCIsImdldFNvdXJjZSIsIm1GaWVsZFN0YXRlIiwiX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMiLCJvQmluZGluZyIsImdldERhdGFTdGF0ZSIsImdldEludmFsaWRWYWx1ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnQiLCJGaWVsZFdyYXBwZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRFZGl0TW9kZSIsImdldENvbnRlbnRFZGl0IiwiYklzVmFsaWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNYXhDb25kaXRpb25zIiwib1ZhbHVlQmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImZpZWxkVmFsdWUiLCJ2YWxpZGl0eSIsInN0YXRlIiwicHJlc3NMaW5rIiwib1NvdXJjZSIsInNhcG1MaW5rIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsImdldERlcGVuZGVudHMiLCJsZW5ndGgiLCJvRmllbGRJbmZvIiwib3BlbkxpbmsiLCJtZGNMaW5rIiwiaFJlZiIsImdldFRyaWdnZXJIcmVmIiwiX3VzZURlbGVnYXRlSXRlbXMiLCJsaW5rSXRlbXMiLCJyZXRyaWV2ZUxpbmtJdGVtcyIsImdldFBheWxvYWQiLCJoYXNRdWlja1ZpZXdGYWNldHMiLCJwb3BvdmVyIiwiY3JlYXRlUG9wb3ZlcldpdGhOb1RhcmdldHMiLCJhZGREZXBlbmRlbnQiLCJvcGVuQnkiLCJvcGVuIiwiZXJyb3IiLCJMb2ciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2hlbGxIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJuYXZBcmdzIiwidGFyZ2V0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJLZWVwQWxpdmVIZWxwZXIiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwiaXNTdGlja3lFZGl0TW9kZSIsIm5hdmlnYXRlIiwibmV3SHJlZiIsImhyZWZGb3JFeHRlcm5hbCIsIm9wZW5XaW5kb3ciLCJtZGNMaW5rSWQiLCJnZXRJZCIsImlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIiwidGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImRlc2NyaXB0aW9uIiwiZW5hYmxlRm9ybWF0dGVkVGV4dCIsImlsbHVzdHJhdGlvblNpemUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIiwiRXh0cmFTbWFsbCIsImlsbHVzdHJhdGlvblR5cGUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9EYXRhIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwicG9wb3ZlclNldHRpbmdzIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInNob3dIZWFkZXIiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsInBsYWNlbWVudCIsIm1vYmlsZWxpYnJhcnkiLCJQbGFjZW1lbnRUeXBlIiwiQXV0byIsImNvbnRlbnQiLCJhZnRlckNsb3NlIiwiZXZlbnQiLCJkZXN0cm95IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZmlsZVVwbG9hZGVyIiwiZ2l2ZW5UeXBlIiwiYWNjZXB0ZWRUeXBlcyIsImdldE1pbWVUeXBlIiwic2hvd1R5cGVNaXNtYXRjaERpYWxvZyIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwic2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nIiwiZ2V0TWF4aW11bUZpbGVTaXplIiwidG9GaXhlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwicHJvcGVydHlGaWxlTmFtZSIsInN0YXR1cyIsIk51bWJlciIsImZpbGVXcmFwcGVyIiwic2V0VUlCdXN5IiwiZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQiLCJyZWplY3QiLCJuZXdFVGFnIiwiZXRhZyIsInNldFByb3BlcnR5IiwicGF0aCIsImF2YXRhciIsInJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmciLCJfY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtIiwicmVzb2x2ZSIsImZpcmVFdmVudCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsIm5vdGlmaWNhdGlvbkRhdGEiLCJwdXNoIiwib1ZpZXciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJBY3Rpdml0eSIsIkNoYW5nZSIsIlVubG9jayIsInJlbW92ZVN0cmVhbSIsImRlbGV0ZUJ1dHRvbiIsImJDb2xsYWJvcmF0aW9uRW5hYmxlZCIsIkxvY2siLCJvQ29udHJvbCIsIm9GRUNvbnRyb2xsZXIiLCJpc1RyYW5zaWVudCIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwidXBsb2FkU3RyZWFtIiwiRkVDb250cm9sbGVyIiwidXBsb2FkVXJsIiwiZ2V0VXBsb2FkVXJsIiwic2V0VXBsb2FkVXJsIiwiZmlsZXMiLCJmaWxlVHlwZSIsInR5cGUiLCJzZXRIZWFkZXJGaWVsZHMiLCJ1cGxvYWRQcm9taXNlIiwiUHJvbWlzZSIsInVwbG9hZCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJNZXNzYWdlQm94IiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlciIsImdldENvbnRyb2xsZXIiLCJiaW5kaW5nUGF0aCIsImZ1bGxQYXRoIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJzb3VyY2UiLCJnZXRJY29uRm9yTWltZVR5cGUiLCJtaW1lVHlwZSIsIkljb25Qb29sIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJuYXZQYXRoIiwiX3JvdXRpbmciLCJiaW5kaW5nQ29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwidXJsTmF2aWdhdGlvbiIsImdldEhhc2hGb3JOYXZpZ2F0aW9uIiwiaXNTdGlja3lNb2RlIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm5hdmlnYXRlRm4iLCJnZXRSb3V0ZXJQcm94eSIsIm5hdlRvSGFzaCIsInN0YXJ0c1dpdGgiLCJzYW1lT1BOYXZpZ2F0aW9uIiwiY29udmVydGVyVHlwZSIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsIk5hdmlnYXRpb25UeXBlIiwiRm9yd2FyZE5hdmlnYXRpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkUnVudGltZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUZXh0TGluayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9UZXh0TGlua1wiO1xuaW1wb3J0IHR5cGUgeyBMaW5rRGVsZWdhdGVQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvcXVpY2tWaWV3L1F1aWNrVmlld0RlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuXG5pbXBvcnQgdHlwZSBDaGVja0JveCBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tCb3gkU2VsZWN0RXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuXG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dEJhc2UkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE9iamVjdElkZW50aWZpZXIgZnJvbSBcInNhcC9tL09iamVjdElkZW50aWZpZXJcIjtcbmltcG9ydCB0eXBlIFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7ICRSZXNwb25zaXZlUG9wb3ZlclNldHRpbmdzIH0gZnJvbSBcInNhcC9tL1Jlc3BvbnNpdmVQb3BvdmVyXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZVBvcG92ZXIgZnJvbSBcInNhcC9tL1Jlc3BvbnNpdmVQb3BvdmVyXCI7XG5pbXBvcnQgbW9iaWxlbGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50LCBGaWVsZCRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgdHlwZSBEYXRhU3RhdGUgZnJvbSBcInNhcC91aS9tb2RlbC9EYXRhU3RhdGVcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCxcblx0RmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50XG59IGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBvcGVuV2luZG93IGZyb20gXCJzYXAvdWkvdXRpbC9vcGVuV2luZG93XCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCBGaWVsZFdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5pbXBvcnQge1xuXHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZCxcblx0c2V0SGVhZGVyRmllbGRzLFxuXHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2csXG5cdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2dcbn0gZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvVXBsb2FkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi4vdGFibGUvVGFibGVBUElcIjtcblxudHlwZSBGaWxlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG59O1xuXG5jb25zdCBGaWVsZFJ1bnRpbWVIZWxwZXIgPSB7XG5cdHVwbG9hZFByb21pc2VzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB7IHJlc29sdmU6IEZ1bmN0aW9uOyByZWplY3Q6IEZ1bmN0aW9uIH0+LFxuXHRjcmVhdGluZ0luYWN0aXZlUm93OiBmYWxzZSxcblxuXHRmZXRjaFJlY29tbWVuZGF0aW9uczogZnVuY3Rpb24gKGZpZWxkOiBDb250cm9sLCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRjb25zdCBmaWVsZEJpbmRpbmdDb250ZXh0ID0gZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgcmVjb21tZW5kYXRpb25zQ29udGV4dDogQ29udGV4dDtcblxuXHRcdC8vIGRldGVybWluZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0IHRvIHVzZVxuXHRcdGNvbnN0IGZpZWxkQmluZGluZyA9IChmaWVsZEJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQpPy5nZXRCaW5kaW5nKCk7XG5cblx0XHRpZiAoZmllbGRCaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHQvLyBpbnNpZGUgYSB0YWJsZSwgdXNlIHRoZSByb3dcblx0XHRcdHJlY29tbWVuZGF0aW9uc0NvbnRleHQgPSBmaWVsZEJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluc2lkZSBhIGZvcm0gbm93XG5cdFx0XHQvLyBjYW4gaGF2ZSAxLTEgbmF2aWdhdGlvbiBwcm9wZXJ0eS9kaXJlY3QgcHJvcGVydHkgLSB1c2UgdmlldyBjb250ZXh0XG5cdFx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdH1cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRjb25zdCB2YWx1ZUhlbHBJZCA9IGZpZWxkLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGZpZWxkLmdldFZhbHVlSGVscCgpO1xuXHRcdC8vIHVwZGF0ZSB0ZWxlbWV0cnkgZGF0YSBhcyBwZXIgdXNlciBzZWxlY3Rpb25cblx0XHRjb25zdCBtZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGEoXCJzb3VyY2VQYXRoXCIpLnJlcGxhY2UobWV0YVBhdGgsIFwiXCIpO1xuXHRcdGNvbnN0IGZpZWxkUGF0aCA9IGAke2ZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0ke3Byb3BlcnR5UGF0aH1gO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBmaWVsZC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSAmJiBmaWVsZC5nZXRWYWx1ZSgpO1xuXHRcdGZlQ29udHJvbGxlci5yZWNvbW1lbmRhdGlvbnMudXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uKGZpZWxkUGF0aCwgc2VsZWN0ZWRWYWx1ZSk7XG5cblx0XHRpZiAodmFsdWVIZWxwSWQgJiYgdmFsdWVIZWxwSWQuaW5jbHVkZXMoXCI6OlRhYmxlVmFsdWVIZWxwOjpcIikpIHtcblx0XHRcdGNvbnN0IHRhYmxlSWQgPSB2YWx1ZUhlbHBJZC5zdWJzdHJpbmcoMCwgdmFsdWVIZWxwSWQuaW5kZXhPZihcIjo6VGFibGVWYWx1ZUhlbHA6OlwiKSk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHZpZXcuYnlJZCh0YWJsZUlkKTtcblx0XHRcdGNvbnN0IGNvbnRleHRJZGVudGlmaWVyID0gKHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmdbXTtcblx0XHRcdGZlQ29udHJvbGxlci5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UoZmllbGQsIHtcblx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25zQ29udGV4dCxcblx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmZUNvbnRyb2xsZXIucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnNPbkZpZWxkQ2hhbmdlKGZpZWxkLCB7IGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uc0NvbnRleHQgfSk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldEV4dGVuc2lvbkNvbnRyb2xsZXI6IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEkpOiBQYWdlQ29udHJvbGxlciB7XG5cdFx0cmV0dXJuIG9Db250cm9sbGVyLmlzQTxFeHRlbnNpb25BUEk+KFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpID8gb0NvbnRyb2xsZXIuX2NvbnRyb2xsZXIgOiBvQ29udHJvbGxlcjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmllbGQgdmFsdWUgYW5kIHZhbGlkaXR5IG9uIGEgY2hhbmdlIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFRoZSBldmVudCBvYmplY3QgcGFzc2VkIGJ5IHRoZSBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMgRmllbGQgdmFsdWUgYW5kIHZhbGlkaXR5XG5cdCAqL1xuXHRnZXRGaWVsZFN0YXRlT25DaGFuZ2U6IGZ1bmN0aW9uIChcblx0XHRvRXZlbnQ6IFVJNUV2ZW50PFxuXHRcdFx0fCB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkOyBpc1ZhbGlkOiBib29sZWFuIH1cblx0XHRcdHwgQ2hlY2tCb3gkU2VsZWN0RXZlbnRQYXJhbWV0ZXJzXG5cdFx0XHR8IElucHV0QmFzZSRDaGFuZ2VFdmVudFBhcmFtZXRlcnNcblx0XHRcdHwgRmllbGQkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzXG5cdFx0XHR8IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsXG5cdFx0XHRDaGVja0JveCB8IElucHV0QmFzZSB8IG1kY0ZpZWxkIHwgUmF0aW5nSW5kaWNhdG9yIHwgRmllbGRcblx0XHQ+XG5cdCk6IHtcblx0XHRmaWVsZDogQ29udHJvbDtcblx0XHRzdGF0ZToge1xuXHRcdFx0ZmllbGRWYWx1ZT86IHVua25vd247XG5cdFx0XHR2YWxpZGl0eTogYm9vbGVhbjtcblx0XHR9O1xuXHR9IHtcblx0XHRsZXQgb1NvdXJjZUZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0bUZpZWxkU3RhdGU6IHtcblx0XHRcdFx0ZmllbGRWYWx1ZT86IHVua25vd247XG5cdFx0XHRcdHZhbGlkaXR5OiBib29sZWFuO1xuXHRcdFx0fTtcblx0XHRjb25zdCBfaXNCaW5kaW5nU3RhdGVNZXNzYWdlcyA9IGZ1bmN0aW9uIChvQmluZGluZzogUHJvcGVydHlCaW5kaW5nICYgeyBnZXREYXRhU3RhdGU6ICgpID0+IERhdGFTdGF0ZSB9KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0JpbmRpbmcgJiYgb0JpbmRpbmcuZ2V0RGF0YVN0YXRlKCkgPyBvQmluZGluZy5nZXREYXRhU3RhdGUoKS5nZXRJbnZhbGlkVmFsdWUoKSA9PT0gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHR9O1xuXHRcdGlmIChvU291cmNlRmllbGQuaXNBPG1kY0ZpZWxkPihcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRcIikpIHtcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IG9Tb3VyY2VGaWVsZC5nZXRDb250ZW50KCkgYXMgbWRjRmllbGQ7XG5cdFx0fVxuXHRcdGlmIChvU291cmNlRmllbGQuaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkPj4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpKSB7XG5cdFx0XHRvU291cmNlRmllbGQgPSBvU291cmNlRmllbGQuZ2V0Q29udGVudCgpIGFzIG1kY0ZpZWxkO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdG9Tb3VyY2VGaWVsZC5pc0E8RW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPj4oRmllbGRXcmFwcGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJlxuXHRcdFx0b1NvdXJjZUZpZWxkLmdldEVkaXRNb2RlKCkgPT09IFwiRWRpdGFibGVcIlxuXHRcdCkge1xuXHRcdFx0b1NvdXJjZUZpZWxkID0gKG9Tb3VyY2VGaWVsZCBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+KS5nZXRDb250ZW50RWRpdCgpWzBdIGFzIG1kY0ZpZWxkO1xuXHRcdH1cblxuXHRcdGlmIChvU291cmNlRmllbGQ/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRsZXQgYklzVmFsaWQ6IGJvb2xlYW4gPVxuXHRcdFx0XHQob0V2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKSB8fFxuXHRcdFx0XHQob0V2ZW50IGFzIFVJNUV2ZW50PHsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7IGlzVmFsaWQ6IGJvb2xlYW4gfSwgbWRjRmllbGQ+KS5nZXRQYXJhbWV0ZXIoXCJpc1ZhbGlkXCIpO1xuXHRcdFx0aWYgKGJJc1ZhbGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRNYXhDb25kaXRpb25zKCkgPT09IDEpIHtcblx0XHRcdFx0XHRjb25zdCBvVmFsdWVCaW5kaW5nSW5mbyA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpO1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob1ZhbHVlQmluZGluZ0luZm8gJiYgb1ZhbHVlQmluZGluZ0luZm8uYmluZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpID09PSBcIlwiICYmICFvU291cmNlRmllbGQuZ2V0UHJvcGVydHkoXCJyZXF1aXJlZFwiKSkge1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bUZpZWxkU3RhdGUgPSB7XG5cdFx0XHRcdGZpZWxkVmFsdWU6IG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogISFiSXNWYWxpZFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb1NvdXJjZUZpZWxkIGV4dGVuZHMgZnJvbSBhIEZpbGVVcGxvYWRlciB8fCBJbnB1dCB8fCBpcyBhIENoZWNrQm94XG5cdFx0XHRjb25zdCBvQmluZGluZyA9XG5cdFx0XHRcdChvU291cmNlRmllbGQgYXMgQ29udHJvbCkuZ2V0QmluZGluZyhcInVwbG9hZFVybFwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJzZWxlY3RlZFwiKTtcblx0XHRcdG1GaWVsZFN0YXRlID0ge1xuXHRcdFx0XHRmaWVsZFZhbHVlOiBvQmluZGluZyAmJiAob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nKS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nICYgeyBnZXREYXRhU3RhdGU6ICgpID0+IERhdGFTdGF0ZSB9KVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpZWxkOiBvU291cmNlRmllbGQsXG5cdFx0XHRzdGF0ZTogbUZpZWxkU3RhdGVcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgcHJlc3MgZXZlbnQgZm9yIGEgbGluay5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgcHJlc3MgZXZlbnRcblx0ICogQHJldHVybnMgVGhlIHByZXNzZWQgbGlua1xuXHQgKi9cblx0cHJlc3NMaW5rOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IHNhcG1MaW5rID0gb1NvdXJjZS5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpXG5cdFx0XHQ/IG9Tb3VyY2UuZmluZEVsZW1lbnRzKGZhbHNlLCAoZWxlbTogRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIik7XG5cdFx0XHQgIH0pWzBdXG5cdFx0XHQ6IG9Tb3VyY2U7XG5cdFx0aWYgKG9Tb3VyY2U/LmlzQTxUZXh0TGluaz4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHQvL3doZW4gdGhlIGxpbmsgaXMgaW5zaWRlIGEgVGV4dExpbmsgY29udHJvbCwgdGhlIGRlcGVuZGVudCB3aWxsIGJlIG9uIHRoZSBUZXh0TGlua1xuXHRcdFx0c2FwbUxpbmsgPSBvU291cmNlLmdldENvbnRlbnQoKSBhcyBMaW5rO1xuXHRcdH1cblxuXHRcdGlmIChvU291cmNlLmdldERlcGVuZGVudHMoKSAmJiBvU291cmNlLmdldERlcGVuZGVudHMoKS5sZW5ndGggPiAwICYmIHNhcG1MaW5rLmdldFByb3BlcnR5KFwidGV4dFwiKSAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgb0ZpZWxkSW5mbyA9IG9Tb3VyY2UuZ2V0RGVwZW5kZW50cygpWzBdO1xuXHRcdFx0aWYgKG9GaWVsZEluZm8gJiYgb0ZpZWxkSW5mby5pc0E8TWRjTGluaz4oXCJzYXAudWkubWRjLkxpbmtcIikpIHtcblx0XHRcdFx0YXdhaXQgRmllbGRSdW50aW1lSGVscGVyLm9wZW5MaW5rKG9GaWVsZEluZm8sIHNhcG1MaW5rIGFzIExpbmspO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2FwbUxpbmsgYXMgTGluaztcblx0fSxcblxuXHRvcGVuTGluazogYXN5bmMgZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmssIHNhcG1MaW5rOiBMaW5rKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGhSZWYgPSBhd2FpdCBtZGNMaW5rLmdldFRyaWdnZXJIcmVmKCk7XG5cdFx0XHRpZiAoIWhSZWYpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCAobWRjTGluayBhcyB1bmtub3duIGFzIHsgX3VzZURlbGVnYXRlSXRlbXM6IEZ1bmN0aW9uIH0pLl91c2VEZWxlZ2F0ZUl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlua0l0ZW1zID0gYXdhaXQgbWRjTGluay5yZXRyaWV2ZUxpbmtJdGVtcygpO1xuXHRcdFx0XHRcdGlmIChsaW5rSXRlbXM/Lmxlbmd0aCA9PT0gMCAmJiAobWRjTGluay5nZXRQYXlsb2FkKCkgYXMgTGlua0RlbGVnYXRlUGF5bG9hZCkuaGFzUXVpY2tWaWV3RmFjZXRzID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHBvcG92ZXI6IFJlc3BvbnNpdmVQb3BvdmVyID0gRmllbGRSdW50aW1lSGVscGVyLmNyZWF0ZVBvcG92ZXJXaXRoTm9UYXJnZXRzKG1kY0xpbmspO1xuXHRcdFx0XHRcdFx0bWRjTGluay5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0XHRhd2FpdCBtZGNMaW5rLm9wZW4oc2FwbUxpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIFF1aWNrVmlldyBQb3BvdmVyIGRpYWxvZzogJHtlcnJvcn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoc2FwbUxpbmspO1xuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsSGFzaCA9IHNoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChoUmVmKTtcblx0XHRcdFx0Y29uc3QgbmF2QXJncyA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNoZWxsSGFzaC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogc2hlbGxIYXNoLnBhcmFtc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRLZWVwQWxpdmVIZWxwZXIuc3RvcmVDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9ySGFzaCh2aWV3LCBzaGVsbEhhc2gpO1xuXHRcdFx0XHRpZiAoQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly9VUkwgcGFyYW1zIGFuZCB4YXBwU3RhdGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGVhcmxpZXIgaGVuY2UgdXNpbmcgbmF2aWdhdGVcblx0XHRcdFx0XHRhd2FpdCBzaGVsbFNlcnZpY2UubmF2aWdhdGUobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SHJlZiA9IGF3YWl0IHNoZWxsU2VydmljZS5ocmVmRm9yRXh0ZXJuYWwobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdG9wZW5XaW5kb3cobmV3SHJlZik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcmV0aXJldmluZyBocmVmRm9yRXh0ZXJuYWwgOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYEVycm9yIHRyaWdnZXJpbmcgbGluayBIcmVmOiAke2Vycm9yfWApO1xuXHRcdH1cblx0fSxcblxuXHRjcmVhdGVQb3BvdmVyV2l0aE5vVGFyZ2V0czogZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmspOiBSZXNwb25zaXZlUG9wb3ZlciB7XG5cdFx0Y29uc3QgbWRjTGlua0lkID0gbWRjTGluay5nZXRJZCgpO1xuXHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgPSB7XG5cdFx0XHR0aXRsZTogZ2V0UmVzb3VyY2VNb2RlbChtZGNMaW5rIGFzIHVua25vd24gYXMgQ29udHJvbCkuZ2V0VGV4dChcIk1fSUxMVVNUUkFURURNRVNTQUdFX1RJVExFXCIpLFxuXHRcdFx0ZGVzY3JpcHRpb246IGdldFJlc291cmNlTW9kZWwobWRjTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFRleHQoXCJNX0lMTFVTVFJBVEVETUVTU0FHRV9ERVNDUklQVElPTlwiKSxcblx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ6IHRydWUsXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplOiBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGwsXG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdH07XG5cdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZShgJHttZGNMaW5rSWR9LWlsbHVzdHJhdGVkbWVzc2FnZWAsIGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTtcblx0XHRjb25zdCBwb3BvdmVyU2V0dGluZ3M6ICRSZXNwb25zaXZlUG9wb3ZlclNldHRpbmdzID0ge1xuXHRcdFx0aG9yaXpvbnRhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRzaG93SGVhZGVyOiBEZXZpY2Uuc3lzdGVtLnBob25lLFxuXHRcdFx0cGxhY2VtZW50OiBtb2JpbGVsaWJyYXJ5LlBsYWNlbWVudFR5cGUuQXV0byxcblx0XHRcdGNvbnRlbnQ6IFtpbGx1c3RyYXRlZE1lc3NhZ2VdLFxuXHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5nZXRTb3VyY2UoKSkge1xuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zaXZlUG9wb3ZlcihgJHttZGNMaW5rSWR9LXBvcG92ZXJgLCBwb3BvdmVyU2V0dGluZ3MpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB0eXBlIG1pc21hdGNoIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgdHlwZSBtaXNtYXRjaC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB0eXBlIG1pc21hdGNoXG5cdCAqL1xuXHRoYW5kbGVUeXBlTWlzc21hdGNoOiBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gZmlsZVVwbG9hZGVyLmdldE1pbWVUeXBlKCk7XG5cdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWxlIHNpemUgZXhjZWVkIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgZmlsZSBzaXplIGV4Y2VlZC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSBmaWxlIHNpemUgZXhjZWVkXG5cdCAqL1xuXHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyhmaWxlVXBsb2FkZXIsIGZpbGVVcGxvYWRlci5nZXRNYXhpbXVtRmlsZVNpemUoKS50b0ZpeGVkKDMpKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdXBsb2FkIGNvbXBsZXRlIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgbWVzc2FnZSBmb3IgYSBmYWlsZWQgdXBsb2FkIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSB1cGxvYWQgcHJvbWlzZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB1cGxvYWRcblx0ICogQHBhcmFtIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aCBmb3IgdGhlIGZpbGVcblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0aGFuZGxlVXBsb2FkQ29tcGxldGU6IGZ1bmN0aW9uIChcblx0XHRldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQsXG5cdFx0cHJvcGVydHlGaWxlTmFtZTogeyBwYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBOdW1iZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpKSxcblx0XHRcdGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmlsZVdyYXBwZXIgPSBmaWxlVXBsb2FkZXIuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcixcblx0XHRcdGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cdFx0ZmlsZVdyYXBwZXIuc2V0VUlCdXN5KGZhbHNlKTtcblxuXHRcdGNvbnN0IGNvbnRleHQgPSBmaWxlVXBsb2FkZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRpZiAoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA+PSA0MDApIHtcblx0XHRcdGNvbnN0IGVycm9yID0gKGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlUmF3XCIpIHx8IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlXCIpKSBhcyBzdHJpbmc7XG5cdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChmaWxlVXBsb2FkZXIsIGVycm9yKTtcblx0XHRcdEZpZWxkUnVudGltZUhlbHBlci51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV0ucmVqZWN0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5ld0VUYWcgPSAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaGVhZGVyc1wiKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmV0YWc7XG5cblx0XHRcdGlmIChuZXdFVGFnKSB7XG5cdFx0XHRcdC8vIHNldCBuZXcgZXRhZyBmb3IgZmlsZW5hbWUgdXBkYXRlLCBidXQgd2l0aG91dCBzZW5kaW5nIHBhdGNoIHJlcXVlc3Rcblx0XHRcdFx0Y29udGV4dD8uc2V0UHJvcGVydHkoXCJAb2RhdGEuZXRhZ1wiLCBuZXdFVGFnLCBudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IGZpbGVuYW1lIGZvciBsaW5rIHRleHRcblx0XHRcdGlmIChwcm9wZXJ0eUZpbGVOYW1lPy5wYXRoKSB7XG5cdFx0XHRcdGNvbnRleHQ/LnNldFByb3BlcnR5KHByb3BlcnR5RmlsZU5hbWUucGF0aCwgZmlsZVVwbG9hZGVyLmdldFZhbHVlKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWxldGUgdGhlIGF2YXRhciBjYWNoZSB0aGF0IG5vdCBnZXRzIHVwZGF0ZWQgb3RoZXJ3aXNlXG5cdFx0XHRmaWxlV3JhcHBlci5hdmF0YXI/LnJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmcoKTtcblxuXHRcdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oXG5cdFx0XHRcdGV2ZW50IGFzIHVua25vd24gYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdGZpbGVXcmFwcGVyLFxuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXS5yZXNvbHZlKCk7XG5cdFx0XHRmaWVsZD8uZmlyZUV2ZW50KFwiY2hhbmdlXCIsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpcy51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV07XG5cblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gY29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQ/LmlzQ29ubmVjdGVkKCk7XG5cdFx0aWYgKCFpc0NvbGxhYm9yYXRpb25FbmFibGVkIHx8ICFjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90aWZpY2F0aW9uRGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0aWYgKHByb3BlcnR5RmlsZU5hbWU/LnBhdGgpIHtcblx0XHRcdG5vdGlmaWNhdGlvbkRhdGEucHVzaChgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eUZpbGVOYW1lLnBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0bGV0IGJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdFx0YmluZGluZyA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0QmluZGluZygpO1xuXHRcdH1cblx0XHRpZiAoYmluZGluZy5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsICgpID0+IHtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5VbmxvY2ssIGNvbnRlbnQ6IG5vdGlmaWNhdGlvbkRhdGEgfSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHN0cmVhbSBmcm9tIGEgZmlsZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogU2V0cyB0aGUgcHJvcGVydHkgdG8gbnVsbCBhbmQgdGhlbiB1bmRlZmluZWQgdG8gcmVjcmVhdGUgdGhlIHVwbG9hZCBVUkwuXG5cdCAqIEhhbmRsZXMgY29sbGFib3JhdGlvbiBkcmFmdCBhY3Rpdml0eSBzeW5jIGlmIGVuYWJsZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgY2hhbmdlIGV2ZW50IG9iamVjdFxuXHQgKiBAcGFyYW0gIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGggZm9yIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKi9cblx0cmVtb3ZlU3RyZWFtOiBmdW5jdGlvbiAoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdHByb3BlcnR5RmlsZU5hbWU6IHsgcGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgZGVsZXRlQnV0dG9uID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgZmlsZVdyYXBwZXIgPSBkZWxldGVCdXR0b24uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcjtcblx0XHRjb25zdCBjb250ZXh0ID0gZmlsZVdyYXBwZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cblx0XHQvLyBzdHJlYW1zIGFyZSByZW1vdmVkIGJ5IGFzc2lnbmluZyB0aGUgbnVsbCB2YWx1ZVxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCBudWxsKTtcblx0XHQvLyBXaGVuIHNldHRpbmcgdGhlIHByb3BlcnR5IHRvIG51bGwsIHRoZSB1cGxvYWRVcmwgKEBATU9ERUwuZm9ybWF0KSBpcyBzZXQgdG8gXCJcIiBieSB0aGUgbW9kZWxcblx0XHQvL1x0d2l0aCB0aGF0IGFub3RoZXIgdXBsb2FkIGlzIG5vdCBwb3NzaWJsZSBiZWZvcmUgcmVmcmVzaGluZyB0aGUgcGFnZVxuXHRcdC8vIChyZWZyZXNoaW5nIHRoZSBwYWdlIHdvdWxkIHJlY3JlYXRlIHRoZSBVUkwpXG5cdFx0Ly9cdFRoaXMgaXMgdGhlIHdvcmthcm91bmQ6XG5cdFx0Ly9cdFdlIHNldCB0aGUgcHJvcGVydHkgdG8gdW5kZWZpbmVkIG9ubHkgb24gdGhlIGZyb250ZW5kIHdoaWNoIHdpbGwgcmVjcmVhdGUgdGhlIHVwbG9hZFVybFxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCB1bmRlZmluZWQsIG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oZXZlbnQsIGZpbGVXcmFwcGVyLCBjb250cm9sbGVyKTtcblxuXHRcdC8vIENvbGxhYm9yYXRpb24gRHJhZnQgQWN0aXZpdHkgU3luY1xuXHRcdGNvbnN0IGJDb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0Py5pc0Nvbm5lY3RlZCgpO1xuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxldCBiaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGRlbGV0ZUJ1dHRvbik7XG5cdFx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0XHRpZiAocHJvcGVydHlGaWxlTmFtZT8ucGF0aCkge1xuXHRcdFx0XHRkYXRhLnB1c2goYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlGaWxlTmFtZS5wYXRofWApO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuTG9jaywgY29udGVudDogZGF0YSB9KTtcblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogZGF0YSB9KTtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBkYXRhIH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGZpZWxkPy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgZXZlbnQpO1xuXHR9LFxuXG5cdF9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW06IGZ1bmN0aW9uIChcblx0XHRvRXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdG9Db250cm9sOiBDb250cm9sLFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIob0NvbnRyb2xsZXIpO1xuXHRcdGlmIChvQ29udHJvbCAmJiAob0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyB1bmtub3duIGFzIHsgaXNUcmFuc2llbnQ6IEZ1bmN0aW9uIH0pLmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHQob0V2ZW50IGFzIHVua25vd24gYXMgeyBvU291cmNlOiBDb250cm9sIH0pLm9Tb3VyY2UgPSBvQ29udHJvbDtcblx0XHR9XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50LCBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwbG9hZHMgYSBzdHJlYW0gdXNpbmcgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIFNldHMgdGhlIHVwbG9hZCBVUkwsIHN5bmNocm9uaXplcyB0aGUgdXBsb2FkIHdpdGggb3RoZXIgcmVxdWVzdHMsIGFuZCBoYW5kbGVzIGNvbGxhYm9yYXRpb24gZHJhZnQgYWN0aXZpdHkgc3luYyBpZiBlbmFibGVkLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3Qgb2YgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqL1xuXHR1cGxvYWRTdHJlYW06IGZ1bmN0aW9uIChjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0RkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlciksXG5cdFx0XHRmaWxlV3JhcHBlciA9IGZpbGVVcGxvYWRlci5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIEZpbGVXcmFwcGVyLFxuXHRcdFx0dXBsb2FkVXJsID0gZmlsZVdyYXBwZXIuZ2V0VXBsb2FkVXJsKCk7XG5cblx0XHRpZiAodXBsb2FkVXJsICE9PSBcIlwiKSB7XG5cdFx0XHRmaWxlV3JhcHBlci5zZXRVSUJ1c3kodHJ1ZSk7XG5cblx0XHRcdC8vIHVzZSB1cGxvYWRVcmwgZnJvbSBGaWxlV3JhcHBlciB3aGljaCByZXR1cm5zIGEgY2Fub25pY2FsIFVSTFxuXHRcdFx0ZmlsZVVwbG9hZGVyLnNldFVwbG9hZFVybCh1cGxvYWRVcmwpO1xuXG5cdFx0XHQvLyBzZXQgdGhlIHJlcXVlc3QgaGVhZGVyIGZvciB0aGUgdXBsb2FkXG5cdFx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdFx0Ly8gdGhlcmUgaXMgb25seSBvbmUgZmlsZSBhcyB3ZSBhbGxvdyBzZWxlY3Rpbmcgb25seSBvbmVcblx0XHRcdGNvbnN0IGZpbGVUeXBlID0gKGZpbGVzICYmIChmaWxlc1swXSBhcyBGaWxlKS50eXBlKSBhcyBzdHJpbmc7XG5cdFx0XHRzZXRIZWFkZXJGaWVsZHMoZmlsZVVwbG9hZGVyLCBmaWxlVHlwZSk7XG5cblx0XHRcdC8vIHN5bmNocm9uaXplIHVwbG9hZCB3aXRoIG90aGVyIHJlcXVlc3RzXG5cdFx0XHRjb25zdCB1cGxvYWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdHRoaXMudXBsb2FkUHJvbWlzZXMgPSB0aGlzLnVwbG9hZFByb21pc2VzIHx8IHt9O1xuXHRcdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXSA9IHtcblx0XHRcdFx0XHRyZXNvbHZlOiByZXNvbHZlLFxuXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGZpbGVVcGxvYWRlci51cGxvYWQoKTtcblx0XHRcdH0pO1xuXHRcdFx0RkVDb250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKHVwbG9hZFByb21pc2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGdldFJlc291cmNlTW9kZWwoY29udHJvbGxlcikuZ2V0VGV4dChcIk1fRklFTERfRklMRVVQTE9BREVSX0FCT1JURURfVEVYVFwiKSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHdoZW4gYSBGaWxlVXBsb2FkIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0aGFuZGxlT3BlblVwbG9hZGVyOiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyLCBBY3Rpdml0eS5Mb2NrKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNlbmQgY29sbGFib3JhdGlvbiBtZXNzYWdlcyBmcm9tIGEgRmlsZVVwbG9hZGVyLlxuXHQgKiBAcGFyYW0gZmlsZVVwbG9hZGVyXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICovXG5cdF9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyOiBGaWxlVXBsb2FkZXIsIGFjdGlvbjogQWN0aXZpdHkpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRpZiAoY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gZmlsZVVwbG9hZGVyLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcInByb3BlcnR5UGF0aFwiKTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gYCR7ZmlsZVVwbG9hZGVyLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtiaW5kaW5nUGF0aH1gO1xuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb24sIGNvbnRlbnQ6IGZ1bGxQYXRoIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGEgRmlsZVVwbG9hZCBkaWFsb2cgaXMgY2xvc2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZUNsb3NlVXBsb2FkZXI6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlcihmaWxlVXBsb2FkZXIsIEFjdGl2aXR5LlVubG9jayk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZW5zIGFuIGV4dGVybmFsIGxpbmsgaW4gdGhlIHNhbWUgdGFiLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgVVJMIGZyb20gdGhlIGxpbmsncyBkYXRhIGFuZCBvcGVucyBpdCBpbiB0aGUgc2FtZSB0YWIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgbGluayBjbGljay5cblx0ICovXG5cdG9wZW5FeHRlcm5hbExpbms6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIExpbms+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0aWYgKHNvdXJjZS5kYXRhKFwidXJsXCIpICYmIHNvdXJjZS5nZXRQcm9wZXJ0eShcInRleHRcIikgIT09IFwiXCIpIHtcblx0XHRcdC8vIFRoaXMgb3BlbnMgdGhlIGxpbmsgaW4gdGhlIHNhbWUgdGFiIGFzIHRoZSBsaW5rLiBJdCB3YXMgZG9uZSB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB0eXBlIG9mIGxpbmtzLlxuXHRcdFx0b3BlbldpbmRvdyhzb3VyY2UuZGF0YShcInVybFwiKSwgXCJfc2VsZlwiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaWNvbiBmb3IgYSBnaXZlbiBNSU1FIHR5cGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYEljb25Qb29sYCB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGljb24gZm9yIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlLlxuXHQgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlwZSBmb3Igd2hpY2ggdGhlIGljb24gaXMgdG8gYmUgcmV0cmlldmVkXG5cdCAqIEByZXR1cm5zIFRoZSBpY29uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIE1JTUUgdHlwZVxuXHQgKi9cblx0Z2V0SWNvbkZvck1pbWVUeXBlOiBmdW5jdGlvbiAobWltZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEljb25Qb29sLmdldEljb25Gb3JNaW1lVHlwZShtaW1lVHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIGludGVybmFsIG5hdmlnYXRpb24gb24gdGhlIGxpbmsgcGVydGFpbmluZyB0byBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGguXG5cdCAqIEBwYXJhbSBzb3VyY2UgU291cmNlIG9mIHRoZSBwcmVzcyBldmVudFxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBJbnN0YW5jZSBvZiB0aGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gbmF2UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoXG5cdCAqL1xuXHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogYXN5bmMgZnVuY3Rpb24gKHNvdXJjZTogQ29udHJvbCwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG5hdlBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChjb250cm9sbGVyLl9yb3V0aW5nKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNvdXJjZSksXG5cdFx0XHRcdG1ldGFNb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblxuXHRcdFx0Y29uc3QgZHJhZnRSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoYmluZGluZ0NvbnRleHQpID8/IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGxldCB1cmxOYXZpZ2F0aW9uID0gYXdhaXQgY29udHJvbGxlci5fcm91dGluZy5nZXRIYXNoRm9yTmF2aWdhdGlvbihiaW5kaW5nQ29udGV4dCwgbmF2UGF0aCk7XG5cdFx0XHRjb25zdCBpc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRcdGlzSGlkZGVuRHJhZnRFbmFibGVkID1cblx0XHRcdFx0XHQoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHRcdGZhbHNlO1xuXG5cdFx0XHRjb25zdCBuYXZpZ2F0ZUZuID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldFJvdXRlclByb3h5KClcblx0XHRcdFx0XHQubmF2VG9IYXNoKHVybE5hdmlnYXRpb24sIHRydWUsIGZhbHNlLCBmYWxzZSwgaXNTdGlja3lNb2RlIHx8IGlzSGlkZGVuRHJhZnRFbmFibGVkKTtcblx0XHRcdH07XG5cblx0XHRcdC8vIFRvIGtub3cgaWYgd2UncmUgbmF2aWdhdGluZyBvbiB0aGUgc2FtZSBPUCBFbnRpdHlcblx0XHRcdGlmICghdXJsTmF2aWdhdGlvbj8uc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0dXJsTmF2aWdhdGlvbiA9IGAvJHt1cmxOYXZpZ2F0aW9ufWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzYW1lT1BOYXZpZ2F0aW9uID0gdXJsTmF2aWdhdGlvbi5zdGFydHNXaXRoKGRyYWZ0Um9vdFBhdGgpO1xuXG5cdFx0XHQvLyBTaG93IGRyYWZ0IGxvc3MgY29uZmlybWF0aW9uIGRpYWxvZyBpbiBjYXNlIG9mIE9iamVjdCBwYWdlXG5cdFx0XHRpZiAodmlld0RhdGEuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgJiYgIU1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpICYmICFzYW1lT1BOYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRcdG5hdmlnYXRlRm4sXG5cdFx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb25cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5hdmlnYXRlRm4oKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcIkZpZWxkUnVudGltZTogTm8gcm91dGluZyBsaXN0ZW5lciBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3VuZC4gSW50ZXJuYWwgbmF2aWdhdGlvbiBhYm9ydGVkLlwiLFxuXHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lXCIsXG5cdFx0XHRcdFwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkUnVudGltZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWlFQSxNQUFNQSxrQkFBa0IsR0FBRztJQUMxQkMsY0FBYyxFQUFFLENBQUMsQ0FBNEQ7SUFDN0VDLG1CQUFtQixFQUFFLEtBQUs7SUFFMUJDLG9CQUFvQixFQUFFLFNBQUFBLENBQVVDLEtBQWMsRUFBRUMsVUFBeUMsRUFBUTtNQUNoRyxNQUFNQyxJQUFJLEdBQUdDLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDSixLQUFLLENBQUM7TUFDN0MsTUFBTUssbUJBQW1CLEdBQUdMLEtBQUssQ0FBQ00saUJBQWlCLENBQUMsQ0FBQztNQUNyRCxJQUFJQyxzQkFBK0I7O01BRW5DO01BQ0EsTUFBTUMsWUFBWSxHQUFJSCxtQkFBbUIsRUFBY0ksVUFBVSxDQUFDLENBQUM7TUFFbkUsSUFBSUQsWUFBWSxDQUFDRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtRQUMvRDtRQUNBSCxzQkFBc0IsR0FBR0YsbUJBQThCO01BQ3hELENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQUUsc0JBQXNCLEdBQUdMLElBQUksQ0FBQ0ksaUJBQWlCLENBQUMsQ0FBQztNQUNsRDtNQUNBLE1BQU1LLFlBQVksR0FBR2Ysa0JBQWtCLENBQUNnQixzQkFBc0IsQ0FBQ1gsVUFBVSxDQUFDO01BQzFFLE1BQU1ZLFdBQVcsR0FBR2IsS0FBSyxDQUFDVSxHQUFHLENBQVcsa0JBQWtCLENBQUMsSUFBSVYsS0FBSyxDQUFDYyxZQUFZLENBQUMsQ0FBQztNQUNuRjtNQUNBLE1BQU1DLFFBQVEsR0FBR0MsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQ2pCLEtBQUssQ0FBQ00saUJBQWlCLENBQUMsQ0FBWSxDQUFDO01BQ3hGLE1BQU1Z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
@@ -3,36 +3,40 @@ import type { EnhanceWithUI5 } from "sap/fe/base/ClassSupport";
3
3
  import CommonUtils from "sap/fe/core/CommonUtils";
4
4
  import type ExtensionAPI from "sap/fe/core/ExtensionAPI";
5
5
  import type PageController from "sap/fe/core/PageController";
6
- import type { UserActivity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
7
- import { Activity, getActivityKeyFromPath } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
6
+ import { Activity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
8
7
  import draft from "sap/fe/core/controllerextensions/editFlow/draft";
9
8
  import KeepAliveHelper from "sap/fe/core/helpers/KeepAliveHelper";
10
9
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
11
- import ResourceModelHelper, { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
10
+ import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
12
11
  import type TextLink from "sap/fe/macros/controls/TextLink";
13
12
  import type { LinkDelegatePayload } from "sap/fe/macros/quickView/QuickViewDelegate";
14
- import type Avatar from "sap/m/Avatar";
15
13
  import type { Button$PressEvent } from "sap/m/Button";
14
+
15
+ import type CheckBox from "sap/m/CheckBox";
16
+ import type { CheckBox$SelectEventParameters } from "sap/m/CheckBox";
16
17
  import type { $IllustratedMessageSettings } from "sap/m/IllustratedMessage";
17
18
  import IllustratedMessage from "sap/m/IllustratedMessage";
19
+
20
+ import type { HiddenDraft } from "sap/fe/core/converters/ManifestSettings";
18
21
  import IllustratedMessageSize from "sap/m/IllustratedMessageSize";
19
22
  import IllustratedMessageType from "sap/m/IllustratedMessageType";
20
- import Label from "sap/m/Label";
23
+ import type InputBase from "sap/m/InputBase";
24
+ import type { InputBase$ChangeEventParameters } from "sap/m/InputBase";
21
25
  import type Link from "sap/m/Link";
22
26
  import MessageBox from "sap/m/MessageBox";
23
27
  import type ObjectIdentifier from "sap/m/ObjectIdentifier";
28
+ import type RatingIndicator from "sap/m/RatingIndicator";
29
+ import type { RatingIndicator$ChangeEventParameters } from "sap/m/RatingIndicator";
24
30
  import type { $ResponsivePopoverSettings } from "sap/m/ResponsivePopover";
25
31
  import ResponsivePopover from "sap/m/ResponsivePopover";
26
32
  import mobilelibrary from "sap/m/library";
27
33
  import Device from "sap/ui/Device";
28
- import type Event from "sap/ui/base/Event";
34
+ import type { default as Event, default as UI5Event } from "sap/ui/base/Event";
29
35
  import type Control from "sap/ui/core/Control";
30
- import Element from "sap/ui/core/Element";
36
+ import type Element from "sap/ui/core/Element";
31
37
  import IconPool from "sap/ui/core/IconPool";
32
- import type View from "sap/ui/core/mvc/View";
33
- import type { Field$ChangeEvent, default as mdcField } from "sap/ui/mdc/Field";
38
+ import type { Field$ChangeEvent, Field$ChangeEventParameters, default as mdcField } from "sap/ui/mdc/Field";
34
39
  import type MdcLink from "sap/ui/mdc/Link";
35
- import type CompositeBinding from "sap/ui/model/CompositeBinding";
36
40
  import type DataState from "sap/ui/model/DataState";
37
41
  import type PropertyBinding from "sap/ui/model/PropertyBinding";
38
42
  import type Context from "sap/ui/model/odata/v4/Context";
@@ -110,8 +114,17 @@ const FieldRuntimeHelper = {
110
114
  * @param oEvent The event object passed by the change event
111
115
  * @returns Field value and validity
112
116
  */
113
- getFieldStateOnChange: function (oEvent: Field$ChangeEvent & Event<{ isValid: boolean }, Control>): {
114
- field: mdcField;
117
+ getFieldStateOnChange: function (
118
+ oEvent: UI5Event<
119
+ | { value: string | number | boolean | undefined; isValid: boolean }
120
+ | CheckBox$SelectEventParameters
121
+ | InputBase$ChangeEventParameters
122
+ | Field$ChangeEventParameters
123
+ | RatingIndicator$ChangeEventParameters,
124
+ CheckBox | InputBase | mdcField | RatingIndicator | Field
125
+ >
126
+ ): {
127
+ field: Control;
115
128
  state: {
116
129
  fieldValue?: unknown;
117
130
  validity: boolean;
@@ -139,8 +152,10 @@ const FieldRuntimeHelper = {
139
152
  oSourceField = (oSourceField as EnhanceWithUI5<FieldWrapper>).getContentEdit()[0] as mdcField;
140
153
  }
141
154
 
142
- if (oSourceField.isA<mdcField>("sap.ui.mdc.Field")) {
143
- let bIsValid = oEvent.getParameter("valid") || oEvent.getParameter("isValid");
155
+ if (oSourceField?.isA<mdcField>("sap.ui.mdc.Field")) {
156
+ let bIsValid: boolean =
157
+ (oEvent as Field$ChangeEvent).getParameter("valid") ||
158
+ (oEvent as UI5Event<{ value: string | number | boolean | undefined; isValid: boolean }, mdcField>).getParameter("isValid");
144
159
  if (bIsValid === undefined) {
145
160
  if (oSourceField.getMaxConditions() === 1) {
146
161
  const oValueBindingInfo = oSourceField.getBindingInfo("value");
@@ -560,17 +575,16 @@ const FieldRuntimeHelper = {
560
575
 
561
576
  const draftRootPath = ModelHelper.getDraftRootPath(bindingContext) ?? bindingContext.getPath();
562
577
  let urlNavigation = await controller._routing.getHashForNavigation(bindingContext, navPath);
578
+ const isStickyMode = ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()),
579
+ isHiddenDraftEnabled =
580
+ (controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)?.enabled ||
581
+ false;
582
+
563
583
  const navigateFn = (): void => {
564
584
  controller
565
585
  .getAppComponent()
566
586
  .getRouterProxy()
567
- .navToHash(
568
- urlNavigation,
569
- true,
570
- false,
571
- false,
572
- !ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel())
573
- );
587
+ .navToHash(urlNavigation, true, false, false, isStickyMode || isHiddenDraftEnabled);
574
588
  };
575
589
 
576
590
  // To know if we're navigating on the same OP Entity
@@ -599,45 +613,6 @@ const FieldRuntimeHelper = {
599
613
  "onDataFieldWithNavigationPath"
600
614
  );
601
615
  }
602
- },
603
-
604
- /**
605
- * Event handler to create and show who is editing the field popover.
606
- * @param source The avatar which is next to the field locked
607
- * @param view Current view
608
- */
609
- showCollaborationEditUser: function (source: Avatar, view: View): void {
610
- const resourceModel = ResourceModelHelper.getResourceModel(view);
611
- let popover = Element.getElementById(`manageCollaborationDraft--editUser`) as ResponsivePopover;
612
-
613
- if (!popover) {
614
- popover = new ResponsivePopover("manageCollaborationDraft--editUser", {
615
- showHeader: false,
616
- placement: "Bottom"
617
- });
618
- popover.addStyleClass("sapUiContentPadding");
619
- view.addDependent(popover);
620
- }
621
-
622
- const bindingPath = (source.getBinding("initials") as CompositeBinding | undefined)
623
- ?.getBindings()
624
- .find((binding) => binding?.getPath()?.startsWith("/collaboration/activities"))
625
- .getPath();
626
- const activities = source.getBindingContext("internal")?.getObject(bindingPath);
627
-
628
- let editingActivity: UserActivity | undefined;
629
- if (activities && activities.length > 0) {
630
- editingActivity = activities.find((activity: UserActivity) => {
631
- return activity.key === getActivityKeyFromPath(source.getBindingContext()!.getPath());
632
- });
633
- }
634
- popover.destroyContent();
635
- popover.addContent(
636
- new Label({
637
- text: resourceModel.getText("C_COLLABORATIONAVATAR_USER_EDIT_FIELD", [`${editingActivity?.name}`])
638
- })
639
- );
640
- popover.openBy(source);
641
616
  }
642
617
  };
643
618