@sapui5/sap.fe.macros 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) 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 +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  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/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -50,7 +50,12 @@ import {
50
50
  getRelativePaths,
51
51
  getTargetObjectPath
52
52
  } from "sap/fe/core/templating/DataModelPathHelper";
53
- import { getAssociatedExternalIdProperty, getAssociatedExternalIdPropertyPath, isSemanticKey } from "sap/fe/core/templating/PropertyHelper";
53
+ import {
54
+ getAssociatedExternalIdProperty,
55
+ getAssociatedExternalIdPropertyPath,
56
+ isImageURL,
57
+ isSemanticKey
58
+ } from "sap/fe/core/templating/PropertyHelper";
54
59
  import { getPropertyWithSemanticObject, manageSemanticObjectsForCurrentUser } from "sap/fe/core/templating/SemanticObjectHelper";
55
60
  import type { DisplayMode } from "sap/fe/core/templating/UIFormatters";
56
61
  import * as UIFormatters from "sap/fe/core/templating/UIFormatters";
@@ -69,6 +74,10 @@ import {
69
74
  } from "sap/fe/macros/field/FieldTemplating";
70
75
  import additionalValueFormatter from "sap/fe/macros/internal/valuehelp/AdditionalValueFormatter";
71
76
  import SituationsIndicator from "sap/fe/macros/situations/SituationsIndicator";
77
+ import type { CheckBox$SelectEvent } from "sap/m/CheckBox";
78
+ import type { InputBase$ChangeEvent } from "sap/m/InputBase";
79
+ import type { RatingIndicator$ChangeEvent } from "sap/m/RatingIndicator";
80
+ import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
72
81
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
73
82
  import type Context from "sap/ui/model/Context";
74
83
  import type JSONModel from "sap/ui/model/json/JSONModel";
@@ -93,7 +102,7 @@ export type FieldBlockProperties = {
93
102
  _controlConfiguration: TemplateProcessorSettings;
94
103
  _settings: TemplateProcessorSettings;
95
104
  isDynamicInstantiation?: boolean;
96
- change: string | undefined | EventHandler;
105
+ change: undefined | EventHandler<CheckBox$SelectEvent | InputBase$ChangeEvent | Field$ChangeEvent | RatingIndicator$ChangeEvent>;
97
106
  metaPath: Context;
98
107
  contextPath: Context;
99
108
  isPublicField: boolean;
@@ -126,7 +135,6 @@ export type FieldBlockProperties = {
126
135
  situationsIndicatorPropertyPath: string;
127
136
  showErrorIndicator: boolean;
128
137
  dynamicSemanticObjects?: BindingToolkitExpression<string>[];
129
- collaborationExpression: BindingToolkitExpression<boolean>;
130
138
  dataSourcePath?: string;
131
139
  editStyleId?: string;
132
140
  enabledExpression: string | CompiledBindingToolkitExpression;
@@ -171,7 +179,7 @@ export type FieldBlockProperties = {
171
179
  contextPathContext: Context | undefined;
172
180
  fileUploaderVisible?: CompiledBindingToolkitExpression | boolean;
173
181
  eventHandlers: {
174
- change: EventHandler;
182
+ change: EventHandler<CheckBox$SelectEvent | InputBase$ChangeEvent | Field$ChangeEvent | RatingIndicator$ChangeEvent>;
175
183
  liveChange: EventHandler;
176
184
  validateFieldGroup: EventHandler;
177
185
  handleTypeMissmatch: EventHandler;
@@ -188,7 +196,6 @@ export type FieldBlockProperties = {
188
196
  onDataFieldWithNavigationPath: EventHandler;
189
197
  onDataFieldActionButton: EventHandler;
190
198
  onDataFieldWithIBN: EventHandler;
191
- showCollaborationEditUser: EventHandler;
192
199
  };
193
200
  } & Omit<Field, "metaPath" | "contextPath" | "change" | "visible">;
194
201
 
@@ -264,7 +271,9 @@ export function setUpField(
264
271
  viewDataModel
265
272
  );
266
273
  setUpDisplayStyle(resultField, resultField.convertedMetaPath, resultField.dataModelPath, internalModel, appComponent);
267
- setUpEditStyle(resultField, appComponent);
274
+ if (resultField.editMode !== "Display") {
275
+ setUpEditStyle(resultField, appComponent);
276
+ }
268
277
 
269
278
  resultField.valueState = setUpValueState(resultField);
270
279
  if (resultField.editStyle === "InputWithValueHelp") {
@@ -327,7 +336,6 @@ export function setUpField(
327
336
  linkPressed: (): void => {},
328
337
  displayAggregationDetails: (): void => {},
329
338
  onDataFieldWithNavigationPath: (): void => {},
330
- showCollaborationEditUser: (): void => {},
331
339
  onDataFieldActionButton: (): void => {},
332
340
  onDataFieldWithIBN: (): void => {}
333
341
  };
@@ -346,7 +354,6 @@ export function computeCollaborationProperties(field: FieldBlockProperties): voi
346
354
  field.dataModelPath
347
355
  );
348
356
  if (ModelHelper.isCollaborationDraftSupported(field.odataMetaModel) && field.editMode !== FieldEditMode.Display) {
349
- const collaborationEnabled = true;
350
357
  // Expressions needed for Collaboration Visualization
351
358
  const collaborationExpression = UIFormatters.getCollaborationExpression(
352
359
  field.dataModelPath,
@@ -361,8 +368,7 @@ export function computeCollaborationProperties(field: FieldBlockProperties): voi
361
368
  ifElse(and(UI.IsInactive, !!field.hasPropertyInsertRestrictions), "Display", field.editModeAsObject)
362
369
  )
363
370
  );
364
- field.collaborationEnabled = collaborationEnabled;
365
- field.collaborationExpression = collaborationExpression;
371
+ field.collaborationEnabled = true;
366
372
  field.editableExpression = editableExpression;
367
373
  field.computedEditMode = editMode;
368
374
  } else {
@@ -740,7 +746,7 @@ export function setUpDisplayStyle(
740
746
  resultField.displayStyle = "File";
741
747
  return resultField;
742
748
  }
743
- if (property.annotations?.UI?.IsImageURL) {
749
+ if (property.annotations?.UI?.IsImageURL && isImageURL(property)) {
744
750
  resultField.displayStyle = "Avatar";
745
751
  return resultField;
746
752
  }
@@ -131,8 +131,12 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
131
131
  }
132
132
  outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
133
133
  preserveDecimals: false,
134
- maxFractionDigits: numberOfFractionalDigits
134
+ maxFractionDigits: numberOfFractionalDigits,
135
+ minFractionDigits: numberOfFractionalDigits
135
136
  });
137
+ //we need to ignore the constraints otherwise the scale mess up the formatting by adding trailing zeros
138
+ // 1.234 with maxFractionDigits 2 and scale 4 will become 1.2300
139
+ outExpression.constraints = {};
136
140
  }
137
141
  return outExpression;
138
142
  };
@@ -226,4 +230,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
226
230
  _exports.buildExpressionForProgressIndicatorPercentValue = buildExpressionForProgressIndicatorPercentValue;
227
231
  return _exports;
228
232
  }, false);
229
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGRWYWx1ZUV4cHJlc3Npb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJ1bml0IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIlVuaXQiLCJJU09DdXJyZW5jeSIsImdldFRleHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImlzQ3VycmVuY3kiLCJyZXF1ZXN0Q3VzdG9tVW5pdHMiLCJwYXRoSW5Nb2RlbCIsInRhcmdldFR5cGUiLCJtb2RlIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0IiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiIsIm9Db250ZXh0IiwibVNhbXBsZVNpemUiLCJmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSIsIkFubm90YXRpb25IZWxwZXIiLCJ2YWx1ZSIsImNvbnRleHQiLCJpU2FtcGxlU2l6ZVZhbHVlIiwic1N1YlRpdGxlTGFiZWwiLCJTdHJpbmciLCJnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0Iiwib0RhdGFQb2ludCIsInJlc3VsdCIsIlNhbXBsZVNpemUiLCJEZXNjcmlwdGlvbiIsInNNb2RlbFZhbHVlIiwicmVxdWlyZXNJQ29udGV4dCIsImJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwiQ29tbW9uIiwiVGV4dCIsIm9UZXh0RXhwcmVzc2lvbiIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwicGFyYW1ldGVycyIsIiQkbm9QYXRjaCIsImdldEZsb2F0Rm9ybWF0Iiwib3V0RXhwcmVzc2lvbiIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImZvcm1hdE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwcmVzZXJ2ZURlY2ltYWxzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJnZXRWYWx1ZUZvcm1hdHRlZCIsIm9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJzUHJvcGVydHlUeXBlIiwic051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInBhdGgiLCJpbmNsdWRlcyIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJ0eXBlIiwiRURNX1RZUEVfTUFQUElORyIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJiSGlkZU1lYXN1cmUiLCJvRGF0YVBvaW50VmFsdWUiLCJwcm9wZXJ0eVR5cGUiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwib0Rlc2NyaXB0aW9uIiwib0Zvcm1hdHRlZFZhbHVlIiwic0Rpc3BsYXlNb2RlIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImZvcm1hdFdpdGhCcmFja2V0cyIsIlRpbWV6b25lIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsIklzVGltZXpvbmUiLCJnZXRCaW5kaW5nRm9yVGltZXpvbmUiLCJVSSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJnZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdCIsIl9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm1lYXN1cmVEaXNwbGF5TW9kZSIsInNob3dPbmx5VW5pdERlY2ltYWxzIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVkVmFsdWUiLCJoaWRlTWVhc3VyZSIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJzaG93TWVhc3VyZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiY29tcHV0ZVBlcmNlbnRhZ2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNTdGF0aWNQZXJjZW50VW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGVUaW1lU3R5bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7XG5cdGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0LFxuXHRnZXRCaW5kaW5nRm9yVGltZXpvbmUsXG5cdGdldEJpbmRpbmdXaXRoVGltZXpvbmUsXG5cdGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3ksXG5cdGdldERpc3BsYXlNb2RlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuXG5jb25zdCB0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPSBbXCJFZG0uU2luZ2xlXCIsIFwiRWRtLkRvdWJsZVwiLCBcIkVkbS5EZWNpbWFsXCJdO1xuXG5leHBvcnQgdHlwZSBEYXRhUG9pbnRGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdG1lYXN1cmVEaXNwbGF5TW9kZTogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZTogc3RyaW5nO1xuXHRkYXRlVGltZVN0eWxlOiBEYXRlVGltZVN0eWxlO1xuXHRkYXRlVGltZVBhdHRlcm46IHN0cmluZztcblx0c2hvd09ubHlVbml0RGVjaW1hbHM6IGJvb2xlYW47XG59PjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgdmFsdWUgb2YgYSBwcm9ncmVzcyBpbmRpY2F0b3IuXG4gKiBBIHByb2dyZXNzIGluZGljYXRvciBjYW4gaGF2ZSBhIHN0YXRpYyB0YXJnZXQsIGEgcGVyY2VudGFnZSwgb3IgYW5vdGhlciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvRGF0YU1vZGVsUGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHJlbGF0aXZlTG9jYXRpb24gVGhlIHJlbGF0aXZlIGxvY2F0aW9uLCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSB0YXJnZXQgdmFsdWVcbiAqL1xuY29uc3QgZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbiA9IChcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQsXG5cdHJlbGF0aXZlTG9jYXRpb246IHN0cmluZ1tdXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdHJldHVybiBvRGF0YU1vZGVsUGF0aD8uVGFyZ2V0VmFsdWUgPyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0RhdGFNb2RlbFBhdGguVGFyZ2V0VmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pIDogdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn07XG5cbmNvbnN0IG9SZXNvdXJjZU1vZGVsID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXG4vKipcbiAqIFRoaXMgZ2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvci5cbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0Y29uc3QgZmllbGRWYWx1ZSA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uVmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGZpZWxkVmFsdWVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHRhcmdldEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRyZWxhdGl2ZUxvY2F0aW9uXG5cdCk7XG5cblx0aWYgKGZpZWxkVmFsdWVFeHByZXNzaW9uICYmIHRhcmdldEV4cHJlc3Npb24pIHtcblx0XHRsZXQgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlO1xuXHRcdGlmICghaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3QuJHRhcmdldDtcblx0XHR9XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cblx0XHRpZiAoIXVuaXQpIHtcblx0XHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT01NT05fUFJPR1JFU1NfSU5ESUNBVE9SX0RJU1BMQVlfVkFMVUVfTk9fVU9NXCIsIFtcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbih0YXJnZXRFeHByZXNzaW9uKVxuXHRcdFx0XSk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZSB1bml0IGlzbid0IGEgcGF0aCwgd2UgY2hlY2sgZm9yIGEgJSBzaWduIGFzIGl0IGlzIGEgc3BlY2lhbCBjYXNlLlxuXHRcdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChmaWVsZFZhbHVlPy4kdGFyZ2V0KSkge1xuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWVFeHByZXNzaW9uKX0gJWA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0XHRjb25zdCBpc0N1cnJlbmN5ID0gdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgPyB0cnVlIDogZmFsc2U7XG5cdFx0bGV0IHJlcXVlc3RDdXN0b21Vbml0cztcblx0XHRpZiAoaXNDdXJyZW5jeSkge1xuXHRcdFx0cmVxdWVzdEN1c3RvbVVuaXRzID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXF1ZXN0Q3VzdG9tVW5pdHMgPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdFVuaXRzT2ZNZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXF1ZXN0Q3VzdG9tVW5pdHMudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0cmVxdWVzdEN1c3RvbVVuaXRzLm1vZGUgPSBcIk9uZVRpbWVcIjtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0W2ZpZWxkVmFsdWVFeHByZXNzaW9uLCB0YXJnZXRFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb24sIGlzQ3VycmVuY3ksIHJlcXVlc3RDdXN0b21Vbml0c10sXG5cdFx0XHRcdHZhbHVlRm9ybWF0dGVycy5mb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiA9IChvQ29udGV4dDogQ29udGV4dCwgbVNhbXBsZVNpemU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAobVNhbXBsZVNpemUpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmF0aW5nSW5kaWNhdG9yU3ViVGl0bGUoQW5ub3RhdGlvbkhlbHBlci52YWx1ZShtU2FtcGxlU2l6ZSwgeyBjb250ZXh0OiBvQ29udGV4dCB9KSBhcyB1bmtub3duIGFzIG51bWJlcik7XG5cdH1cbn07XG4vLyByZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgUmF0aW5nIEluZGljYXRvciBTdWJ0aXRsZSAoZS5nLiAnNyByZXZpZXdzJylcbmNvbnN0IGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlID0gKGlTYW1wbGVTaXplVmFsdWU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmIChpU2FtcGxlU2l6ZVZhbHVlKSB7XG5cdFx0Y29uc3Qgc1N1YlRpdGxlTGFiZWwgPVxuXHRcdFx0aVNhbXBsZVNpemVWYWx1ZSA+IDFcblx0XHRcdFx0PyBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFX0xBQkVMX1BMVVJBTFwiKVxuXHRcdFx0XHQ6IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVfTEFCRUxcIik7XG5cdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVcIiwgW1N0cmluZyhpU2FtcGxlU2l6ZVZhbHVlKSwgc1N1YlRpdGxlTGFiZWxdKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBoZWFkZXIgdGV4dCBvZiByYXRpbmcgaW5kaWNhdG9yLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgaW50ZXJmYWNlXG4gKiBAcGFyYW0gb0RhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBiaW5kaW5nIGZvciByYXRpbmcgaW5kaWNhdG9yIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQgPSAob0NvbnRleHQ6IENvbnRleHQsIG9EYXRhUG9pbnQ6IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgcmVzdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChvRGF0YVBvaW50ICYmIG9EYXRhUG9pbnQuU2FtcGxlU2l6ZSkge1xuXHRcdHJlc3VsdCA9IGJ1aWxkUmF0aW5nSW5kaWNhdG9yU3VidGl0bGVFeHByZXNzaW9uKG9Db250ZXh0LCBvRGF0YVBvaW50LlNhbXBsZVNpemUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnQgJiYgb0RhdGFQb2ludC5EZXNjcmlwdGlvbikge1xuXHRcdGNvbnN0IHNNb2RlbFZhbHVlID0gQW5ub3RhdGlvbkhlbHBlci52YWx1ZShvRGF0YVBvaW50LkRlc2NyaXB0aW9uLCB7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXHRcdHJlc3VsdCA9IFwiJHtwYXRoOlwiICsgc01vZGVsVmFsdWUgKyBcIn1cIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbmdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gKGZpZWxkVmFsdWU6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhmaWVsZFZhbHVlKTtcblx0aWYgKGZpZWxkVmFsdWU/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkge1xuXHRcdGNvbnN0IG9UZXh0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlPy50YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9UZXh0RXhwcmVzc2lvbikpIHtcblx0XHRcdG9UZXh0RXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0geyAkJG5vUGF0Y2g6IHRydWUgfTtcblx0XHR9XG5cdFx0cmV0dXJuIG9UZXh0RXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0RmxvYXRGb3JtYXQgPSAoXG5cdG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IE51bWJlciB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHQvLyBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgaXMgb25seSBkZWZpbmVkIGluIGdldFZhbHVlRm9ybWF0dGVkIHdoZW4gTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGlzIGRlZmluZWQuXG5cdC8vIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBpbnN0YW5jZSB0aGUgcHJlc2VydmVEZWNpbWFscyBwYXJhbWV0ZXIgYmVjYXVzZSBvZiBhIGNoYW5nZSBNREMgc2lkZVxuXHRpZiAobnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cHJlc2VydmVEZWNpbWFsczogZmFsc2UsXG5cdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVGb3JtYXR0ZWQgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZFZhbHVlOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0c1Byb3BlcnR5VHlwZTogc3RyaW5nLFxuXHRzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzOiBOdW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0bGV0IG91dEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gIWZpZWxkVmFsdWU/LnBhdGg/LmluY2x1ZGVzKFwiL1wiKSA/IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCkgOiBbXTtcblx0b3V0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKG9Qcm9wZXJ0eURlZmluaXRpb24gJiYgc1Byb3BlcnR5VHlwZSAmJiBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvdXRFeHByZXNzaW9uKSkge1xuXHRcdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgb3V0RXhwcmVzc2lvbik7XG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gRURNX1RZUEVfTUFQUElOR1tzUHJvcGVydHlUeXBlXT8udHlwZTtcblx0XHRpZiAodHlwZXNTdXBwb3J0aW5nTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHQvLyBmb3IgdGhlIGxpc3RSZXBvcnQsIHRoZSBkZWNpbWFsL3NpbmdsZS9kb3VibGUgZmllbGRzIGFyZSBmb3JtYXR0ZWQgYnkgcmV0dXJuaW5nIGEgc3RyaW5nXG5cdFx0XHQvLyBmb3IgdGhlIGZhY2V0cyBvZiB0aGUgT1AsIHRoZSBkZWNpbWFsL3NpbmdsZS9kb3VibGUgZmllbGRzIGFyZSBmb3JtYXR0ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSwgc28gd2UgbWFuYWdlIGFsbCB0aGUgY2FzZXNcblx0XHRcdG91dEV4cHJlc3Npb24gPSBnZXRGbG9hdEZvcm1hdChvdXRFeHByZXNzaW9uLCBzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEZpZWxkQmluZGluZ0V4cHJlc3Npb24gPSAoXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+LFxuXHRkYXRhUG9pbnRGb3JtYXRPcHRpb25zOiBEYXRhUG9pbnRGb3JtYXRPcHRpb25zLFxuXHRiSGlkZU1lYXN1cmU6IGJvb2xlYW5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0Y29uc3Qgb0RhdGFQb2ludCA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0Y29uc3Qgb0RhdGFQb2ludFZhbHVlID0gb0RhdGFQb2ludD8uVmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgcHJvcGVydHlUeXBlID0gb0RhdGFQb2ludFZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRsZXQgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXG5cdGlmICh0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMuaW5jbHVkZXMocHJvcGVydHlUeXBlKSAmJiBvRGF0YVBvaW50Py5WYWx1ZUZvcm1hdCkge1xuXHRcdGlmIChvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gb0RhdGFQb2ludC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob0RhdGFNb2RlbFBhdGgsIG9EYXRhUG9pbnRWYWx1ZS5wYXRoKTtcblx0Y29uc3Qgb0Rlc2NyaXB0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA/IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvRm9ybWF0dGVkVmFsdWUgPSBnZXRWYWx1ZUZvcm1hdHRlZChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvRGF0YVBvaW50VmFsdWUsIHByb3BlcnR5VHlwZSwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0Y29uc3Qgc0Rpc3BsYXlNb2RlID0gb0Rlc2NyaXB0aW9uID8gZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uZGlzcGxheU1vZGUgfHwgZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiBcIlZhbHVlXCI7XG5cdGxldCBvQmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKHNEaXNwbGF5TW9kZSkge1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gb0Rlc2NyaXB0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Zvcm1hdHRlZFZhbHVlLCBvRGVzY3JpcHRpb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoW29EZXNjcmlwdGlvbiwgb0Zvcm1hdHRlZFZhbHVlXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUgJiZcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdXaXRoVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ0ZvclRpbWV6b25lKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Gb3JtYXR0ZWRWYWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlIHx8XG5cdFx0XHRcdGRhdGFQb2ludEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVyblxuXHRcdFx0KSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Gb3JtYXR0ZWRWYWx1ZSwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0XHRvRm9ybWF0dGVkVmFsdWUsXG5cdFx0XHRcdFx0YkhpZGVNZWFzdXJlIHx8IGRhdGFQb2ludEZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJIaWRkZW5cIixcblx0XHRcdFx0XHQhIWRhdGFQb2ludEZvcm1hdE9wdGlvbnM/LnNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgX2NvbXB1dGVCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZWRWYWx1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGhpZGVNZWFzdXJlOiBib29sZWFuLFxuXHRzaG93T25seVVuaXREZWNpbWFsczogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRpZiAoXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8XG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeVxuXHQpIHtcblx0XHRpZiAoaGlkZU1lYXN1cmUgJiYgaGFzU3RhdGljUGVyY2VudFVuaXQocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGhpZGVNZWFzdXJlID8geyBzaG93TWVhc3VyZTogZmFsc2UgfSA6IHVuZGVmaW5lZCxcblx0XHRcdHRydWUsXG5cdFx0XHRzaG93T25seVVuaXREZWNpbWFsc1xuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlIG9mIFByb2dyZXNzIEluZGljYXRvci4gQmFzaWMgZm9ybXVsYSBpcyBWYWx1ZS9UYXJnZXQgKiAxMDAuXG4gKiBAcGFyYW0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB2YWx1ZSwgd2hpY2ggaXMgc2hvd24gaW4gdGhlIHByb2dyZXNzIGluZGljYXRvciBiYXNlZCBvbiB0aGUgZm9ybXVsYSBnaXZlbiBhYm92ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBmaWVsZFZhbHVlID0gKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uVmFsdWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSB8fCBcIlwiO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgZmllbGRWYWx1ZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHRhcmdldEV4cHJlc3Npb24gPSBnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gZmllbGRWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRpZiAodW5pdCkge1xuXHRcdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChbZmllbGRWYWx1ZUV4cHJlc3Npb24sIHRhcmdldEV4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSlcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbZmllbGRWYWx1ZUV4cHJlc3Npb24sIHRhcmdldEV4cHJlc3Npb24sIFwiXCJdLCB2YWx1ZUZvcm1hdHRlcnMuY29tcHV0ZVBlcmNlbnRhZ2UpKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4QkEsTUFBTUEsdUNBQXVDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztFQVUzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLDRCQUE0QixHQUFHQSxDQUNwQ0MsY0FBeUMsRUFDekNDLGdCQUEwQixLQUNZO0lBQ3RDLE9BQU9ELGNBQWMsRUFBRUUsV0FBVyxHQUFHQywyQkFBMkIsQ0FBQ0gsY0FBYyxDQUFDRSxXQUFXLEVBQUVELGdCQUFnQixDQUFDLEdBQUdHLHNCQUFzQjtFQUN4SSxDQUFDO0VBRUQsTUFBTUMsY0FBYyxHQUFHQyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGVBQWUsQ0FBRTs7RUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1DLCtDQUErQyxHQUMzREMsNEJBQWdFLElBQzFCO0lBQ3RDLE1BQU1DLFVBQVUsR0FBR0QsNEJBQTRCLEVBQUVFLFlBQVksRUFBRUMsS0FBSyxJQUFJLEVBQUU7SUFDMUUsTUFBTVgsZ0JBQWdCLEdBQUdZLGdCQUFnQixDQUFDSiw0QkFBNEIsQ0FBQztJQUN2RSxNQUFNSyxvQkFBNkQsR0FBR1gsMkJBQTJCLENBQUNPLFVBQVUsRUFBRVQsZ0JBQWdCLENBQUM7SUFDL0gs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
233
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGRWYWx1ZUV4cHJlc3Npb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJ1bml0IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIlVuaXQiLCJJU09DdXJyZW5jeSIsImdldFRleHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImlzQ3VycmVuY3kiLCJyZXF1ZXN0Q3VzdG9tVW5pdHMiLCJwYXRoSW5Nb2RlbCIsInRhcmdldFR5cGUiLCJtb2RlIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0IiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiIsIm9Db250ZXh0IiwibVNhbXBsZVNpemUiLCJmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSIsIkFubm90YXRpb25IZWxwZXIiLCJ2YWx1ZSIsImNvbnRleHQiLCJpU2FtcGxlU2l6ZVZhbHVlIiwic1N1YlRpdGxlTGFiZWwiLCJTdHJpbmciLCJnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0Iiwib0RhdGFQb2ludCIsInJlc3VsdCIsIlNhbXBsZVNpemUiLCJEZXNjcmlwdGlvbiIsInNNb2RlbFZhbHVlIiwicmVxdWlyZXNJQ29udGV4dCIsImJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwiQ29tbW9uIiwiVGV4dCIsIm9UZXh0RXhwcmVzc2lvbiIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwicGFyYW1ldGVycyIsIiQkbm9QYXRjaCIsImdldEZsb2F0Rm9ybWF0Iiwib3V0RXhwcmVzc2lvbiIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImZvcm1hdE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwcmVzZXJ2ZURlY2ltYWxzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJtaW5GcmFjdGlvbkRpZ2l0cyIsImNvbnN0cmFpbnRzIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwic1Byb3BlcnR5VHlwZSIsInNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJwYXRoIiwiaW5jbHVkZXMiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJidWlsZEZpZWxkQmluZGluZ0V4cHJlc3Npb24iLCJkYXRhUG9pbnRGb3JtYXRPcHRpb25zIiwiYkhpZGVNZWFzdXJlIiwib0RhdGFQb2ludFZhbHVlIiwicHJvcGVydHlUeXBlIiwiVmFsdWVGb3JtYXQiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm9EZXNjcmlwdGlvbiIsIm9Gb3JtYXR0ZWRWYWx1ZSIsInNEaXNwbGF5TW9kZSIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJUaW1lem9uZSIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJJc1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwiVUkiLCJEYXRlVGltZVN0eWxlIiwiZGF0ZVRpbWVQYXR0ZXJuIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlZFZhbHVlIiwiaGlkZU1lYXN1cmUiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd01lYXN1cmUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvclBlcmNlbnRWYWx1ZSIsImNvbXB1dGVQZXJjZW50YWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhUG9pbnRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQge1xuXHRnZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdCxcblx0Z2V0QmluZGluZ0ZvclRpbWV6b25lLFxuXHRnZXRCaW5kaW5nV2l0aFRpbWV6b25lLFxuXHRnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5LFxuXHRnZXREaXNwbGF5TW9kZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcblxuY29uc3QgdHlwZXNTdXBwb3J0aW5nTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gW1wiRWRtLlNpbmdsZVwiLCBcIkVkbS5Eb3VibGVcIiwgXCJFZG0uRGVjaW1hbFwiXTtcblxuZXhwb3J0IHR5cGUgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZztcblx0ZGlzcGxheU1vZGU6IHN0cmluZztcblx0ZGF0ZVRpbWVTdHlsZTogRGF0ZVRpbWVTdHlsZTtcblx0ZGF0ZVRpbWVQYXR0ZXJuOiBzdHJpbmc7XG5cdHNob3dPbmx5VW5pdERlY2ltYWxzOiBib29sZWFuO1xufT47XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IHZhbHVlIG9mIGEgcHJvZ3Jlc3MgaW5kaWNhdG9yLlxuICogQSBwcm9ncmVzcyBpbmRpY2F0b3IgY2FuIGhhdmUgYSBzdGF0aWMgdGFyZ2V0LCBhIHBlcmNlbnRhZ2UsIG9yIGFub3RoZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSByZWxhdGl2ZUxvY2F0aW9uIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiwgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgdGFyZ2V0IHZhbHVlXG4gKi9cbmNvbnN0IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24gPSAoXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRyZWxhdGl2ZUxvY2F0aW9uOiBzdHJpbmdbXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRyZXR1cm4gb0RhdGFNb2RlbFBhdGg/LlRhcmdldFZhbHVlID8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9EYXRhTW9kZWxQYXRoLlRhcmdldFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59O1xuXG5jb25zdCBvUmVzb3VyY2VNb2RlbCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblxuLyoqXG4gKiBUaGlzIGdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuXG4gKiBAcGFyYW0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb2dyZXNzIGluZGljYXRvciB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yRGlzcGxheVZhbHVlID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+ID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCB0YXJnZXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0cmVsYXRpdmVMb2NhdGlvblxuXHQpO1xuXG5cdGlmIChmaWVsZFZhbHVlRXhwcmVzc2lvbiAmJiB0YXJnZXRFeHByZXNzaW9uKSB7XG5cdFx0bGV0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZTtcblx0XHRpZiAoIWlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0LiR0YXJnZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IHVuaXQgPSB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXG5cdFx0aWYgKCF1bml0KSB7XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09NTU9OX1BST0dSRVNTX0lORElDQVRPUl9ESVNQTEFZX1ZBTFVFX05PX1VPTVwiLCBbXG5cdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWVFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24odGFyZ2V0RXhwcmVzc2lvbilcblx0XHRcdF0pO1xuXHRcdH1cblx0XHQvLyBJZiB0aGUgdW5pdCBpc24ndCBhIHBhdGgsIHdlIGNoZWNrIGZvciBhICUgc2lnbiBhcyBpdCBpcyBhIHNwZWNpYWwgY2FzZS5cblx0XHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQoZmllbGRWYWx1ZT8uJHRhcmdldCkpIHtcblx0XHRcdHJldHVybiBgJHtjb21waWxlRXhwcmVzc2lvbihmaWVsZFZhbHVlRXhwcmVzc2lvbil9ICVgO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdFx0Y29uc3QgaXNDdXJyZW5jeSA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGxldCByZXF1ZXN0Q3VzdG9tVW5pdHM7XG5cdFx0aWYgKGlzQ3VycmVuY3kpIHtcblx0XHRcdHJlcXVlc3RDdXN0b21Vbml0cyA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVxdWVzdEN1c3RvbVVuaXRzID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR9XG5cdFx0cmVxdWVzdEN1c3RvbVVuaXRzLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHJlcXVlc3RDdXN0b21Vbml0cy5tb2RlID0gXCJPbmVUaW1lXCI7XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uLCBpc0N1cnJlbmN5LCByZXF1ZXN0Q3VzdG9tVW5pdHNdLFxuXHRcdFx0XHR2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0XG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgYnVpbGRSYXRpbmdJbmRpY2F0b3JTdWJ0aXRsZUV4cHJlc3Npb24gPSAob0NvbnRleHQ6IENvbnRleHQsIG1TYW1wbGVTaXplOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKG1TYW1wbGVTaXplKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlKEFubm90YXRpb25IZWxwZXIudmFsdWUobVNhbXBsZVNpemUsIHsgY29udGV4dDogb0NvbnRleHQgfSkgYXMgdW5rbm93biBhcyBudW1iZXIpO1xuXHR9XG59O1xuLy8gcmV0dXJucyB0aGUgdGV4dCBmb3IgdGhlIFJhdGluZyBJbmRpY2F0b3IgU3VidGl0bGUgKGUuZy4gJzcgcmV2aWV3cycpXG5jb25zdCBmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSA9IChpU2FtcGxlU2l6ZVZhbHVlOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoaVNhbXBsZVNpemVWYWx1ZSkge1xuXHRcdGNvbnN0IHNTdWJUaXRsZUxhYmVsID1cblx0XHRcdGlTYW1wbGVTaXplVmFsdWUgPiAxXG5cdFx0XHRcdD8gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfUkFUSU5HX0lORElDQVRPUl9TVUJUSVRMRV9MQUJFTF9QTFVSQUxcIilcblx0XHRcdFx0OiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFX0xBQkVMXCIpO1xuXHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFXCIsIFtTdHJpbmcoaVNhbXBsZVNpemVWYWx1ZSksIHNTdWJUaXRsZUxhYmVsXSk7XG5cdH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgaGVhZGVyIHRleHQgb2YgcmF0aW5nIGluZGljYXRvci5cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIGludGVyZmFjZVxuICogQHBhcmFtIG9EYXRhUG9pbnQgRGF0YSBwb2ludCBvYmplY3RcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgcmF0aW5nIGluZGljYXRvciB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0ID0gKG9Db250ZXh0OiBDb250ZXh0LCBvRGF0YVBvaW50OiBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0bGV0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAob0RhdGFQb2ludCAmJiBvRGF0YVBvaW50LlNhbXBsZVNpemUpIHtcblx0XHRyZXN1bHQgPSBidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbihvQ29udGV4dCwgb0RhdGFQb2ludC5TYW1wbGVTaXplKTtcblx0fSBlbHNlIGlmIChvRGF0YVBvaW50ICYmIG9EYXRhUG9pbnQuRGVzY3JpcHRpb24pIHtcblx0XHRjb25zdCBzTW9kZWxWYWx1ZSA9IEFubm90YXRpb25IZWxwZXIudmFsdWUob0RhdGFQb2ludC5EZXNjcmlwdGlvbiwgeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRyZXN1bHQgPSBcIiR7cGF0aDpcIiArIHNNb2RlbFZhbHVlICsgXCJ9XCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5nZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5jb25zdCBidWlsZEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IChmaWVsZFZhbHVlOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZmllbGRWYWx1ZSk7XG5cdGlmIChmaWVsZFZhbHVlPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpIHtcblx0XHRjb25zdCBvVGV4dEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZT8udGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvVGV4dEV4cHJlc3Npb24pKSB7XG5cdFx0XHRvVGV4dEV4cHJlc3Npb24ucGFyYW1ldGVycyA9IHsgJCRub1BhdGNoOiB0cnVlIH07XG5cdFx0fVxuXHRcdHJldHVybiBvVGV4dEV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldEZsb2F0Rm9ybWF0ID0gKFxuXHRvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPixcblx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzOiBOdW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0Ly8gbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGlzIG9ubHkgZGVmaW5lZCBpbiBnZXRWYWx1ZUZvcm1hdHRlZCB3aGVuIE51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyBpcyBkZWZpbmVkLlxuXHQvLyBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gaW5zdGFuY2UgdGhlIHByZXNlcnZlRGVjaW1hbHMgcGFyYW1ldGVyIGJlY2F1c2Ugb2YgYSBjaGFuZ2UgTURDIHNpZGVcblx0aWYgKG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdGlmICghb3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHByZXNlcnZlRGVjaW1hbHM6IGZhbHNlLFxuXHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyxcblx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHNcblx0XHR9KTtcblx0XHQvL3dlIG5lZWQgdG8gaWdub3JlIHRoZSBjb25zdHJhaW50cyBvdGhlcndpc2UgdGhlIHNjYWxlIG1lc3MgdXAgdGhlIGZvcm1hdHRpbmcgYnkgYWRkaW5nIHRyYWlsaW5nIHplcm9zXG5cdFx0Ly8gMS4yMzQgd2l0aCBtYXhGcmFjdGlvbkRpZ2l0cyAyIGFuZCBzY2FsZSA0IHdpbGwgYmVjb21lIDEuMjMwMFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZUZvcm1hdHRlZCA9IChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGZpZWxkVmFsdWU6IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRzUHJvcGVydHlUeXBlOiBzdHJpbmcsXG5cdHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IE51bWJlciB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSAhZmllbGRWYWx1ZT8ucGF0aD8uaW5jbHVkZXMoXCIvXCIpID8gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKSA6IFtdO1xuXHRvdXRFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRpZiAob1Byb3BlcnR5RGVmaW5pdGlvbiAmJiBzUHJvcGVydHlUeXBlICYmIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG91dEV4cHJlc3Npb24pKSB7XG5cdFx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBvdXRFeHByZXNzaW9uKTtcblx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HW3NQcm9wZXJ0eVR5cGVdPy50eXBlO1xuXHRcdGlmICh0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMuaW5jbHVkZXMoc1Byb3BlcnR5VHlwZSkpIHtcblx0XHRcdC8vIGZvciB0aGUgbGlzdFJlcG9ydCwgdGhlIGRlY2ltYWwvc2luZ2xlL2RvdWJsZSBmaWVsZHMgYXJlIGZvcm1hdHRlZCBieSByZXR1cm5pbmcgYSBzdHJpbmdcblx0XHRcdC8vIGZvciB0aGUgZmFjZXRzIG9mIHRoZSBPUCwgdGhlIGRlY2ltYWwvc2luZ2xlL2RvdWJsZSBmaWVsZHMgYXJlIGZvcm1hdHRlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlLCBzbyB3ZSBtYW5hZ2UgYWxsIHRoZSBjYXNlc1xuXHRcdFx0b3V0RXhwcmVzc2lvbiA9IGdldEZsb2F0Rm9ybWF0KG91dEV4cHJlc3Npb24sIHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvdXRFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiA9IChcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4sXG5cdGRhdGFQb2ludEZvcm1hdE9wdGlvbnM6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMsXG5cdGJIaWRlTWVhc3VyZTogYm9vbGVhblxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCBvRGF0YVBvaW50ID0gb0RhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBvRGF0YVBvaW50VmFsdWUgPSBvRGF0YVBvaW50Py5WYWx1ZSB8fCBcIlwiO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBvRGF0YVBvaW50VmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cblx0aWYgKHR5cGVzU3VwcG9ydGluZ051bWJlck9mRnJhY3Rpb25hbERpZ2l0cy5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpICYmIG9EYXRhUG9pbnQ/LlZhbHVlRm9ybWF0KSB7XG5cdFx0aWYgKG9EYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPSBvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblx0XHR9XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihvRGF0YU1vZGVsUGF0aCwgb0RhdGFQb2ludFZhbHVlLnBhdGgpO1xuXHRjb25zdCBvRGVzY3JpcHRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID8gYnVpbGRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Gb3JtYXR0ZWRWYWx1ZSA9IGdldFZhbHVlRm9ybWF0dGVkKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9EYXRhUG9pbnRWYWx1ZSwgcHJvcGVydHlUeXBlLCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBvRGVzY3JpcHRpb24gPyBkYXRhUG9pbnRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZSB8fCBnZXREaXNwbGF5TW9kZShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKSA6IFwiVmFsdWVcIjtcblx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoc0Rpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBvRGVzY3JpcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtvRm9ybWF0dGVkVmFsdWUsIG9EZXNjcmlwdGlvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Rlc2NyaXB0aW9uLCBvRm9ybWF0dGVkVmFsdWVdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSAmJlxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ1dpdGhUaW1lem9uZShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvRm9ybWF0dGVkVmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNUaW1lem9uZSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBnZXRCaW5kaW5nRm9yVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVQYXR0ZXJuXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlLCBkYXRhUG9pbnRGb3JtYXRPcHRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IF9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdG9Gb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdFx0XHRiSGlkZU1lYXN1cmUgfHwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiLFxuXHRcdFx0XHRcdCEhZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uc2hvd09ubHlVbml0RGVjaW1hbHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZvcm1hdHRlZFZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aGlkZU1lYXN1cmU6IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdGlmIChcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHxcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5XG5cdCkge1xuXHRcdGlmIChoaWRlTWVhc3VyZSAmJiBoYXNTdGF0aWNQZXJjZW50VW5pdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZvcm1hdHRlZFZhbHVlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGlkZU1lYXN1cmUgPyB7IHNob3dNZWFzdXJlOiBmYWxzZSB9IDogdW5kZWZpbmVkLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdHNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgdmFsdWUgb2YgUHJvZ3Jlc3MgSW5kaWNhdG9yLiBCYXNpYyBmb3JtdWxhIGlzIFZhbHVlL1RhcmdldCAqIDEwMC5cbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlLCB3aGljaCBpcyBzaG93biBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBmb3JtdWxhIGdpdmVuIGFib3ZlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBmaWVsZFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGlmICh1bml0KSB7XG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmNvbXB1dGVQZXJjZW50YWdlKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgXCJcIl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThCQSxNQUFNQSx1Q0FBdUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDO0VBVTNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsNEJBQTRCLEdBQUdBLENBQ3BDQyxjQUF5QyxFQUN6Q0MsZ0JBQTBCLEtBQ1k7SUFDdEMsT0FBT0QsY0FBYyxFQUFFRSxXQUFXLEdBQUdDLDJCQUEyQixDQUFDSCxjQUFjLENBQUNFLFdBQVcsRUFBRUQsZ0JBQWdCLENBQUMsR0FBR0csc0JBQXNCO0VBQ3hJLENBQUM7RUFFRCxNQUFNQyxjQUFjLEdBQUdDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsZUFBZSxDQUFFOztFQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUMsK0NBQStDLEdBQzNEQyw0QkFBZ0UsSUFDMUI7SUFDdEMsTUFBTUMsVUFBVSxHQUFHRCw0QkFBNEIsRUFBRUUsWUFBWSxFQUFFQyxLQUFLLElBQUksRUFBRTtJQUMxRSxNQUFNWCxnQkFBZ0IsR0FBR1ksZ0JBQWdCLENBQUNKLDRCQUE0QixDQUFDO0lBQ3ZFLE1BQU1LLG9CQUE2RCxHQUFHWCwyQkFBMkIsQ0FBQ08sVUFBVSxFQUFFVCxnQkFBZ0IsQ0FBQztJQUMvSCxNQUFNYyxnQkFBa0QsR0FBR2hCLDRCQUE0QixDQUN0RlUsNEJBQTRCLENBQUNFLFlBQVksRUFDekNWLGdCQUNELENBQUM7SUFFRCxJQUFJYSxvQkFBb0IsSUFBSUMsZ0JBQWdCLEVBQUU7TUFDN0MsSUFBSUosWUFBWSxHQUFHRiw0QkFBNEIsQ0FBQ0UsWUFBWSxFQUFFQyxLQUFLO01BQ25FLElBQUksQ0FBQ0ksVUFBVSxDQUFDTCxZQUFZLENBQUMsRUFBRTtRQUM5QkEsWUFBWSxHQUFHQSxZQUFZLENBQUNNLE9BQU87TUFDcEM7TUFDQSxNQUFNQyxJQUFJLEdBQUdQLFlBQVksQ0FBQ1EsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLElBQUksSUFBSVYsWUFBWSxDQUFDUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVztNQUV4RyxJQUFJLENBQUNKLElBQUksRUFBRTtRQUNWLE9BQU9iLGNBQWMsQ0FBQ2tCLE9BQU8sQ0FBQyxrREFBa0QsRUFBRSxDQUNqRkMsaUJBQWlCLENBQUNWLG9CQUFvQixDQUFDLEVBQ3ZDVSxpQkFBaUIsQ0FBQ1QsZ0JBQWdCLENBQUMsQ0FDbkMsQ0FBQztNQUNIO01BQ0E7TUFDQSxJQUFJVSxvQkFBb0IsQ0FBQ2YsVUFBVSxFQUFFTyxPQUFPLENBQUMsRUFBRTtRQUM5QyxPQUFPLEdBQUdPLGlCQUFpQixDQUFDVixvQkFBb0IsQ0FBQyxJQUFJO01BQ3REO01BRUEsTUFBTVkscUJBQXVELEdBQUdSLElBQUksQ0FBQ0QsT0FBTyxHQUN6RVUseUJBQXlCLENBQUNULElBQUksQ0FBQ0QsT0FBTyxFQUFFZCwyQkFBMkIsQ0FBQ2UsSUFBSSxFQUFFakIsZ0JBQWdCLENBQUMsQ0FBQyxHQUM1RkUsMkJBQTJCLENBQUNlLElBQUksRUFBRWpCLGdCQUFnQixDQUFDO01BRXRELE1BQU0yQixVQUFVLEdBQUdqQixZQUFZLENBQUNRLFdBQVcsRUFBRUMsUUFBUSxFQUFFRSxXQUFXLEdBQUcsSUFBSSxHQUFHLEtBQUs7TUFDakYsSUFBSU8sa0JBQWtCO01BQ3RCLElBQUlELFVBQVUsRUFBRTtRQUNmQyxrQkFBa0IsR0FBR0MsV0FBVyxDQUFDLDJCQUEyQixDQUFDO01BQzlELENBQUMsTUFBTTtRQUNORCxrQkFBa0IsR0FBR0MsV0FBVyxDQUFDLDRCQUE0QixDQUFDO01BQy9EO01BQ0FELGtCQUFrQixDQUFDRSxVQUFVLEdBQUcsS0FBSztNQUNyQ0Ysa0JBQWtCLENBQUNHLElBQUksR0FBRyxTQUFTO01BRW5DLE9BQU9SLGlCQUFpQixDQUN2QlMsWUFBWSxDQUNYLENBQUNuQixvQkFBb0IsRUFBRUMsZ0JBQWdCLEVBQUVXLHFCQUFxQixFQUFFRSxVQUFVLEVBQUVDLGtCQUFrQixDQUFDLEVBQy9GSyxlQUFlLENBQUNDLDJCQUNqQixDQUNELENBQUM7SUFDRjtJQUNBLE9BQU9DLFNBQVM7RUFDakIsQ0FBQztFQUFDQyxRQUFBLENBQUE3QiwrQ0FBQSxHQUFBQSwrQ0FBQTtFQUVGLE1BQU04QixzQ0FBc0MsR0FBR0EsQ0FBQ0MsUUFBaUIsRUFBRUMsV0FBb0IsS0FBeUI7SUFDL0csSUFBSUEsV0FBVyxFQUFFO01BQ2hCLE9BQU9DLDZCQUE2QixDQUFDQyxnQkFBZ0IsQ0FBQ0MsS0FBSyxDQUFDSCxXQUFXLEVBQUU7UUFBRUksT0FBTyxFQUFFTDtNQUFTLENBQUMsQ0FBc0IsQ0FBQztJQUN0SDtFQUNELENBQUM7RUFDRDtFQUNBLE1BQU1FLDZCQUE2QixHQUFJSSxnQkFBd0IsSUFBeUI7SUFDdkYsSUFBSUEsZ0JBQWdCLEVBQUU7TUFDckIsTUFBTUMsY0FBYyxHQUNuQkQsZ0JBQWdCLEdBQUcsQ0FBQyxHQUNqQnhDLGNBQWMsQ0FBQ2tCLE9BQU8sQ0FBQyw0REFBNEQsQ0FBQyxHQUNwRmxCLGNBQWMsQ0FBQ2tCLE9BQU8sQ0FBQyxxREFBcUQsQ0FBQztNQUNqRixPQUFPbEIsY0FBYyxDQUFDa0IsT0FBTyxDQUFDLCtDQUErQyxFQUFFLENBQUN3QixNQUFNLENBQUNGLGdCQUFnQixDQUFDLEVBQUVDLGNBQWMsQ0FBQyxDQUFDO0lBQzNIO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNRSw0QkFBNEIsR0FBR0EsQ0FBQ1QsUUFBaUIsRUFBRVUsVUFBcUMsS0FBeUI7SUFDN0gsSUFBSUMsTUFBMEI7SUFDOUIsSUFBSUQsVUFBVSxJQUFJQSxVQUFVLENBQUNFLFVBQVUsRUFBRTtNQUN4Q0QsTUFBTSxHQUFHWixzQ0FBc0MsQ0FBQ0MsUUFBUSxFQUFFVSxVQUFVLENBQUNFLFVBQVUsQ0FBQztJQUNqRixDQUFDLE1BQU0sSUFBSUYsVUFBVSxJQUFJQSxVQUFVLENBQUNHLFdBQVcsRUFBRTtNQUNoRCxNQUFNQyxXQUFXLEdBQUdYLGdCQUFnQixDQUFDQyxLQUFLLENBQUNNLFVBQVUsQ0FBQ0csV0FBVyxFQUFFO1FBQUVSLE9BQU8sRUFBRUw7TUFBUyxDQUFDLENBQUM7TUFDekZXLE1BQU0sR0FBRyxTQUFTLEdBQUdHLFdBQVcsR0FBRyxHQUFHO0lBQ3ZDO0lBQ0EsT0FBT0gsTUFBTTtFQUNkLENBQUM7RUFDREYsNEJBQTRCLENBQUNNLGdCQUFnQixHQUFHLElBQUk7RUFBQ2pCLFFBQUEsQ0FBQVcsNEJBQUEsR0FBQUEsNEJBQUE7RUFFckQsTUFBTU8sNkJBQTZCLEdBQUk3QyxVQUF5QyxJQUFtRDtJQUNsSSxNQUFNVCxnQkFBZ0IsR0FBR1ksZ0JBQWdCLENBQUNILFVBQVUsQ0FBQztJQUNyRCxJQUFJQSxVQUFVLEVBQUVDLFlBQVksRUFBRVEsV0FBVyxFQUFFcUMsTUFBTSxFQUFFQyxJQUFJLEVBQUU7TUFDeEQsTUFBTUMsZUFBZSxHQUFHdkQsMkJBQTJCLENBQUNPLFVBQVUsRUFBRUMsWUFBWSxDQUFDUSxXQUFXLEVBQUVxQyxNQUFNLEVBQUVDLElBQUksRUFBRXhELGdCQUFnQixDQUFDO01BQ3pILElBQUkwRCx1QkFBdUIsQ0FBQ0QsZUFBZSxDQUFDLEVBQUU7UUFDN0NBLGVBQWUsQ0FBQ0UsVUFBVSxHQUFHO1VBQUVDLFNBQVMsRUFBRTtRQUFLLENBQUM7TUFDakQ7TUFDQSxPQUFPSCxlQUFlO0lBQ3ZCO0lBQ0EsT0FBT3RCLFNBQVM7RUFDakIsQ0FBQztFQUVELE1BQU0wQixjQUFjLEdBQUdBLENBQ3RCQyxhQUE0QyxFQUM1Q0Msd0JBQTRDLEtBQ047SUFDdEM7SUFDQTtJQUNBLElBQUlBLHdCQUF3QixFQUFFO01BQzdCLElBQUksQ0FBQ0QsYUFBYSxDQUFDRSxhQUFhLEVBQUU7UUFDakNGLGFBQWEsQ0FBQ0UsYUFBYSxHQUFHLENBQUMsQ0FBQztNQUNqQztNQUNBRixhQUFhLENBQUNFLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUNKLGFBQWEsQ0FBQ0UsYUFBYSxFQUFFO1FBQ3hFRyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCQyxpQkFBaUIsRUFBRUwsd0JBQXdCO1FBQzNDTSxpQkFBaUIsRUFBRU47TUFDcEIsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBRCxhQUFhLENBQUNRLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDL0I7SUFDQSxPQUFPUixhQUFhO0VBQ3JCLENBQUM7RUFFTSxNQUFNUyxpQkFBaUIsR0FBR0EsQ0FDaENDLHNCQUFpRSxFQUNqRS9ELFVBQXdELEVBQ3hEZ0UsYUFBcUIsRUFDckJDLHlCQUE2QyxLQUNQO0lBQ3RDLElBQUlaLGFBQStDO0lBQ25ELE1BQU05RCxnQkFBZ0IsR0FBRyxDQUFDUyxVQUFVLEVBQUVrRSxJQUFJLEVBQUVDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR2hFLGdCQUFnQixDQUFDNEQsc0JBQXNCLENBQUMsR0FBRyxFQUFFO0lBQ3pHVixhQUFhLEdBQUc1RCwyQkFBMkIsQ0FBQ08sVUFBVSxFQUFFVCxnQkFBZ0IsQ0FBQztJQUN6RSxNQUFNNkUsbUJBQW1CLEdBQUdMLHNCQUFzQixFQUFFOUQsWUFBWTtJQUNoRSxJQUFJbUUsbUJBQW1CLElBQUlKLGFBQWEsSUFBSWYsdUJBQXVCLENBQUNJLGFBQWEsQ0FBQyxFQUFFO01BQ25GcEMseUJBQXlCLENBQUNtRCxtQkFBbUIsRUFBRWYsYUFBYSxDQUFDO01BQzdEQSxhQUFhLENBQUNnQixJQUFJLEdBQUdDLGdCQUFnQixDQUFDTixhQUFhLENBQUMsRUFBRUssSUFBSTtNQUMxRCxJQUFJakYsdUNBQXVDLENBQUMrRSxRQUFRLENBQUNILGFBQWEsQ0FBQyxFQUFFO1FBQ3BFO1FBQ0E7UUFDQVgsYUFBYSxHQUFHRCxjQUFjLENBQUNDLGFBQWEsRUFBRVkseUJBQXlCLENBQUM7TUFDekU7SUFDRDtJQUVBLE9BQU9aLGFBQWE7RUFDckIsQ0FBQztFQUFDMUIsUUFBQSxDQUFBbUMsaUJBQUEsR0FBQUEsaUJBQUE7RUFFSyxNQUFNUywyQkFBMkIsR0FBR0EsQ0FDMUNqRixjQUFrRCxFQUNsRGtGLHNCQUE4QyxFQUM5Q0MsWUFBcUIsS0FDaUI7SUFDdEMsTUFBTWxDLFVBQVUsR0FBR2pELGNBQWMsQ0FBQ1csWUFBWTtJQUM5QyxNQUFNeUUsZUFBZSxHQUFHbkMsVUFBVSxFQUFFckMsS0FBSyxJQUFJLEVBQUU7SUFDL0MsTUFBTXlFLFlBQVksR0FBR0QsZUFBZSxFQUFFbkUsT0FBTyxFQUFFOEQsSUFBSTtJQUNuRCxJQUFJZix3QkFBd0I7SUFFNUIsSUFBSWxFLHVDQUF1QyxDQUFDK0UsUUFBUSxDQUFDUSxZQUFZLENBQUMsSUFBSXBDLFVBQVUsRUFBRXFDLFdBQVcsRUFBRTtNQUM5RixJQUFJckMsVUFBVSxDQUFDcUMsV0FBVyxDQUFDQyx3QkFBd0IsRUFBRTtRQUNwRHZCLHdCQUF3QixHQUFHZixVQUFVLENBQUNxQyxXQUFXLENBQUNDLHdCQUF3QjtNQUMzRTtJQUNEO0lBQ0EsTUFBTTlFLDRCQUE0QixHQUFHK0Usb0JBQW9CLENBQVd4RixjQUFjLEVBQUVvRixlQUFlLENBQUNSLElBQUksQ0FBQztJQUN6RyxNQUFNYSxZQUFZLEdBQUdoRiw0QkFBNEIsR0FBRzhDLDZCQUE2QixDQUFDOUMsNEJBQTRCLENBQUMsR0FBRzJCLFNBQVM7SUFDM0gsTUFBTXNELGVBQWUsR0FBR2xCLGlCQUFpQixDQUFDL0QsNEJBQTRCLEVBQUUyRSxlQUFlLEVBQUVDLFlBQVksRUFBRXJCLHdCQUF3QixDQUFDO0lBQ2hJLE1BQU0yQixZQUFZLEdBQUdGLFlBQVksR0FBR1Asc0JBQXNCLEVBQUVVLFdBQVcsSUFBSUMsY0FBYyxDQUFDcEYsNEJBQTRCLENBQUMsR0FBRyxPQUFPO0lBQ2pJLElBQUlxRixrQkFBZ0U7SUFDcEUsUUFBUUgsWUFBWTtNQUNuQixLQUFLLGFBQWE7UUFDakJHLGtCQUFrQixHQUFHTCxZQUFZO1FBQ2pDO01BQ0QsS0FBSyxrQkFBa0I7UUFDdEJLLGtCQUFrQixHQUFHN0QsWUFBWSxDQUFDLENBQUN5RCxlQUFlLEVBQUVELFlBQVksQ0FBQyxFQUFFdkQsZUFBZSxDQUFDNkQsa0JBQWtCLENBQUM7UUFDdEc7TUFDRCxLQUFLLGtCQUFrQjtRQUN0QkQsa0JBQWtCLEdBQUc3RCxZQUFZLENBQUMsQ0FBQ3dELFlBQVksRUFBRUMsZUFBZSxDQUFDLEVBQUV4RCxlQUFlLENBQUM2RCxrQkFBa0IsQ0FBQztRQUN0RztNQUNEO1FBQ0MsSUFDQ3RGLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVRLFdBQVcsRUFBRXFDLE1BQU0sRUFBRXdDLFFBQVEsSUFDeEV2Riw0QkFBNEIsQ0FBQ0UsWUFBWSxDQUFDb0UsSUFBSSxLQUFLLG9CQUFvQixFQUN0RTtVQUNEZSxrQkFBa0IsR0FBR0csc0JBQXNCLENBQUN4Riw0QkFBNEIsRUFBRWlGLGVBQWUsQ0FBQztRQUMzRixDQUFDLE1BQU0sSUFBSWpGLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVRLFdBQVcsRUFBRXFDLE1BQU0sRUFBRTBDLFVBQVUsRUFBRTtVQUN0Rkosa0JBQWtCLEdBQUdLLHFCQUFxQixDQUFDMUYsNEJBQTRCLEVBQUVpRixlQUFlLENBQUM7UUFDMUYsQ0FBQyxNQUFNLElBQ05qRiw0QkFBNEIsQ0FBQ0UsWUFBWSxFQUFFUSxXQUFXLEVBQUVpRixFQUFFLEVBQUVDLGFBQWEsSUFDekVuQixzQkFBc0IsRUFBRW9CLGVBQWUsRUFDdEM7VUFDRFIsa0JBQWtCLEdBQUdTLHVCQUF1QixDQUFDOUYsNEJBQTRCLEVBQUVpRixlQUFlLEVBQUVSLHNCQUFzQixDQUFDO1FBQ3BILENBQUMsTUFBTTtVQUNOWSxrQkFBa0IsR0FBR1UsaUNBQWlDLENBQ3JEL0YsNEJBQTRCLEVBQzVCaUYsZUFBZSxFQUNmUCxZQUFZLElBQUlELHNCQUFzQixFQUFFdUIsa0JBQWtCLEtBQUssUUFBUSxFQUN2RSxDQUFDLENBQUN2QixzQkFBc0IsRUFBRXdCLG9CQUMzQixDQUFDO1FBQ0Y7SUFDRjtJQUNBLE9BQU9sRixpQkFBaUIsQ0FBQ3NFLGtCQUFrQixDQUFDO0VBQzdDLENBQUM7RUFBQ3pELFFBQUEsQ0FBQTRDLDJCQUFBLEdBQUFBLDJCQUFBO0VBRUssTUFBTXVCLGlDQUFpQyxHQUFHQSxDQUNoREcsMkJBQTBELEVBQzFEQyxjQUFnRCxFQUNoREMsV0FBb0IsRUFDcEJILG9CQUE2QixLQUNTO0lBQ3RDLElBQ0NDLDJCQUEyQixDQUFDaEcsWUFBWSxFQUFFUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxJQUNyRXNGLDJCQUEyQixDQUFDaEcsWUFBWSxFQUFFUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVyxFQUMzRTtNQUNELElBQUl1RixXQUFXLElBQUlwRixvQkFBb0IsQ0FBQ2tGLDJCQUEyQixDQUFDaEcsWUFBWSxDQUFDLEVBQUU7UUFDbEYsT0FBT2lHLGNBQWM7TUFDdEI7TUFDQSxPQUFPRSw0QkFBNEIsQ0FDbENILDJCQUEyQixFQUMzQkMsY0FBYyxFQUNkeEUsU0FBUyxFQUNUeUUsV0FBVyxHQUFHO1FBQUVFLFdBQVcsRUFBRTtNQUFNLENBQUMsR0FBRzNFLFNBQVMsRUFDaEQsSUFBSSxFQUNKc0Usb0JBQ0QsQ0FBQztJQUNGO0lBQ0EsT0FBT0UsY0FBYztFQUN0QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQXZFLFFBQUEsQ0FBQW1FLGlDQUFBLEdBQUFBLGlDQUFBO0VBS08sTUFBTVEsK0NBQStDLEdBQzNEdkcsNEJBQWdFLElBQ3hDO0lBQ3hCLE1BQU1DLFVBQVUsR0FBSUQsNEJBQTRCLEVBQUVFLFlBQVksRUFBRUMsS0FBSyxJQUFnRCxFQUFFO0lBQ3ZILE1BQU1YLGdCQUFnQixHQUFHWSxnQkFBZ0IsQ0FBQ0osNEJBQTRCLENBQUM7SUFDdkUsTUFBTUssb0JBQW9CLEdBQUdYLDJCQUEyQixDQUFDTyxVQUFVLEVBQUVULGdCQUFnQixDQUFDO0lBQ3RGLE1BQU1jLGdCQUFnQixHQUFHaEIsNEJBQTRCLENBQUNVLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVWLGdCQUFnQixDQUFDO0lBRWxILE1BQU02RSxtQkFBbUIsR0FBR3BFLFVBQVUsQ0FBQ08sT0FBbUI7SUFDMUQsTUFBTUMsSUFBSSxHQUFHNEQsbUJBQW1CLENBQUMzRCxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxJQUFJeUQsbUJBQW1CLENBQUMzRCxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVztJQUN0SCxJQUFJSixJQUFJLEVBQUU7TUFDVCxNQUFNUSxxQkFBcUIsR0FBR3ZCLDJCQUEyQixDQUFDZSxJQUFJLEVBQUVqQixnQkFBZ0IsQ0FBQztNQUVqRixPQUFPdUIsaUJBQWlCLENBQ3ZCUyxZQUFZLENBQUMsQ0FBQ25CLG9CQUFvQixFQUFFQyxnQkFBZ0IsRUFBRVcscUJBQXFCLENBQUMsRUFBRVEsZUFBZSxDQUFDK0UsaUJBQWlCLENBQ2hILENBQUM7SUFDRjtJQUVBLE9BQU96RixpQkFBaUIsQ0FBQ1MsWUFBWSxDQUFDLENBQUNuQixvQkFBb0IsRUFBRUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUVtQixlQUFlLENBQUMrRSxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3hILENBQUM7RUFBQzVFLFFBQUEsQ0FBQTJFLCtDQUFBLEdBQUFBLCtDQUFBO0VBQUEsT0FBQTNFLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -170,8 +170,12 @@ const getFloatFormat = (
170
170
  }
171
171
  outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
172
172
  preserveDecimals: false,
173
- maxFractionDigits: numberOfFractionalDigits
173
+ maxFractionDigits: numberOfFractionalDigits,
174
+ minFractionDigits: numberOfFractionalDigits
174
175
  });
176
+ //we need to ignore the constraints otherwise the scale mess up the formatting by adding trailing zeros
177
+ // 1.234 with maxFractionDigits 2 and scale 4 will become 1.2300
178
+ outExpression.constraints = {};
175
179
  }
176
180
  return outExpression;
177
181
  };
@@ -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/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/macros/internal/valuehelp/AdditionalValueHelper", "sap/ui/core/Lib", "sap/ui/core/library"], function (ObjectPath, CommonUtils, valueFormatters, ModelHelper, AdditionalValueHelper, Library, library) {
5
+ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/macros/internal/valuehelp/AdditionalValueHelper", "sap/ui/core/Lib", "sap/ui/core/library"], function (CommonUtils, Scope, valueFormatters, ModelHelper, AdditionalValueHelper, Library, library) {
6
6
  "use strict";
7
7
 
8
8
  var ValueState = library.ValueState;
@@ -22,7 +22,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/co
22
22
  }
23
23
  return false;
24
24
  }
25
- getGrowing.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#getGrowing";
25
+ getGrowing.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#getGrowing";
26
26
 
27
27
  /**
28
28
  * Get the relative property path of the field.
@@ -171,7 +171,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/co
171
171
  }
172
172
  return presentValueState;
173
173
  }
174
- formatValueState.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#formatValueState";
174
+ formatValueState.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#formatValueState";
175
175
  function _getPlaceholderText(relevantRecommendations, displayMode) {
176
176
  let placeholder;
177
177
  const value = relevantRecommendations?.value;
@@ -223,7 +223,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/co
223
223
  }
224
224
  return placeholderData;
225
225
  }
226
- formatPlaceholder.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#formatPlaceholder";
226
+ formatPlaceholder.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#formatPlaceholder";
227
227
 
228
228
  // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
229
229
  /**
@@ -246,7 +246,10 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/co
246
246
  additionalValueFormatter.getGrowing = getGrowing;
247
247
  additionalValueFormatter.formatValueState = formatValueState;
248
248
  additionalValueFormatter.formatPlaceholder = formatPlaceholder;
249
- ObjectPath.set("sap.fe.macros.internal.valuehelp.AdditionalValueFormatter", additionalValueFormatter);
249
+
250
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
251
+ // @ts-ignore
252
+ Scope._formatters.AdditionalValueFormatter = additionalValueFormatter;
250
253
  return additionalValueFormatter;
251
254
  }, false);
252
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRHcm93aW5nIiwicmVjb21tZW5kYXRpb25EYXRhIiwicHJvcGVydHlQYXRoIiwidmFsdWVzIiwiYWRkaXRpb25hbFZhbHVlSGVscGVyIiwiZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxlbmd0aCIsIl9fZnVuY3Rpb25OYW1lIiwiX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmllbGRCaW5kaW5nQ29udGV4dCIsInNvdXJjZXBhdGgiLCJtZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsIl9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dCIsInJlY29tbWVuZGF0aW9uVmFsdWUiLCJyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIiwiYWxsX3JlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9uc1RleHQiLCJmblNldFZhbHVlU3RhdGUiLCJldmVudCIsImxpc3RCaW5kaW5nIiwiZ2V0U291cmNlIiwibGlzdENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiaW5jbHVkZXMiLCJnZXRPYmplY3QiLCJ2YWx1ZVN0YXRlIiwidmFsdWVTdGF0ZVRleHQiLCJfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQiLCJzZXRWYWx1ZVN0YXRlVGV4dCIsInNldFZhbHVlU3RhdGUiLCJkZXRhY2hDaGFuZ2UiLCJnZXRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiZmllbGQiLCJWYWx1ZVN0YXRlIiwiTm9uZSIsIkluZm9ybWF0aW9uIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJyZWxldmFudFJlY29tbWVuZGF0aW9ucyIsInZlcnNpb24iLCJnZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoIiwidmFsdWUiLCJ0ZXh0IiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudCIsImZvcm1hdFZhbHVlU3RhdGUiLCJpc0VkaXRhYmxlIiwiZmllbGRWYWx1ZSIsImZpZWxkVGV4dFZhbHVlIiwidW5kZWZpbmVkIiwicHJlc2VudFZhbHVlU3RhdGUiLCJnZXRWYWx1ZVN0YXRlIiwiaXNUcmFuc2llbnQiLCJyZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUiLCJPYmplY3QiLCJrZXlzIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInByZXNlbnRWYWx1ZVN0YXRlVGV4dCIsImdldFZhbHVlU3RhdGVUZXh0IiwicHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUiLCJpc0EiLCJjYWxsIiwiX2dldFBsYWNlaG9sZGVyVGV4dCIsImRpc3BsYXlNb2RlIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRQbGFjZWhvbGRlciIsImN1cnJlbnRQYWdlQ29udGV4dCIsImN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckRhdGEiLCJnZXRQbGFjZWhvbGRlciIsImJpbmRpbmdDb250ZXh0IiwiYmluZGluZ1BhdGgiLCJnZXRQYXRoIiwiYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1JlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uSW5mbywgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgYWRkaXRpb25hbFZhbHVlSGVscGVyIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL0FkZGl0aW9uYWxWYWx1ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5cbi8qKlxuICogR3Jvd2luZyBmb3JtYXR0ZXIgdXNlZCBmb3IgZ3Jvd2luZyBhbmQgZ3Jvd2luZ1RocmVzaG9sZC5cbiAqIEBwYXJhbSB0aGlzIFZhbHVlaGVscCBUYWJsZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGF0YSBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBQcm9wZXJ0eSBQYXRoIG9mIHRoZSBGaWVsZFxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBmb3IgZ3Jvd2luZyBhbmQgZ3Jvd2luZ1RocmVzaG9sZCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3dpbmcodGhpczogTVRhYmxlLCByZWNvbW1lbmRhdGlvbkRhdGE6IEluQ29tcGxldGVuZXNzSW5mb1R5cGUgfCB1bmRlZmluZWQsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHZhbHVlcyA9XG5cdFx0YWRkaXRpb25hbFZhbHVlSGVscGVyLmdldFJlbGV2YW50UmVjb21tZW5kYXRpb25zKHJlY29tbWVuZGF0aW9uRGF0YSB8fCB7fSwgdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsIHByb3BlcnR5UGF0aCkgfHwgW107XG5cdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vaWYgdGhlcmUgYXJlIHJlbGV2YW50IHJlY29tbWVuZGF0aW9ucyB0aGVuIHJldHVybiB0cnVlXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZ2V0R3Jvd2luZy5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyI2dldEdyb3dpbmdcIjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlbGF0aXZlIHByb3BlcnR5IHBhdGggb2YgdGhlIGZpZWxkLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBiaW5kaW5nIGNvbnRleHQgcGF0aCAgOiAnL0VtcGxveWVlKDEpJy5cbiAqIHNvdXJjZSBwYXRoICAgICAgICAgICA6ICcvRW1wbG95ZWUvTmFtZScuXG4gKiByZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoOiAnTmFtZScuXG4gKiBAcGFyYW0gZmllbGRCaW5kaW5nQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBzb3VyY2VwYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBSZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoLlxuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGgoZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCwgc291cmNlcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQoZmllbGRCaW5kaW5nQ29udGV4dCk7XG5cdHJldHVybiBzb3VyY2VwYXRoLnJlcGxhY2UoYCR7bWV0YVBhdGh9L2AsIFwiXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIGZvciB0aGUgZmllbGQgaW4gdGhlIHRhYmxlIGZvciB3aGljaCB0aGUgYmluZGluZyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlIGNvbnRleHQgZGF0YS5cbiAqXG4gKiBJbiBhIGZldyBzY2VuYXJpb3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGluc2lkZSB0aGUgdGFibGUsIHRoZSB2YWx1ZSBzdGF0ZSBmb3JtYXR0ZXIgaXMgY2FsbGVkIGZvciB2YWx1ZSB1cGRhdGUgd2l0aCB0aGUgY29udGV4dCB3aXRob3V0IGNvbnRleHQgZGF0YShjb250ZXh0LmdldE9iamVjdCgpIGlzIHVuZGVmaW5lZCkuXG4gKiBOT1RFOiBUaGlzIHNvbHV0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCB0aGFuIHVzaW5nIHRoZSB0YWJsZSBsaXN0YmluZGluZydzIGNoYW5nZSBldmVudC5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNUZXh0IFZhbHVlIHN0YXRlIHRleHQgd2hlbiB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBzaG93blxuICovXG5mdW5jdGlvbiBfc2V0VmFsdWVTdGF0ZUZvckZpZWxkV2l0aE5vRGF0YUNvbnRleHQoXG5cdHRoaXM6IEZpZWxkLFxuXHRyZWNvbW1lbmRhdGlvblZhbHVlOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb246IHN0cmluZyxcblx0ZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YWxsX3JlY29tbWVuZGF0aW9uczogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IFJlY29tbWVuZGF0aW9uSW5mbyB8IHVuZGVmaW5lZCxcblx0c291cmNlcGF0aDogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbnNUZXh0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBmblNldFZhbHVlU3RhdGUgPSAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBPRGF0YUxpc3RCaW5kaW5nPik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgbGlzdENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGxpc3RDb250ZXh0cy5pbmNsdWRlcyhmaWVsZEJpbmRpbmdDb250ZXh0KSkge1xuXHRcdFx0aWYgKGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkpIHtcblx0XHRcdFx0Y29uc3QgeyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9ID0gX2dldFZhbHVlU3RhdGVGb3JSZWNvbW1lbmRhdGlvbkZpZWxkKFxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0c291cmNlcGF0aCxcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0LFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5zZXRWYWx1ZVN0YXRlVGV4dCh2YWx1ZVN0YXRlVGV4dCk7XG5cdFx0XHRcdHRoaXMuc2V0VmFsdWVTdGF0ZSh2YWx1ZVN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGxpc3RCaW5kaW5nLmRldGFjaENoYW5nZShmblNldFZhbHVlU3RhdGUpO1xuXHRcdH1cblx0fTtcblxuXHRmaWVsZEJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hDaGFuZ2UoZm5TZXRWYWx1ZVN0YXRlKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBhcHBsaWNhYmxlLlxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uVmFsdWVcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSB0aGUgcmVjb21tZW5kYXRpb24gbW9kZWxcbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gc291cmNlcGF0aCBQcm9wZXJ0eSBQYXRoIG9mIHRoZSBGaWVsZFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc1RleHQgVmFsdWUgc3RhdGUgdGV4dCBpbiBjYXNlIHRoZSByZWNvbW1lbmRhdGlvbnMgYXJlIHNob3duXG4gKiBAcGFyYW0gZmllbGQgRmllbGRcbiAqIEByZXR1cm5zIFZhbHVlIHN0YXRlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0aGUgdmFsdWUgc3RhdGUgYW5kIHRoZSB2YWx1ZSBzdGF0ZSB0ZXh0LlxuICovXG5mdW5jdGlvbiBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRmaWVsZEJpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRzb3VyY2VwYXRoOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uc1RleHQ6IHN0cmluZyxcblx0ZmllbGQ6IEZpZWxkXG4pOiB7IHZhbHVlU3RhdGU6IFZhbHVlU3RhdGU7IHZhbHVlU3RhdGVUZXh0OiBzdHJpbmcgfSB7XG5cdC8vIElmIG5vIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZmllbGQgd2l0aCBwcmVzZW50IGNvbnRleHQgd2UgcmVzZXQgdmFsdWUgc3RhdGUuXG5cdGxldCB2YWx1ZVN0YXRlID0gVmFsdWVTdGF0ZS5Ob25lLFxuXHRcdHZhbHVlU3RhdGVUZXh0ID0gXCJcIjtcblxuXHRpZiAocmVjb21tZW5kYXRpb25WYWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uKSB7XG5cdFx0dmFsdWVTdGF0ZVRleHQgPSByZWNvbW1lbmRhdGlvbnNUZXh0O1xuXHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHR9IGVsc2UgaWYgKGFsbF9yZWNvbW1lbmRhdGlvbnMpIHtcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IF9nZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChmaWVsZEJpbmRpbmdDb250ZXh0LCBzb3VyY2VwYXRoKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zIGFzIEluQ29tcGxldGVuZXNzSW5mb1R5cGUsXG5cdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0c291cmNlcGF0aCxcblx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoXG5cdFx0KTtcblx0XHRsZXQgcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM7XG5cdFx0aWYgKGFsbF9yZWNvbW1lbmRhdGlvbnM/LnZlcnNpb24gPT09IDIpIHtcblx0XHRcdHJlbGV2YW50UmVjb21tZW5kYXRpb25zID0gYWRkaXRpb25hbFZhbHVlSGVscGVyLmdldEFkZGl0aW9uYWxWYWx1ZUZyb21Qcm9wZXJ0eVBhdGgoXG5cdFx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zXG5cdFx0XHQpIGFzIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQoYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiA9PT0gMiAmJiAocmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnZhbHVlIHx8IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0KSkgfHxcblx0XHRcdCghYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiAmJiB2YWx1ZXM/Lmxlbmd0aClcblx0XHQpIHtcblx0XHRcdHZhbHVlU3RhdGVUZXh0ID0gcmVjb21tZW5kYXRpb25zVGV4dDtcblx0XHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZVN0YXRlID09PSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uKSB7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmllbGQpO1xuXHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpLnJlY29tbWVuZGF0aW9ucy5pbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudChcIm51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWRcIik7XG5cdH1cblxuXHRyZXR1cm4geyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgdmFsdWUgc3RhdGUgb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIGFuZCB0aGUgYXZhaWxhYmxlIHJlY29tbWVuZGF0aW9ucy5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZSBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBhbGxfcmVjb21tZW5kYXRpb25zXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBQYWdlIGlzIGluIGVkaXQgbW9kZVxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSBmaWVsZFZhbHVlIFByZXNlbnQgZmllbGQgdmFsdWVcbiAqIEBwYXJhbSBmaWVsZFRleHRWYWx1ZVxuICogQHJldHVybnMgRmllbGQgdmFsdWUgc3RhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VmFsdWVTdGF0ZShcblx0dGhpczogRmllbGQsXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRpc0VkaXRhYmxlOiBib29sZWFuLFxuXHRzb3VyY2VwYXRoPzogc3RyaW5nLFxuXHRmaWVsZFZhbHVlPzogc3RyaW5nLFxuXHRmaWVsZFRleHRWYWx1ZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nXG4pOiBWYWx1ZVN0YXRlIHtcblx0Ly8gV2UgcmVzZXQgdmFsdWUgc3RhdGUgd2hlbjpcblx0Ly8gMS4gTm8gY29udGV4dCBpcyBib3VuZCB0byB0aGUgZmllbGQuXG5cdC8vIDIuIGlzRWRpdGFibGUgaXMgZmFsc2Vcblx0Y29uc3QgZmllbGRCaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWZpZWxkQmluZGluZ0NvbnRleHQgfHwgIWlzRWRpdGFibGUpIHtcblx0XHRyZXR1cm4gVmFsdWVTdGF0ZS5Ob25lO1xuXHR9XG5cdGZpZWxkVGV4dFZhbHVlID0gZmllbGRUZXh0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBmaWVsZFRleHRWYWx1ZTtcblx0Ly8gV2UgZG9uJ3QgY2hhbmdlIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIHdoZW46XG5cdC8vIDEuIFNvdXJjZSBwYXRoIGlzIG5vdCBhdmFpbGFibGUuXG5cdC8vIDIuIEZpZWxkIGNvbnRleHQgaXMgdHJhbnNpZW50LlxuXHRjb25zdCBwcmVzZW50VmFsdWVTdGF0ZSA9IHRoaXMuZ2V0VmFsdWVTdGF0ZSgpIGFzIFZhbHVlU3RhdGU7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gZmllbGRCaW5kaW5nQ29udGV4dC5pc1RyYW5zaWVudD8uKCk7XG5cdGlmICghc291cmNlcGF0aCB8fCBpc1RyYW5zaWVudCkge1xuXHRcdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcblx0fVxuXG5cdC8vIFdlIHJlc2V0IHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB2YWx1ZSBzdGF0ZSByZXByZXNlbnRzIHJlY29tbWVuZGF0aW9ucy5cblx0Y29uc3QgcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlID1cblx0XHRyZWNvbW1lbmRhdGlvblZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gfHwgKCEhYWxsX3JlY29tbWVuZGF0aW9ucyAmJiBPYmplY3Qua2V5cyhhbGxfcmVjb21tZW5kYXRpb25zKS5sZW5ndGggPiAwKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25zVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlJFQ09NTUVOREFUSU9OU19EQVRBX0lORk9cIik7XG5cdGNvbnN0IHByZXNlbnRWYWx1ZVN0YXRlVGV4dCA9IHRoaXMuZ2V0VmFsdWVTdGF0ZVRleHQoKTtcblx0Y29uc3QgcHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMgPSBwcmVzZW50VmFsdWVTdGF0ZSA9PT0gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbiAmJiBwcmVzZW50VmFsdWVTdGF0ZVRleHQgPT09IHJlY29tbWVuZGF0aW9uc1RleHQ7XG5cdC8vSWYgZmllbGQgdmFsdWUgaXMgcHJlc2VudCBvciByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgYnV0IHByZXNlbnRTdGF0ZSBpcyBJbmZvIHRoZW4gd2UgY2hhbmdlIGl0IHRvIE5vbmVcblx0aWYgKHByZXNlbnRWU0lzUmVjb21tZW5kYXRpb25zICYmICghcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlIHx8IGZpZWxkVmFsdWUgfHwgZmllbGRUZXh0VmFsdWUpKSB7XG5cdFx0cmV0dXJuIFZhbHVlU3RhdGUuTm9uZTtcblx0fVxuXG5cdC8vIFJlY29tbWVuZGF0aW9ucyBzaGFsbCBiZSBhcHBsaWNhYmxlIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIHByZXNlbnQgdmFsdWUgc3RhdGU6XG5cdC8vIDEuIElzIE5vbmVcblx0Ly8gMi4gQWxyZWFkeSByZXByZXNlbnRzIHJlY29tZW5kYXRpb25zLlxuXHRjb25zdCByZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUgPSByZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUgJiYgKHByZXNlbnRWYWx1ZVN0YXRlID09IFZhbHVlU3RhdGUuTm9uZSB8fCBwcmVzZW50VlNJc1JlY29tbWVuZGF0aW9ucyk7XG5cdGlmICghZmllbGRWYWx1ZSAmJiAhZmllbGRUZXh0VmFsdWUgJiYgcmVjb21tZW5kYXRpb25zU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IWZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkgJiZcblx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpPy5pc0E/LjxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpXG5cdFx0KSB7XG5cdFx0XHQvLyBObyBjb250ZXh0IGRhdGEgYXZhbGlsYWJsZSB5ZXQgYW5kIHBhcmVudCBiaW5kaW5nIGlzIGxpc3RiaW5kaW5nIChGaWVsZCBpbiBUYWJsZSBzY2VuYXJpbylcblx0XHRcdF9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRzb3VyY2VwYXRoLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB7IHZhbHVlU3RhdGUsIHZhbHVlU3RhdGVUZXh0IH0gPSBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdHNvdXJjZXBhdGgsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uc1RleHQsXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnNldFZhbHVlU3RhdGVUZXh0KHZhbHVlU3RhdGVUZXh0KTtcblx0XHRcdHJldHVybiB2YWx1ZVN0YXRlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcbn1cbmZvcm1hdFZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciNmb3JtYXRWYWx1ZVN0YXRlXCI7XG5cbmZ1bmN0aW9uIF9nZXRQbGFjZWhvbGRlclRleHQocmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/OiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IHZhbHVlID0gcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnZhbHVlO1xuXHRjb25zdCB0ZXh0ID0gcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnRleHQ7XG5cdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHQvL3NldCB1cCB0aGUgcGxhY2Vob2xkZXIgYWNjb3JkaW5nIHRvIHRleHQgYXJyYW5nZW1lbnRcblx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdHBsYWNlaG9sZGVyID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyh2YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModGV4dCBhcyBzdHJpbmcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdHBsYWNlaG9sZGVyID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyh0ZXh0IGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModmFsdWUgYXMgc3RyaW5nLCB0ZXh0IGFzIHN0cmluZyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHRleHQgYXMgc3RyaW5nLCB2YWx1ZSBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBwbGFjZWhvbGRlcjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UGxhY2Vob2xkZXIoXG5cdHRoaXM6IEZpZWxkLFxuXHRyZWNvbW1lbmRhdGlvblZhbHVlOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb246IHN0cmluZyxcblx0YWxsX3JlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25JbmZvLFxuXHRjdXJyZW50UGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdGN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlPzogTWVzc2FnZVR5cGUgfCBudWxsLFxuXHRlZGl0U3R5bGVQbGFjZWhvbGRlcj86IHN0cmluZyxcblx0ZGlzcGxheU1vZGU/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBwbGFjZWhvbGRlckRhdGE6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtcblx0ZWRpdFN0eWxlUGxhY2Vob2xkZXIgPSBlZGl0U3R5bGVQbGFjZWhvbGRlciA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHRpZiAoY3VycmVudEJvdW5kTWVzc2FnZVR5cGUpIHtcblx0XHRyZXR1cm4gZWRpdFN0eWxlUGxhY2Vob2xkZXI7XG5cdH1cblx0aWYgKHJlY29tbWVuZGF0aW9uVmFsdWUpIHtcblx0XHRwbGFjZWhvbGRlckRhdGEgPSBfZ2V0UGxhY2Vob2xkZXJUZXh0KHsgdmFsdWU6IHJlY29tbWVuZGF0aW9uVmFsdWUsIHRleHQ6IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gfSwgZGlzcGxheU1vZGUpO1xuXHR9IGVsc2UgaWYgKGFsbF9yZWNvbW1lbmRhdGlvbnMgJiYgT2JqZWN0LmtleXMoYWxsX3JlY29tbWVuZGF0aW9ucykubGVuZ3RoICYmIGFsbF9yZWNvbW1lbmRhdGlvbnMudmVyc2lvbiA9PT0gMikge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIHx8IGN1cnJlbnRQYWdlQ29udGV4dDtcblx0XHRjb25zdCBiaW5kaW5nUGF0aCA9IHRoaXMuZ2V0QmluZGluZyhcInZhbHVlXCIpPy5nZXRQYXRoKCk7XG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0ICYmIGJpbmRpbmdQYXRoKSB7XG5cdFx0XHQvL2dldCB0aGUgcmVjb21tZW5kYXRpb25zIGJhc2VkIG9uIHByb3BlcnR5IHBhdGggYW5kIGJpbmRpbmcgY29udGV4dCBwYXNzZWRcblx0XHRcdGNvbnN0IHJlbGV2YW50UmVjb21tZW5kYXRpb25zID0gYWRkaXRpb25hbFZhbHVlSGVscGVyLmdldEFkZGl0aW9uYWxWYWx1ZUZyb21Qcm9wZXJ0eVBhdGgoXG5cdFx0XHRcdGJpbmRpbmdQYXRoLFxuXHRcdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0YWxsX3JlY29tbWVuZGF0aW9uc1xuXHRcdFx0KSBhcyBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGU7XG5cdFx0XHQvL2lmIHdlIGdldCByZWNvbW1lbmRhdGlvbnMgdGhlbiBwdXNoIHRoZSB2YWx1ZXNcblx0XHRcdHBsYWNlaG9sZGVyRGF0YSA9IF9nZXRQbGFjZWhvbGRlclRleHQocmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMsIGRpc3BsYXlNb2RlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cGxhY2Vob2xkZXJEYXRhID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlciAmJiAhcGxhY2Vob2xkZXJEYXRhKSB7XG5cdFx0cGxhY2Vob2xkZXJEYXRhID0gZWRpdFN0eWxlUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHBsYWNlaG9sZGVyRGF0YTtcbn1cbmZvcm1hdFBsYWNlaG9sZGVyLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIjZm9ybWF0UGxhY2Vob2xkZXJcIjtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVycyBmb3IgbW9yZSBkZXRhaWwgb24gdGhpcyB3ZWlyZCBzeW50YXhcbi8qKlxuICogQ29sbGVjdGlvbiBvZiBBZGRpdGlvbmFsVmFsdWUgZm9ybWF0dGVycy5cbiAqIEBwYXJhbSB0aGlzIFRoZSBjb250ZXh0XG4gKiBAcGFyYW0gc05hbWUgVGhlIGlubmVyIGZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSBvQXJncyBUaGUgaW5uZXIgZnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIHZhbHVlIGZyb20gdGhlIGlubmVyIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciA9IGZ1bmN0aW9uICh0aGlzOiBvYmplY3QsIHNOYW1lOiBzdHJpbmcsIC4uLm9BcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0aWYgKGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5oYXNPd25Qcm9wZXJ0eShzTmFtZSkpIHtcblx0XHRyZXR1cm4gKGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbc05hbWVdLmFwcGx5KHRoaXMsIG9BcmdzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmdldEdyb3dpbmcgPSBnZXRHcm93aW5nO1xuYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFZhbHVlU3RhdGUgPSBmb3JtYXRWYWx1ZVN0YXRlO1xuYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFBsYWNlaG9sZGVyID0gZm9ybWF0UGxhY2Vob2xkZXI7XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyXCIsIGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlcik7XG5cbmV4cG9ydCBkZWZhdWx0IGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsVUFBVUEsQ0FBZUMsa0JBQXNELEVBQUVDLFlBQW9CLEVBQVc7SUFDeEgsTUFBTUMsTUFBTSxHQUNYQyxxQkFBcUIsQ0FBQ0MsMEJBQTBCLENBQUNKLGtC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
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRHcm93aW5nIiwicmVjb21tZW5kYXRpb25EYXRhIiwicHJvcGVydHlQYXRoIiwidmFsdWVzIiwiYWRkaXRpb25hbFZhbHVlSGVscGVyIiwiZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxlbmd0aCIsIl9fZnVuY3Rpb25OYW1lIiwiX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmllbGRCaW5kaW5nQ29udGV4dCIsInNvdXJjZXBhdGgiLCJtZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsIl9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dCIsInJlY29tbWVuZGF0aW9uVmFsdWUiLCJyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIiwiYWxsX3JlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9uc1RleHQiLCJmblNldFZhbHVlU3RhdGUiLCJldmVudCIsImxpc3RCaW5kaW5nIiwiZ2V0U291cmNlIiwibGlzdENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiaW5jbHVkZXMiLCJnZXRPYmplY3QiLCJ2YWx1ZVN0YXRlIiwidmFsdWVTdGF0ZVRleHQiLCJfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQiLCJzZXRWYWx1ZVN0YXRlVGV4dCIsInNldFZhbHVlU3RhdGUiLCJkZXRhY2hDaGFuZ2UiLCJnZXRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiZmllbGQiLCJWYWx1ZVN0YXRlIiwiTm9uZSIsIkluZm9ybWF0aW9uIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJyZWxldmFudFJlY29tbWVuZGF0aW9ucyIsInZlcnNpb24iLCJnZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoIiwidmFsdWUiLCJ0ZXh0IiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudCIsImZvcm1hdFZhbHVlU3RhdGUiLCJpc0VkaXRhYmxlIiwiZmllbGRWYWx1ZSIsImZpZWxkVGV4dFZhbHVlIiwidW5kZWZpbmVkIiwicHJlc2VudFZhbHVlU3RhdGUiLCJnZXRWYWx1ZVN0YXRlIiwiaXNUcmFuc2llbnQiLCJyZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUiLCJPYmplY3QiLCJrZXlzIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInByZXNlbnRWYWx1ZVN0YXRlVGV4dCIsImdldFZhbHVlU3RhdGVUZXh0IiwicHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUiLCJpc0EiLCJjYWxsIiwiX2dldFBsYWNlaG9sZGVyVGV4dCIsImRpc3BsYXlNb2RlIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRQbGFjZWhvbGRlciIsImN1cnJlbnRQYWdlQ29udGV4dCIsImN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckRhdGEiLCJnZXRQbGFjZWhvbGRlciIsImJpbmRpbmdDb250ZXh0IiwiYmluZGluZ1BhdGgiLCJnZXRQYXRoIiwiYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiU2NvcGUiLCJfZm9ybWF0dGVycyIsIkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgU2NvcGUgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvU2NvcGVcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25JbmZvLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRpdGlvbmFsVmFsdWVIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvQWRkaXRpb25hbFZhbHVlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuLyoqXG4gKiBHcm93aW5nIGZvcm1hdHRlciB1c2VkIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkLlxuICogQHBhcmFtIHRoaXMgVmFsdWVoZWxwIFRhYmxlXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhIERhdGEgZmV0Y2hlZCBmcm9tIHJlY29tbWVuZGF0aW9uIG1vZGVsXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0R3Jvd2luZyh0aGlzOiBNVGFibGUsIHJlY29tbWVuZGF0aW9uRGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IHVuZGVmaW5lZCwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgdmFsdWVzID1cblx0XHRhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMocmVjb21tZW5kYXRpb25EYXRhIHx8IHt9LCB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCwgcHJvcGVydHlQYXRoKSB8fCBbXTtcblx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0Ly9pZiB0aGVyZSBhcmUgcmVsZXZhbnQgcmVjb21tZW5kYXRpb25zIHRoZW4gcmV0dXJuIHRydWVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5nZXRHcm93aW5nLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2dldEdyb3dpbmdcIjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlbGF0aXZlIHByb3BlcnR5IHBhdGggb2YgdGhlIGZpZWxkLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBiaW5kaW5nIGNvbnRleHQgcGF0aCAgOiAnL0VtcGxveWVlKDEpJy5cbiAqIHNvdXJjZSBwYXRoICAgICAgICAgICA6ICcvRW1wbG95ZWUvTmFtZScuXG4gKiByZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoOiAnTmFtZScuXG4gKiBAcGFyYW0gZmllbGRCaW5kaW5nQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBzb3VyY2VwYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBSZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoLlxuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGgoZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCwgc291cmNlcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQoZmllbGRCaW5kaW5nQ29udGV4dCk7XG5cdHJldHVybiBzb3VyY2VwYXRoLnJlcGxhY2UoYCR7bWV0YVBhdGh9L2AsIFwiXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIGZvciB0aGUgZmllbGQgaW4gdGhlIHRhYmxlIGZvciB3aGljaCB0aGUgYmluZGluZyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlIGNvbnRleHQgZGF0YS5cbiAqXG4gKiBJbiBhIGZldyBzY2VuYXJpb3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGluc2lkZSB0aGUgdGFibGUsIHRoZSB2YWx1ZSBzdGF0ZSBmb3JtYXR0ZXIgaXMgY2FsbGVkIGZvciB2YWx1ZSB1cGRhdGUgd2l0aCB0aGUgY29udGV4dCB3aXRob3V0IGNvbnRleHQgZGF0YShjb250ZXh0LmdldE9iamVjdCgpIGlzIHVuZGVmaW5lZCkuXG4gKiBOT1RFOiBUaGlzIHNvbHV0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCB0aGFuIHVzaW5nIHRoZSB0YWJsZSBsaXN0YmluZGluZydzIGNoYW5nZSBldmVudC5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNUZXh0IFZhbHVlIHN0YXRlIHRleHQgd2hlbiB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBzaG93blxuICovXG5mdW5jdGlvbiBfc2V0VmFsdWVTdGF0ZUZvckZpZWxkV2l0aE5vRGF0YUNvbnRleHQoXG5cdHRoaXM6IEZpZWxkLFxuXHRyZWNvbW1lbmRhdGlvblZhbHVlOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb246IHN0cmluZyxcblx0ZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YWxsX3JlY29tbWVuZGF0aW9uczogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IFJlY29tbWVuZGF0aW9uSW5mbyB8IHVuZGVmaW5lZCxcblx0c291cmNlcGF0aDogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbnNUZXh0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBmblNldFZhbHVlU3RhdGUgPSAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBPRGF0YUxpc3RCaW5kaW5nPik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgbGlzdENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGxpc3RDb250ZXh0cy5pbmNsdWRlcyhmaWVsZEJpbmRpbmdDb250ZXh0KSkge1xuXHRcdFx0aWYgKGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkpIHtcblx0XHRcdFx0Y29uc3QgeyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9ID0gX2dldFZhbHVlU3RhdGVGb3JSZWNvbW1lbmRhdGlvbkZpZWxkKFxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0c291cmNlcGF0aCxcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0LFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5zZXRWYWx1ZVN0YXRlVGV4dCh2YWx1ZVN0YXRlVGV4dCk7XG5cdFx0XHRcdHRoaXMuc2V0VmFsdWVTdGF0ZSh2YWx1ZVN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGxpc3RCaW5kaW5nLmRldGFjaENoYW5nZShmblNldFZhbHVlU3RhdGUpO1xuXHRcdH1cblx0fTtcblxuXHRmaWVsZEJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hDaGFuZ2UoZm5TZXRWYWx1ZVN0YXRlKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBhcHBsaWNhYmxlLlxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uVmFsdWVcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSB0aGUgcmVjb21tZW5kYXRpb24gbW9kZWxcbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gc291cmNlcGF0aCBQcm9wZXJ0eSBQYXRoIG9mIHRoZSBGaWVsZFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc1RleHQgVmFsdWUgc3RhdGUgdGV4dCBpbiBjYXNlIHRoZSByZWNvbW1lbmRhdGlvbnMgYXJlIHNob3duXG4gKiBAcGFyYW0gZmllbGQgRmllbGRcbiAqIEByZXR1cm5zIFZhbHVlIHN0YXRlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0aGUgdmFsdWUgc3RhdGUgYW5kIHRoZSB2YWx1ZSBzdGF0ZSB0ZXh0LlxuICovXG5mdW5jdGlvbiBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRmaWVsZEJpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRzb3VyY2VwYXRoOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uc1RleHQ6IHN0cmluZyxcblx0ZmllbGQ6IEZpZWxkXG4pOiB7IHZhbHVlU3RhdGU6IFZhbHVlU3RhdGU7IHZhbHVlU3RhdGVUZXh0OiBzdHJpbmcgfSB7XG5cdC8vIElmIG5vIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZmllbGQgd2l0aCBwcmVzZW50IGNvbnRleHQgd2UgcmVzZXQgdmFsdWUgc3RhdGUuXG5cdGxldCB2YWx1ZVN0YXRlID0gVmFsdWVTdGF0ZS5Ob25lLFxuXHRcdHZhbHVlU3RhdGVUZXh0ID0gXCJcIjtcblxuXHRpZiAocmVjb21tZW5kYXRpb25WYWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uKSB7XG5cdFx0dmFsdWVTdGF0ZVRleHQgPSByZWNvbW1lbmRhdGlvbnNUZXh0O1xuXHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHR9IGVsc2UgaWYgKGFsbF9yZWNvbW1lbmRhdGlvbnMpIHtcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IF9nZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChmaWVsZEJpbmRpbmdDb250ZXh0LCBzb3VyY2VwYXRoKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zIGFzIEluQ29tcGxldGVuZXNzSW5mb1R5cGUsXG5cdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0c291cmNlcGF0aCxcblx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoXG5cdFx0KTtcblx0XHRsZXQgcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM7XG5cdFx0aWYgKGFsbF9yZWNvbW1lbmRhdGlvbnM/LnZlcnNpb24gPT09IDIpIHtcblx0XHRcdHJlbGV2YW50UmVjb21tZW5kYXRpb25zID0gYWRkaXRpb25hbFZhbHVlSGVscGVyLmdldEFkZGl0aW9uYWxWYWx1ZUZyb21Qcm9wZXJ0eVBhdGgoXG5cdFx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zXG5cdFx0XHQpIGFzIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQoYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiA9PT0gMiAmJiAocmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnZhbHVlIHx8IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0KSkgfHxcblx0XHRcdCghYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiAmJiB2YWx1ZXM/Lmxlbmd0aClcblx0XHQpIHtcblx0XHRcdHZhbHVlU3RhdGVUZXh0ID0gcmVjb21tZW5kYXRpb25zVGV4dDtcblx0XHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZVN0YXRlID09PSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uKSB7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmllbGQpO1xuXHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpLnJlY29tbWVuZGF0aW9ucy5pbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudChcIm51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWRcIik7XG5cdH1cblxuXHRyZXR1cm4geyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgdmFsdWUgc3RhdGUgb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIGFuZCB0aGUgYXZhaWxhYmxlIHJlY29tbWVuZGF0aW9ucy5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZSBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBhbGxfcmVjb21tZW5kYXRpb25zXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBQYWdlIGlzIGluIGVkaXQgbW9kZVxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSBmaWVsZFZhbHVlIFByZXNlbnQgZmllbGQgdmFsdWVcbiAqIEBwYXJhbSBmaWVsZFRleHRWYWx1ZVxuICogQHJldHVybnMgRmllbGQgdmFsdWUgc3RhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VmFsdWVTdGF0ZShcblx0dGhpczogRmllbGQsXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRpc0VkaXRhYmxlOiBib29sZWFuLFxuXHRzb3VyY2VwYXRoPzogc3RyaW5nLFxuXHRmaWVsZFZhbHVlPzogc3RyaW5nLFxuXHRmaWVsZFRleHRWYWx1ZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nXG4pOiBWYWx1ZVN0YXRlIHtcblx0Ly8gV2UgcmVzZXQgdmFsdWUgc3RhdGUgd2hlbjpcblx0Ly8gMS4gTm8gY29udGV4dCBpcyBib3VuZCB0byB0aGUgZmllbGQuXG5cdC8vIDIuIGlzRWRpdGFibGUgaXMgZmFsc2Vcblx0Y29uc3QgZmllbGRCaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWZpZWxkQmluZGluZ0NvbnRleHQgfHwgIWlzRWRpdGFibGUpIHtcblx0XHRyZXR1cm4gVmFsdWVTdGF0ZS5Ob25lO1xuXHR9XG5cdGZpZWxkVGV4dFZhbHVlID0gZmllbGRUZXh0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBmaWVsZFRleHRWYWx1ZTtcblx0Ly8gV2UgZG9uJ3QgY2hhbmdlIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIHdoZW46XG5cdC8vIDEuIFNvdXJjZSBwYXRoIGlzIG5vdCBhdmFpbGFibGUuXG5cdC8vIDIuIEZpZWxkIGNvbnRleHQgaXMgdHJhbnNpZW50LlxuXHRjb25zdCBwcmVzZW50VmFsdWVTdGF0ZSA9IHRoaXMuZ2V0VmFsdWVTdGF0ZSgpIGFzIFZhbHVlU3RhdGU7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gZmllbGRCaW5kaW5nQ29udGV4dC5pc1RyYW5zaWVudD8uKCk7XG5cdGlmICghc291cmNlcGF0aCB8fCBpc1RyYW5zaWVudCkge1xuXHRcdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcblx0fVxuXG5cdC8vIFdlIHJlc2V0IHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB2YWx1ZSBzdGF0ZSByZXByZXNlbnRzIHJlY29tbWVuZGF0aW9ucy5cblx0Y29uc3QgcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlID1cblx0XHRyZWNvbW1lbmRhdGlvblZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gfHwgKCEhYWxsX3JlY29tbWVuZGF0aW9ucyAmJiBPYmplY3Qua2V5cyhhbGxfcmVjb21tZW5kYXRpb25zKS5sZW5ndGggPiAwKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25zVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlJFQ09NTUVOREFUSU9OU19EQVRBX0lORk9cIik7XG5cdGNvbnN0IHByZXNlbnRWYWx1ZVN0YXRlVGV4dCA9IHRoaXMuZ2V0VmFsdWVTdGF0ZVRleHQoKTtcblx0Y29uc3QgcHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMgPSBwcmVzZW50VmFsdWVTdGF0ZSA9PT0gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbiAmJiBwcmVzZW50VmFsdWVTdGF0ZVRleHQgPT09IHJlY29tbWVuZGF0aW9uc1RleHQ7XG5cdC8vSWYgZmllbGQgdmFsdWUgaXMgcHJlc2VudCBvciByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgYnV0IHByZXNlbnRTdGF0ZSBpcyBJbmZvIHRoZW4gd2UgY2hhbmdlIGl0IHRvIE5vbmVcblx0aWYgKHByZXNlbnRWU0lzUmVjb21tZW5kYXRpb25zICYmICghcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlIHx8IGZpZWxkVmFsdWUgfHwgZmllbGRUZXh0VmFsdWUpKSB7XG5cdFx0cmV0dXJuIFZhbHVlU3RhdGUuTm9uZTtcblx0fVxuXG5cdC8vIFJlY29tbWVuZGF0aW9ucyBzaGFsbCBiZSBhcHBsaWNhYmxlIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIHByZXNlbnQgdmFsdWUgc3RhdGU6XG5cdC8vIDEuIElzIE5vbmVcblx0Ly8gMi4gQWxyZWFkeSByZXByZXNlbnRzIHJlY29tZW5kYXRpb25zLlxuXHRjb25zdCByZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUgPSByZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUgJiYgKHByZXNlbnRWYWx1ZVN0YXRlID09IFZhbHVlU3RhdGUuTm9uZSB8fCBwcmVzZW50VlNJc1JlY29tbWVuZGF0aW9ucyk7XG5cdGlmICghZmllbGRWYWx1ZSAmJiAhZmllbGRUZXh0VmFsdWUgJiYgcmVjb21tZW5kYXRpb25zU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IWZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkgJiZcblx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpPy5pc0E/LjxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpXG5cdFx0KSB7XG5cdFx0XHQvLyBObyBjb250ZXh0IGRhdGEgYXZhbGlsYWJsZSB5ZXQgYW5kIHBhcmVudCBiaW5kaW5nIGlzIGxpc3RiaW5kaW5nIChGaWVsZCBpbiBUYWJsZSBzY2VuYXJpbylcblx0XHRcdF9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRzb3VyY2VwYXRoLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB7IHZhbHVlU3RhdGUsIHZhbHVlU3RhdGVUZXh0IH0gPSBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdHNvdXJjZXBhdGgsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uc1RleHQsXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnNldFZhbHVlU3RhdGVUZXh0KHZhbHVlU3RhdGVUZXh0KTtcblx0XHRcdHJldHVybiB2YWx1ZVN0YXRlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcbn1cbmZvcm1hdFZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcIi5fZm9ybWF0dGVycy5BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZm9ybWF0VmFsdWVTdGF0ZVwiO1xuXG5mdW5jdGlvbiBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zPzogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCB2YWx1ZSA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy52YWx1ZTtcblx0Y29uc3QgdGV4dCA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0O1xuXHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0Ly9zZXQgdXAgdGhlIHBsYWNlaG9sZGVyIGFjY29yZGluZyB0byB0ZXh0IGFycmFuZ2VtZW50XG5cdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModmFsdWUgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHRleHQgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModGV4dCBhcyBzdHJpbmcsIHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHZhbHVlIGFzIHN0cmluZywgdGV4dCBhcyBzdHJpbmcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHBsYWNlaG9sZGVyID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyh0ZXh0IGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nKTtcblx0fVxuXHRyZXR1cm4gcGxhY2Vob2xkZXI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsYWNlaG9sZGVyKFxuXHR0aGlzOiBGaWVsZCxcblx0cmVjb21tZW5kYXRpb25WYWx1ZTogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmcsXG5cdGFsbF9yZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uSW5mbyxcblx0Y3VycmVudFBhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRjdXJyZW50Qm91bmRNZXNzYWdlVHlwZT86IE1lc3NhZ2VUeXBlIHwgbnVsbCxcblx0ZWRpdFN0eWxlUGxhY2Vob2xkZXI/OiBzdHJpbmcsXG5cdGRpc3BsYXlNb2RlPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgcGxhY2Vob2xkZXJEYXRhOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyID0gZWRpdFN0eWxlUGxhY2Vob2xkZXIgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBlZGl0U3R5bGVQbGFjZWhvbGRlcjtcblx0aWYgKGN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlKSB7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdGlmIChyZWNvbW1lbmRhdGlvblZhbHVlKSB7XG5cdFx0cGxhY2Vob2xkZXJEYXRhID0gX2dldFBsYWNlaG9sZGVyVGV4dCh7IHZhbHVlOiByZWNvbW1lbmRhdGlvblZhbHVlLCB0ZXh0OiByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIH0sIGRpc3BsYXlNb2RlKTtcblx0fSBlbHNlIGlmIChhbGxfcmVjb21tZW5kYXRpb25zICYmIE9iamVjdC5rZXlzKGFsbF9yZWNvbW1lbmRhdGlvbnMpLmxlbmd0aCAmJiBhbGxfcmVjb21tZW5kYXRpb25zLnZlcnNpb24gPT09IDIpIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSB8fCBjdXJyZW50UGFnZUNvbnRleHQ7XG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSB0aGlzLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nUGF0aCkge1xuXHRcdFx0Ly9nZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBiYXNlZCBvbiBwcm9wZXJ0eSBwYXRoIGFuZCBiaW5kaW5nIGNvbnRleHQgcGFzc2VkXG5cdFx0XHRjb25zdCByZWxldmFudFJlY29tbWVuZGF0aW9ucyA9IGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5nZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoKFxuXHRcdFx0XHRiaW5kaW5nUGF0aCxcblx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnNcblx0XHRcdCkgYXMgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlO1xuXHRcdFx0Ly9pZiB3ZSBnZXQgcmVjb21tZW5kYXRpb25zIHRoZW4gcHVzaCB0aGUgdmFsdWVzXG5cdFx0XHRwbGFjZWhvbGRlckRhdGEgPSBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zLCBkaXNwbGF5TW9kZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZWRpdFN0eWxlUGxhY2Vob2xkZXIgJiYgIXBsYWNlaG9sZGVyRGF0YSkge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBwbGFjZWhvbGRlckRhdGE7XG59XG5mb3JtYXRQbGFjZWhvbGRlci5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNmb3JtYXRQbGFjZWhvbGRlclwiO1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svZnVuY3Rpb25zLmh0bWwjdGhpcy1wYXJhbWV0ZXJzIGZvciBtb3JlIGRldGFpbCBvbiB0aGlzIHdlaXJkIHN5bnRheFxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIEFkZGl0aW9uYWxWYWx1ZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRpZiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmhhc093blByb3BlcnR5KHNOYW1lKSkge1xuXHRcdHJldHVybiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZ2V0R3Jvd2luZyA9IGdldEdyb3dpbmc7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZSA9IGZvcm1hdFZhbHVlU3RhdGU7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0UGxhY2Vob2xkZXIgPSBmb3JtYXRQbGFjZWhvbGRlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuU2NvcGUuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyO1xuXG5leHBvcnQgZGVmYXVsdCBhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFVBQVVBLENBQWVDLGtCQUFzRCxFQUFFQyxZQUFv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
@@ -1,6 +1,6 @@
1
- import ObjectPath from "sap/base/util/ObjectPath";
2
1
  import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
3
2
  import CommonUtils from "sap/fe/core/CommonUtils";
3
+ import Scope from "sap/fe/core/formatters/Scope";
4
4
  import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
5
5
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
6
6
  import type { InCompletenessInfoType } from "sap/fe/core/helpers/RecommendationHelper";
@@ -31,7 +31,7 @@ function getGrowing(this: MTable, recommendationData: InCompletenessInfoType | u
31
31
  }
32
32
  return false;
33
33
  }
34
- getGrowing.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#getGrowing";
34
+ getGrowing.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#getGrowing";
35
35
 
36
36
  /**
37
37
  * Get the relative property path of the field.
@@ -242,7 +242,7 @@ function formatValueState(
242
242
 
243
243
  return presentValueState;
244
244
  }
245
- formatValueState.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#formatValueState";
245
+ formatValueState.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#formatValueState";
246
246
 
247
247
  function _getPlaceholderText(relevantRecommendations?: StandardRecommendationDataType, displayMode?: string): string | undefined {
248
248
  let placeholder: string | undefined;
@@ -306,7 +306,7 @@ function formatPlaceholder(
306
306
  }
307
307
  return placeholderData;
308
308
  }
309
- formatPlaceholder.__functionName = "sap.fe.macros.internal.valuehelp.AdditionalValueFormatter#formatPlaceholder";
309
+ formatPlaceholder.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#formatPlaceholder";
310
310
 
311
311
  // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
312
312
  /**
@@ -328,6 +328,8 @@ additionalValueFormatter.getGrowing = getGrowing;
328
328
  additionalValueFormatter.formatValueState = formatValueState;
329
329
  additionalValueFormatter.formatPlaceholder = formatPlaceholder;
330
330
 
331
- ObjectPath.set("sap.fe.macros.internal.valuehelp.AdditionalValueFormatter", additionalValueFormatter);
331
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
332
+ // @ts-ignore
333
+ Scope._formatters.AdditionalValueFormatter = additionalValueFormatter;
332
334
 
333
335
  export default additionalValueFormatter;