@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
@@ -1,4 +1,4 @@
1
- import type { EntityType,Property } from "@sap-ux/vocabularies-types";
1
+ import type { EntityType, Property } from "@sap-ux/vocabularies-types";
2
2
  import type { PropertyPath } from "@sap-ux/vocabularies-types/Edm";
3
3
  import { CommonAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/Common";
4
4
  import type { SelectionFields } from "@sap-ux/vocabularies-types/vocabularies/UI";
@@ -8,13 +8,13 @@ import type AppComponent from "sap/fe/core/AppComponent";
8
8
  import type { BaseTreeModifier } from "sap/fe/core/CommonUtils";
9
9
  import CommonUtils from "sap/fe/core/CommonUtils";
10
10
  import ConverterContext from "sap/fe/core/converters/ConverterContext";
11
- import type { BaseManifestSettings,HiddenDraft } from "sap/fe/core/converters/ManifestSettings";
11
+ import type { BaseManifestSettings, HiddenDraft } from "sap/fe/core/converters/ManifestSettings";
12
12
  import ManifestWrapper from "sap/fe/core/converters/ManifestWrapper";
13
13
  import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
14
14
  import type { IDiagnostics } from "sap/fe/core/converters/TemplateConverter";
15
15
  import type { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
16
16
  import type { PropertyTypeConfig } from "sap/fe/core/converters/controls/Common/table/Columns";
17
- import type { FilterField,PropertyInfo,PropertyInfoExternal } from "sap/fe/core/converters/controls/ListReport/FilterBar";
17
+ import type { FilterField, PropertyInfo, PropertyInfoExternal } from "sap/fe/core/converters/controls/ListReport/FilterBar";
18
18
  import * as FilterBarConverter from "sap/fe/core/converters/controls/ListReport/FilterBar";
19
19
  import { getAllCustomAggregates } from "sap/fe/core/helpers/MetaModelFunction";
20
20
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
@@ -23,6 +23,7 @@ import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataM
23
23
  import { ODATA_TYPE_MAPPING } from "sap/fe/core/templating/DisplayModeFormatter";
24
24
  import CommonHelper from "sap/fe/macros/CommonHelper";
25
25
  import DelegateUtil from "sap/fe/macros/DelegateUtil";
26
+ import { type default as FEFilterBar } from "sap/fe/macros/controls/FilterBar";
26
27
  import SemanticDateOperators from "sap/fe/macros/filterBar/SemanticDateOperators";
27
28
  import type { AnnotationValueListType } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
28
29
  import type TableAPI from "sap/fe/macros/table/TableAPI";
@@ -37,6 +38,7 @@ import type { ConditionObject } from "sap/ui/mdc/condition/Condition";
37
38
  import Condition from "sap/ui/mdc/condition/Condition";
38
39
  import ConditionConverter from "sap/ui/mdc/condition/ConditionConverter";
39
40
  import ConditionValidated from "sap/ui/mdc/enums/ConditionValidated";
41
+ import OperatorName from "sap/ui/mdc/enums/OperatorName";
40
42
  import type { IFilter } from "sap/ui/mdc/library";
41
43
  import TypeMap from "sap/ui/mdc/odata/v4/TypeMap";
42
44
  import StateUtil from "sap/ui/mdc/p13n/StateUtil";
@@ -126,7 +128,8 @@ const oFilterUtils = {
126
128
  metaModel?: ODataMetaModel,
127
129
  appComponent?: AppComponent,
128
130
  oModifier?: BaseTreeModifier,
129
- lineItemTerm?: string
131
+ lineItemTerm?: string,
132
+ propertyInfosFromFilterBar?: PropertyInfo[]
130
133
  ): FilterField[] {
131
134
  const oMetaModel = this._getFilterMetaModel(oFilterControl, metaModel);
132
135
  const sFilterEntityTypePath = DelegateUtil.getCustomData<string>(oFilterControl, "entityType");
@@ -149,7 +152,8 @@ const oFilterUtils = {
149
152
  includeHidden,
150
153
  oModifier,
151
154
  lineItemTerm,
152
- annotationPath
155
+ annotationPath,
156
+ propertyInfosFromFilterBar
153
157
  );
154
158
  },
155
159
 
@@ -372,8 +376,8 @@ const oFilterUtils = {
372
376
  },
373
377
 
374
378
  /**
375
- * Transforms DateTimeOffset precision 7 filters by converting EQ operators to BT operators
376
- * with microsecond precision range from .0000000 to .9990000.
379
+ * Transforms DateTimeOffset filters by converting EQ operators to BT operators
380
+ * with precision-based range from .000... to .999... based on property precision.
377
381
  * @param aFilters Array of filter objects to transform
378
382
  * @param mConditions Filter conditions from the filter bar
379
383
  * @param oFilterBar The filter bar instance to access property information
@@ -401,8 +405,8 @@ const oFilterUtils = {
401
405
  return;
402
406
  }
403
407
 
404
- // Create a set of condition paths that are DateTimeOffset precision 7
405
- const dateTimeOffsetPaths: Set<string> = new Set<string>();
408
+ // Create a map of condition paths to their precision levels
409
+ const dateTimeOffsetPaths: Map<string, number> = new Map<string, number>();
406
410
 
407
411
  Object.keys(mConditions).forEach(function (sConditionPath: string): void {
408
412
  if (mConditions[sConditionPath] && mConditions[sConditionPath].length > 0) {
@@ -420,15 +424,16 @@ const oFilterUtils = {
420
424
  }
421
425
  | undefined;
422
426
 
423
- // Check if property is DateTimeOffset with precision 7
427
+ // Check if property is DateTimeOffset
424
428
  const isDateTimeOffset: boolean =
425
429
  (propertyInfo?.dataType?.includes("DateTimeOffset") ?? false) ||
426
430
  (propertyInfo?.typeConfig?.typeInstance?.getName().includes("DateTimeOffset") ?? false);
427
431
  const precision: number | undefined =
428
432
  propertyInfo?.constraints?.precision ?? propertyInfo?.typeConfig?.typeInstance?.constraints?.precision;
429
433
 
430
- if (isDateTimeOffset && precision === 7) {
431
- dateTimeOffsetPaths.add(sConditionPath);
434
+ // Only process DateTimeOffset properties with defined precision
435
+ if (isDateTimeOffset && precision !== undefined && precision > 0) {
436
+ dateTimeOffsetPaths.set(sConditionPath, precision);
432
437
  }
433
438
  }
434
439
  });
@@ -440,9 +445,9 @@ const oFilterUtils = {
440
445
  /**
441
446
  * Recursively transforms filters to handle all possible nested aFilters structures.
442
447
  * @param aFilters Array of filter objects to transform
443
- * @param dateTimeOffsetPaths Set of condition paths that are DateTimeOffset precision 7
448
+ * @param dateTimeOffsetPaths Map of condition paths to their precision levels
444
449
  */
445
- _transformDateTimeOffSetFilterValueRecursively: function (aFilters: Filter[], dateTimeOffsetPaths: Set<string>): void {
450
+ _transformDateTimeOffSetFilterValueRecursively: function (aFilters: Filter[], dateTimeOffsetPaths: Map<string, number>): void {
446
451
  for (let i = 0; i < aFilters.length; i++) {
447
452
  const filter: Filter = aFilters[i];
448
453
 
@@ -457,6 +462,7 @@ const oFilterUtils = {
457
462
  const filterPath: string | undefined = filter.getPath();
458
463
  const filterOperator: FilterOperator | undefined = filter.getOperator() as FilterOperator | undefined;
459
464
  const filterValue1: unknown = filter.getValue1();
465
+ const filterValue2: unknown = filter.getValue2?.();
460
466
 
461
467
  // Handle undefined filterOperator gracefully
462
468
  if (filterOperator === undefined) {
@@ -467,15 +473,24 @@ const oFilterUtils = {
467
473
  continue; // Skip this filter and continue with next one
468
474
  }
469
475
 
470
- if (filterOperator === "EQ" && filterValue1 !== undefined && filterValue1 !== null) {
476
+ // Check for transformation conditions:
477
+ // 1. EQ operator with valid first value
478
+ // 2. Any operator with two values (irrespective of operator type)
479
+ const shouldTransform: boolean =
480
+ (filterOperator === "EQ" && filterValue1 !== undefined && filterValue1 !== null) ||
481
+ (filterValue1 !== undefined && filterValue1 !== null && filterValue2 !== undefined && filterValue2 !== null);
482
+
483
+ if (shouldTransform) {
471
484
  // For direct properties - check if the path matches any condition path
472
485
  if (filterPath && dateTimeOffsetPaths.has(filterPath)) {
473
- const transformedFilter: Filter | null = this._transformDateTimeOffSetFilterValue(filter);
486
+ const precision: number = dateTimeOffsetPaths.get(filterPath)!;
487
+ const transformedFilter: Filter | null = this._transformDateTimeOffSetFilterValue(filter, precision);
474
488
  if (transformedFilter) {
475
489
  aFilters[i] = transformedFilter;
476
490
  }
477
491
  }
478
492
  } else if (filterOperator === "Any") {
493
+ // Handle navigation property filters
479
494
  const nestedFilter = filter.getCondition();
480
495
  if (!nestedFilter) {
481
496
  continue;
@@ -501,6 +516,7 @@ const oFilterUtils = {
501
516
  const subFilterPath: string | undefined = subFilter.getPath();
502
517
  const subFilterOperator: FilterOperator | undefined = subFilter.getOperator() as FilterOperator | undefined;
503
518
  const subFilterValue1: unknown = subFilter.getValue1();
519
+ const subFilterValue2: unknown = subFilter.getValue2?.();
504
520
 
505
521
  // Handle undefined subFilterOperator gracefully
506
522
  if (subFilterOperator === undefined) {
@@ -511,9 +527,17 @@ const oFilterUtils = {
511
527
  continue; // Skip this sub-filter
512
528
  }
513
529
 
514
- if (subFilterOperator === "EQ" && subFilterValue1 !== undefined && subFilterValue1 !== null) {
530
+ // Check for transformation conditions for sub-filters
531
+ const shouldTransformSubFilter: boolean =
532
+ (subFilterOperator === "EQ" && subFilterValue1 !== undefined && subFilterValue1 !== null) ||
533
+ (subFilterValue1 !== undefined &&
534
+ subFilterValue1 !== null &&
535
+ subFilterValue2 !== undefined &&
536
+ subFilterValue2 !== null);
537
+
538
+ if (shouldTransformSubFilter) {
515
539
  // Check if any condition path matches the navigation pattern
516
- const matchingConditionPath: string | undefined = Array.from(dateTimeOffsetPaths).find(function (
540
+ const matchingConditionPath: string | undefined = Array.from(dateTimeOffsetPaths.keys()).find(function (
517
541
  sConditionPath: string
518
542
  ): boolean {
519
543
  // Extract navigation and property parts from condition path
@@ -529,7 +553,8 @@ const oFilterUtils = {
529
553
  });
530
554
 
531
555
  if (matchingConditionPath) {
532
- const transformedSubFilter: Filter | null = this._transformDateTimeOffSetFilterValue(subFilter);
556
+ const precision: number = dateTimeOffsetPaths.get(matchingConditionPath)!;
557
+ const transformedSubFilter: Filter | null = this._transformDateTimeOffSetFilterValue(subFilter, precision);
533
558
  if (transformedSubFilter) {
534
559
  nestedFilterWithMultipleConditions.aFilters[j] = transformedSubFilter;
535
560
  hasTransformation = true;
@@ -554,11 +579,10 @@ const oFilterUtils = {
554
579
  // Handle single condition within navigation property
555
580
  const nestedFilterPath: string | undefined = nestedFilter.getPath();
556
581
  const nestedFilterOperator: FilterOperator | undefined = nestedFilter.getOperator() as FilterOperator | undefined;
557
-
558
582
  const nestedFilterValue1: unknown = nestedFilter.getValue1();
583
+ const nestedFilterValue2: unknown = nestedFilter.getValue2?.();
559
584
 
560
585
  // Handle undefined nestedFilterOperator gracefully
561
-
562
586
  if (nestedFilterOperator === undefined) {
563
587
  Log.warning(
564
588
  "FilterUtils._transformDateTimeOffsetFilters: Filter operator is undefined, skipping filter transformation",
@@ -567,9 +591,17 @@ const oFilterUtils = {
567
591
  continue; // Skip this nested filter
568
592
  }
569
593
 
570
- if (nestedFilterOperator === "EQ" && nestedFilterValue1 !== undefined && nestedFilterValue1 !== null) {
594
+ // Check for transformation conditions for nested filters
595
+ const shouldTransformNested: boolean =
596
+ (nestedFilterOperator === "EQ" && nestedFilterValue1 !== undefined && nestedFilterValue1 !== null) ||
597
+ (nestedFilterValue1 !== undefined &&
598
+ nestedFilterValue1 !== null &&
599
+ nestedFilterValue2 !== undefined &&
600
+ nestedFilterValue2 !== null);
601
+
602
+ if (shouldTransformNested) {
571
603
  // Check if any condition path matches the navigation pattern
572
- const matchingConditionPath: string | undefined = Array.from(dateTimeOffsetPaths).find(function (
604
+ const matchingConditionPath: string | undefined = Array.from(dateTimeOffsetPaths.keys()).find(function (
573
605
  sConditionPath: string
574
606
  ): boolean {
575
607
  // Extract navigation and property parts from condition path
@@ -585,7 +617,11 @@ const oFilterUtils = {
585
617
  });
586
618
 
587
619
  if (matchingConditionPath) {
588
- const transformedNestedFilter: Filter | null = this._transformDateTimeOffSetFilterValue(nestedFilter);
620
+ const precision: number = dateTimeOffsetPaths.get(matchingConditionPath)!;
621
+ const transformedNestedFilter: Filter | null = this._transformDateTimeOffSetFilterValue(
622
+ nestedFilter,
623
+ precision
624
+ );
589
625
  if (transformedNestedFilter) {
590
626
  // Create new Any filter with transformed nested filter
591
627
  aFilters[i] = new Filter({
@@ -603,31 +639,53 @@ const oFilterUtils = {
603
639
  },
604
640
 
605
641
  /**
606
- * Transforms a single filter value from EQ to BT with microsecond precision.
607
- * @param filter The filter object to transform
608
- * @returns The transformed filter or null if no transformation needed
642
+ * Transforms a single filter value for DateTimeOffset precision properties.
643
+ * Handles EQ operator by converting to BT range, and adjusts second value for any filter with two values.
644
+ * Precision determines the number of decimal places: precision 3 = .999, precision 7 = .9999999.
645
+ * @param filter The filter to transform
646
+ * @param precision The precision level for the DateTimeOffset property
647
+ * @returns Transformed filter with microsecond precision or null if no transformation needed
609
648
  */
610
- _transformDateTimeOffSetFilterValue: function (filter: Filter): Filter | null {
611
- const originalValue: string | undefined = filter.getValue1()?.toString();
649
+ _transformDateTimeOffSetFilterValue: function (filter: Filter, precision: number): Filter | null {
650
+ const operator: string | undefined = filter.getOperator();
651
+ const value1: unknown = filter.getValue1();
652
+ const value2: unknown = filter.getValue2?.();
653
+
654
+ if (operator === undefined) {
655
+ Log.warning(
656
+ "FilterUtils._transformDateTimeOffsetFilters: Filter operator is undefined, skipping filter transformation",
657
+ `filterPath: ${filter.getPath()}, filterValue1: ${value1}`
658
+ );
659
+ return null;
660
+ }
612
661
 
613
- if (!originalValue) {
662
+ // Only process filters with valid first value
663
+ if (value1 === null || value1 === undefined) {
614
664
  return null;
615
665
  }
616
666
 
617
- // Parse the datetime value: 2025-08-13T15:19:15.0000000+02:00 or 2025-08-13T15:19:15.0000000Z
618
- const dateTimeMatch: RegExpMatchArray | null = originalValue.match(
667
+ const originalValue1: string = value1 as string;
668
+
669
+ // Parse datetime: 2025-08-13T15:19:15.0000000+02:00 or Z
670
+ const dateTimeMatch1: RegExpMatchArray | null = originalValue1.match(
619
671
  /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(?:\.(\d{0,7}))?([+-]\d{2}:\d{2}|Z)$/
620
672
  );
621
673
 
622
- if (dateTimeMatch) {
623
- const dateTimePart: string = dateTimeMatch[1];
624
- const timezone: string = dateTimeMatch[3];
674
+ if (!dateTimeMatch1) {
675
+ return null;
676
+ }
677
+
678
+ const dateTimePart1: string = dateTimeMatch1[1];
679
+ const timezone1: string = dateTimeMatch1[3];
625
680
 
626
- // Create microsecond range values
627
- const startValue = `${dateTimePart}.0000000${timezone}`;
628
- const endValue = `${dateTimePart}.9990000${timezone}`;
681
+ // Generate precision-based decimal suffix (e.g., .999 for precision 3, .9999999 for precision 7)
682
+ const maxDecimalValue: string = "9".repeat(precision);
683
+
684
+ // Handle EQ operator - convert to BT with full precision range
685
+ if (operator === "EQ") {
686
+ const startValue = `${dateTimePart1}.${"0".repeat(precision)}${timezone1}`;
687
+ const endValue = `${dateTimePart1}.${maxDecimalValue}${timezone1}`;
629
688
 
630
- // Return new BT filter with microsecond range
631
689
  return new Filter({
632
690
  path: filter.getPath(),
633
691
  operator: FilterOperator.BT,
@@ -636,6 +694,32 @@ const oFilterUtils = {
636
694
  });
637
695
  }
638
696
 
697
+ // For any operator with two values, adjust the second value to max precision
698
+ if (value2 !== null && value2 !== undefined) {
699
+ const originalValue2: string = value2 as string;
700
+ const dateTimeMatch2: RegExpMatchArray | null = originalValue2.match(
701
+ /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(?:\.(\d{0,7}))?([+-]\d{2}:\d{2}|Z)$/
702
+ );
703
+
704
+ if (!dateTimeMatch2) {
705
+ return null;
706
+ }
707
+
708
+ const dateTimePart2: string = dateTimeMatch2[1];
709
+ const timezone2: string = dateTimeMatch2[3];
710
+
711
+ // Keep first value unchanged, modify second value to max precision
712
+ const adjustedValue2 = `${dateTimePart2}.${maxDecimalValue}${timezone2}`;
713
+
714
+ return new Filter({
715
+ path: filter.getPath(),
716
+ operator: filter.getOperator(),
717
+ value1: originalValue1, // Keep original first value unchanged
718
+ value2: adjustedValue2 // Transform second value to max precision
719
+ });
720
+ }
721
+
722
+ // No transformation needed for single-value non-EQ operators
639
723
  return null;
640
724
  },
641
725
  hasEditStateFilterRecursively: function (filters: Filter[]): boolean {
@@ -939,6 +1023,12 @@ const oFilterUtils = {
939
1023
  return;
940
1024
  }
941
1025
 
1026
+ // We wait for filter bar to be ready.
1027
+ if (oFilterBar.isA<FEFilterBar>("sap.fe.macros.controls.FilterBar")) {
1028
+ // _setFilterValues could be called in case of adaptation filter bar, so we explicitly check for FE filter bar control.
1029
+ await oFilterBar.whenInitialized();
1030
+ }
1031
+
942
1032
  // common filter Operators need a value. Do nothing if this value is undefined
943
1033
  // BCP: 2270135274
944
1034
  if (
@@ -998,8 +1088,8 @@ const oFilterUtils = {
998
1088
  // Get the value list info of the property to later check whether the values exist
999
1089
  const valueListInfo = await this._getValueListInfo(mainFilterBarControl, propertyPath);
1000
1090
  if (values && values.length) {
1001
- if (sOperator === FilterOperator.BT) {
1002
- // The operator BT requires one condition with both thresholds
1091
+ if (sOperator === OperatorName.BT || sOperator === OperatorName.NOTBT) {
1092
+ // The operator BT and NOTBT require one condition with both thresholds
1003
1093
  filter[sConditionPath] = [Condition.createCondition(sOperator, values, null, null, ConditionValidated.NotValidated)];
1004
1094
  } else {
1005
1095
  // Regular single and multi value conditions, if there are no values, we do not want any conditions
@@ -1077,7 +1167,8 @@ const oFilterUtils = {
1077
1167
  includeHidden?: boolean,
1078
1168
  oModifier?: BaseTreeModifier,
1079
1169
  lineItemTerm?: string,
1080
- annotationPath?: string
1170
+ annotationPath?: string,
1171
+ propertyInfosFromFilterBar?: PropertyInfo[]
1081
1172
  ): FilterField[] {
1082
1173
  const filterFields = FilterBarConverter.getSelectionFields(
1083
1174
  oConverterContext,
@@ -1087,9 +1178,15 @@ const oFilterUtils = {
1087
1178
  lineItemTerm
1088
1179
  );
1089
1180
  let selectionFields: FilterField[] = filterFields.selectionFields;
1090
- const propertyInfos = (oFilterControl as Partial<IFilterControl>).data
1091
- ? this.getFilterPropertyInfo(oFilterControl)
1092
- : JSON.parse(filterFields.sPropertyInfo.replace(/\\\{/g, "{").replace(/\\\}/g, "}")); // propertyInfo string is returned from the getSelectionFields
1181
+ let propertyInfos: PropertyInfo[];
1182
+ //During templating time while adding a flex change propertyInfosFromFilterBar will be passed
1183
+ if (propertyInfosFromFilterBar && propertyInfosFromFilterBar.length > 0) {
1184
+ propertyInfos = propertyInfosFromFilterBar;
1185
+ } else {
1186
+ propertyInfos = (oFilterControl as Partial<IFilterControl>).data
1187
+ ? this.getFilterPropertyInfo(oFilterControl)
1188
+ : JSON.parse(filterFields.sPropertyInfo.replace(/\\\{/g, "{").replace(/\\\}/g, "}")); // propertyInfo string is returned from the getSelectionFields
1189
+ }
1093
1190
  if (
1094
1191
  (oModifier
1095
1192
  ? oModifier.getControlType(oFilterControl) === "sap.ui.mdc.FilterBar"
@@ -1301,6 +1398,31 @@ const oFilterUtils = {
1301
1398
  }
1302
1399
  return _propertyInfo;
1303
1400
  });
1401
+ },
1402
+
1403
+ /**
1404
+ * Checks if the Property already exists in the propertyInfo array, used during templating to avoid duplicates.
1405
+ * @param parentControl FilterBar control where the custom data is stored
1406
+ * @param modifier Modifier
1407
+ * @param propertyInfoName Name of the property to be checked
1408
+ * @returns Array of PropertyInfos after removing the unwanted properties
1409
+ */
1410
+ _checkIfPropertyInfoExists: async function (
1411
+ parentControl: FilterBar,
1412
+ modifier: BaseTreeModifier,
1413
+ propertyInfoName: string
1414
+ ): Promise<boolean> {
1415
+ let propertyInfo: PropertyInfo[] = [];
1416
+ try {
1417
+ const customDataValue = await DelegateUtil.getCustomDataWithModifier<string>(parentControl, "feFilterInfo", modifier);
1418
+ if (customDataValue) {
1419
+ propertyInfo = JSON.parse(customDataValue);
1420
+ return propertyInfo.some((obj: PropertyInfo) => obj.name === propertyInfoName);
1421
+ }
1422
+ return false;
1423
+ } catch (error) {
1424
+ return false;
1425
+ }
1304
1426
  }
1305
1427
  };
1306
1428
 
@@ -102,7 +102,7 @@ sap.ui.define(["sap/fe/macros/filterBar/DefaultSemanticDateOperators", "sap/ui/c
102
102
  filterOperator,
103
103
  group: {
104
104
  id: 3,
105
- text: resourceBundle.getText(`M_EXTENDED_OPERATOR_GRP_TEXT`, [])
105
+ text: resourceBundle.getText(`M_EXTENDED_OPERATOR_GRP_TEXT`)
106
106
  },
107
107
  calcRange: function () {
108
108
  const [fromPick, toPick] = operatorsToExtend[primitiveOperator].fnRanges();
@@ -217,4 +217,4 @@ sap.ui.define(["sap/fe/macros/filterBar/DefaultSemanticDateOperators", "sap/ui/c
217
217
  };
218
218
  return ExtendedSemanticDateOperators;
219
219
  }, false);
220
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcGVyYXRvcnNUb0V4dGVuZCIsImdldEZpeGVkRGF0ZVNpbmdsZVZhbHVlT3BlcmF0aW9ucyIsInNpbmdsZVZhbHVlRGF0ZU9wZXJhdG9yTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiRlJPTV9PUCIsIlRPX09QIiwiZXh0ZW5kZWRGcm9tT3BlcmF0b3JzIiwicmVkdWNlIiwib3BlcmF0aW9ucyIsInNpbmdsZURhdGVPcGVyYXRvcktleSIsImtleSIsImNhdGVnb3J5IiwiRFlOQU1JQ19EQVRFX0NBVEVHT1JZIiwicHJpbWl0aXZlT3BlcmF0b3IiLCJleHRlbmRlZFRvT3BlcmF0b3JzIiwiZXh0ZW5kZWRPcGVyYXRvcnMiLCJleHRlbmRlZE9wZXJhdG9yTmFtZXMiLCJpc0Zyb21FeHRlbmRlZE9wZXJhdG9yIiwib3BlcmF0b3JOYW1lIiwiaW5jbHVkZXMiLCJpc1RvRXh0ZW5kZWRPcGVyYXRvciIsImdldEV4dGVuZGVkT3BlcmF0b3IiLCJyZXNvdXJjZUJ1bmRsZSIsImZpbHRlck9wZXJhdG9yIiwiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRGaWx0ZXJPcGVyYXRvciIsInRva2VuVGV4dEtleSIsImNyZWF0ZVJhbmdlT3BlcmF0b3IiLCJuYW1lIiwibG9uZ1RleHQiLCJnZXRUZXh0IiwidG9rZW5UZXh0IiwidmFsdWVUeXBlcyIsIk9wZXJhdG9yVmFsdWVUeXBlIiwiU3RhdGljIiwiZ3JvdXAiLCJpZCIsInRleHQiLCJjYWxjUmFuZ2UiLCJmcm9tUGljayIsInRvUGljayIsImZuUmFuZ2VzIiwiY29uZmlnIiwiUmFuZ2VPcGVyYXRvciIsImdldE9wZXJhdG9yc0luZm8iLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29ycmVzcG9uZGluZ1NpbmdsZURhdGVPcGVyYXRvciIsImlzRXh0ZW5kZWRPcGVyYXRvciIsIk1vZGVsT3BlcmF0b3IiLCJFUSIsIkdFIiwiTEUiLCJhZGRFeHRlbmRlZEZpbHRlck9wZXJhdG9ycyIsIm9wZXJhdG9yTmFtZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJvcGVyYXRvcnMiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvciIsIm9wZXJhdG9yIiwicHVzaCIsImFkZE9wZXJhdG9ycyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IERZTkFNSUNfREFURV9DQVRFR09SWSwgZ2V0Rml4ZWREYXRlU2luZ2xlVmFsdWVPcGVyYXRpb25zIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFVuaXZlcnNhbERhdGUgZnJvbSBcInNhcC91aS9jb3JlL2RhdGUvVW5pdmVyc2FsRGF0ZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgUmFuZ2VPcGVyYXRvciwgeyB0eXBlIENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vUmFuZ2VPcGVyYXRvclwiO1xuaW1wb3J0IE9wZXJhdG9yVmFsdWVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL09wZXJhdG9yVmFsdWVUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRmlsdGVyT3BlcmF0b3IgfSBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIE1vZGVsT3BlcmF0b3IgfSBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5cbi8qKlxuICogU2luZ2xlIHZhbHVlIGRhdGUgb3BlcmF0b3JzIHdpdGggcmFuZ2VzLlxuICogV2Ugc2hhbGwgdXNlIHRoZXNlIHNpbmdsZSB2YWx1ZSBkYXRlIG9wZXJhdG9yIGFuZCBjb21iaW5lIHdpdGggXCJGUk9NXCIgYW5kIFwiVE9cIiBvcGVyYXRvcnMuXG4gKiBUaGUgcmVzdWx0YW50IG9wZXJhdG9yIGlzIGV4cGVjdGVkIHRvIGJlIGEgcmFuZ2Ugb3BlcmF0b3IuIEhlbmNlIHdlIHdvdWxkIG5lZWQgdGhlIHJhbmdlcy5cbiAqIExpa2U6XG4gKiB7XG4gKiBcdDxvcGVyYXRvciBuYW1lPjoge1xuICogXHRcdGtleTogPGlkZW50aWZpZXI+LFxuICogXHRcdGZuUmFuZ2VzOiA8QVBJIHRvIGdldCB0aGUgcmFuZ2U+XG4gKiBcdH0sXG4gKiBcdDxtb3JlIG9wZXJhdG9ycz4uLi5cbiAqIH1cbiAqL1xuY29uc3Qgb3BlcmF0b3JzVG9FeHRlbmQgPSBnZXRGaXhlZERhdGVTaW5nbGVWYWx1ZU9wZXJhdGlvbnMoKTtcblxuLy8gU2luZ2xlIFZhbHVlIGRhdGUgb3BlcmF0b3JzOiBMaWtlIFwiVE9EQVlcIiwgXCJUT01PUlJPV1wiLCBcIkxBU1REQVlZRUFSXCIsIGV0Yy5cbnR5cGUgU2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lID0ga2V5b2YgdHlwZW9mIG9wZXJhdG9yc1RvRXh0ZW5kO1xuY29uc3Qgc2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lcyA9IE9iamVjdC5rZXlzKG9wZXJhdG9yc1RvRXh0ZW5kKSBhcyBTaW5nbGVWYWx1ZURhdGVPcGVyYXRvck5hbWVbXTtcblxuY29uc3QgRlJPTV9PUCA9IFwiRlJPTVwiO1xuY29uc3QgVE9fT1AgPSBcIlRPXCI7XG50eXBlIEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSA9IGAke3R5cGVvZiBGUk9NX09QfSR7U2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lfWA7XG50eXBlIEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lID0gYCR7dHlwZW9mIFRPX09QfSR7U2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lfWA7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBpbmZvIHRvIGlkZW50aWZ5IHdoaWNoIG9wZXJhdG9ycyB0aGUgdXNlciB3YW50cyB0byBzdXBwb3J0LlxuICogTGlrZTpcbiAqIHtcbiAqIFx0PG9wZXJhdG9yIG5hbWU+OiB7XG4gKiBcdFx0a2V5OiA8aWRlbnRpZmllcj4sXG4gKiBcdFx0Y2F0ZWdvcnk6IDx0eXBlIG9mIG9wZXJhdG9yPlxuICogXHR9LFxuICogXHQ8bW9yZSBvcGVyYXRvcnM+Li4uXG4gKiB9XG4gKi9cbnR5cGUgT3BlcmF0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0Y2F0ZWdvcnk6IHN0cmluZztcbn07XG50eXBlIEV4dGVuZGVkT3BlcmF0aW9uID0gT3BlcmF0aW9uICYge1xuXHRwcmltaXRpdmVPcGVyYXRvcjogU2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lO1xufTtcbmNvbnN0IGV4dGVuZGVkRnJvbU9wZXJhdG9yczogUmVjb3JkPEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+ID0gc2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lcy5yZWR1Y2UoXG5cdChvcGVyYXRpb25zLCBzaW5nbGVEYXRlT3BlcmF0b3JLZXkpID0+IHtcblx0XHRvcGVyYXRpb25zW2Ake0ZST01fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YF0gPSB7XG5cdFx0XHRrZXk6IGAke0ZST01fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YCxcblx0XHRcdGNhdGVnb3J5OiBEWU5BTUlDX0RBVEVfQ0FURUdPUlksXG5cdFx0XHRwcmltaXRpdmVPcGVyYXRvcjogc2luZ2xlRGF0ZU9wZXJhdG9yS2V5XG5cdFx0fTtcblx0XHRyZXR1cm4gb3BlcmF0aW9ucztcblx0fSxcblx0e30gYXMgUmVjb3JkPEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+XG4pO1xuY29uc3QgZXh0ZW5kZWRUb09wZXJhdG9yczogUmVjb3JkPEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lLCBFeHRlbmRlZE9wZXJhdGlvbj4gPSBzaW5nbGVWYWx1ZURhdGVPcGVyYXRvck5hbWVzLnJlZHVjZShcblx0KG9wZXJhdGlvbnMsIHNpbmdsZURhdGVPcGVyYXRvcktleSkgPT4ge1xuXHRcdG9wZXJhdGlvbnNbYCR7VE9fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YF0gPSB7XG5cdFx0XHRrZXk6IGAke1RPX09QfSR7c2luZ2xlRGF0ZU9wZXJhdG9yS2V5fWAsXG5cdFx0XHRjYXRlZ29yeTogRFlOQU1JQ19EQVRFX0NBVEVHT1JZLFxuXHRcdFx0cHJpbWl0aXZlT3BlcmF0b3I6IHNpbmdsZURhdGVPcGVyYXRvcktleVxuXHRcdH07XG5cdFx0cmV0dXJuIG9wZXJhdGlvbnM7XG5cdH0sXG5cdHt9IGFzIFJlY29yZDxFeHRlbmRlZFRPT3BlcmF0b3JzTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+XG4pO1xuXG4vLyBFeHRlbmQgT3BlcmF0b3JzIGxpa2UgXCJGUk9NVE9EQVlcIiwgXCJUT1RPREFZXCIsIFwiRlJPTVlFU1RFUkRBWVwiLCBldGMuXG5jb25zdCBleHRlbmRlZE9wZXJhdG9ycyA9IHsgLi4uZXh0ZW5kZWRGcm9tT3BlcmF0b3JzLCAuLi5leHRlbmRlZFRvT3BlcmF0b3JzIH07XG5leHBvcnQgdHlwZSBFeHRlbmRlZE9wZXJhdG9yTmFtZSA9IEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSB8IEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lO1xuY29uc3QgZXh0ZW5kZWRPcGVyYXRvck5hbWVzID0gT2JqZWN0LmtleXMoZXh0ZW5kZWRPcGVyYXRvcnMpIGFzIEV4dGVuZGVkT3BlcmF0b3JOYW1lW107XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIG9wZXJhdG9yIGlzIGEgRlJPTSBleHRlbmRlZCBvcGVyYXRvciBsaWtlIFwiRlJPTVRPREFZXCIsIFwiRlJPTVRPTU9SUk9XXCIuXG4gKiBAcGFyYW0gb3BlcmF0b3JOYW1lIE9wZXJhdG9yIG5hbWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIEJvb2xlYW4uIElmICdmcm9tJyBleHRlbmRlZCBvcGVyYXRvci5cbiAqL1xuZnVuY3Rpb24gaXNGcm9tRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWU6IHN0cmluZyk6IG9wZXJhdG9yTmFtZSBpcyBFeHRlbmRlZEZST01PcGVyYXRvck5hbWUge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMoZXh0ZW5kZWRGcm9tT3BlcmF0b3JzKS5pbmNsdWRlcyhvcGVyYXRvck5hbWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBvcGVyYXRvciBpcyBhIFRPIGV4dGVuZGVkIG9wZXJhdG9yIGxpa2UgXCJUT1RPREFZXCIsIFwiVE9UT01PUlJPV1wiLlxuICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBCb29sZWFuLiBJZiAndG8nIGV4dGVuZGVkIG9wZXJhdG9yLlxuICovXG5mdW5jdGlvbiBpc1RvRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWU6IHN0cmluZyk6IG9wZXJhdG9yTmFtZSBpcyBFeHRlbmRlZFRPT3BlcmF0b3JzTmFtZSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhleHRlbmRlZFRvT3BlcmF0b3JzKS5pbmNsdWRlcyhvcGVyYXRvck5hbWUpO1xufVxuXG4vKipcbiAqIEdldCBleHRlbmRlZCBvcGVyYXRvciBieSBjb21iaW5pbmcgXCJGUk9NXCIgYW5kIFwiVE9cIiBvcGVyYXRpb25zIHdpdGggc2luZ2xlIHZhbHVlIGRhdGVzLlxuICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lXG4gKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgUmVzb3VyY2UgdG8gY29sbGVjdCB0cmFuc2xhdGVkIHRleHRzIGZvciB0aGUgb3BlcmF0b3JzIHRvIGJlIHNob3duIGluIFVJLlxuICogQHJldHVybnMgUmFuZ2VPcGVyYXRvclxuICovXG5mdW5jdGlvbiBnZXRFeHRlbmRlZE9wZXJhdG9yKG9wZXJhdG9yTmFtZTogRXh0ZW5kZWRPcGVyYXRvck5hbWUsIHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSk6IFJhbmdlT3BlcmF0b3Ige1xuXHRjb25zdCB7IHByaW1pdGl2ZU9wZXJhdG9yIH0gPSBleHRlbmRlZE9wZXJhdG9yc1tvcGVyYXRvck5hbWVdO1xuXHRjb25zdCBmaWx0ZXJPcGVyYXRvciA9IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdG9yKG9wZXJhdG9yTmFtZSkgYXMgTW9kZWxPcGVyYXRvci5HRSB8IE1vZGVsT3BlcmF0b3IuTEU7XG5cdGNvbnN0IHRva2VuVGV4dEtleSA9IGBNX0VYVEVOREVEX09QRVJBVE9SXyR7b3BlcmF0b3JOYW1lfV9UT0tFTl9URVhUYDtcblx0cmV0dXJuIEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzLmNyZWF0ZVJhbmdlT3BlcmF0b3Ioe1xuXHRcdG5hbWU6IG9wZXJhdG9yTmFtZSxcblx0XHRsb25nVGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dCh0b2tlblRleHRLZXksIFtdKSxcblx0XHR0b2tlblRleHQ6IGAke3Jlc291cmNlQnVuZGxlLmdldFRleHQodG9rZW5UZXh0S2V5LCBbXSl9ICh7MH0pYCxcblx0XHR2YWx1ZVR5cGVzOiBbT3BlcmF0b3JWYWx1ZVR5cGUuU3RhdGljXSxcblx0XHRmaWx0ZXJPcGVyYXRvcixcblx0XHRncm91cDogeyBpZDogMywgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChgTV9FWFRFTkRFRF9PUEVSQVRPUl9HUlBfVEVYVGAsIFtdKSB9LFxuXHRcdGNhbGNSYW5nZTogZnVuY3Rpb24gKCk6IFVuaXZlcnNhbERhdGVbXSB7XG5cdFx0XHRjb25zdCBbZnJvbVBpY2ssIHRvUGlja10gPSBvcGVyYXRvcnNUb0V4dGVuZFtwcmltaXRpdmVPcGVyYXRvcl0uZm5SYW5nZXMoKTtcblx0XHRcdHJldHVybiBbaXNGcm9tRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWUpID8gZnJvbVBpY2sgOiB0b1BpY2tdO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzID0ge1xuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgUmFuZ2VPcGVyYXRvciBmcm9tIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBjb25maWcgUmFuZ2UgT3BlcmF0b3IgY29uZmlndXJhdGlvbnNcblx0ICogQHJldHVybnMgUmFuZ2UgT3BlcmF0b3Jcblx0ICovXG5cdGNyZWF0ZVJhbmdlT3BlcmF0b3IoY29uZmlnOiBDb25maWd1cmF0aW9uKTogUmFuZ2VPcGVyYXRvciB7XG5cdFx0cmV0dXJuIG5ldyBSYW5nZU9wZXJhdG9yKHsgLi4uY29uZmlnIH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBPcGVyYXRvcnMgSW5mbyB0byBoZWxwIGRlY2lkZSB3aGljaCBvcGVyYXRpb25zIHRoZSB1c2VyIHdhbnRzIHRvIGVuYWJsZS5cblx0ICogQHJldHVybnMgT3BlcmF0b3JzIEluZm9cblx0ICovXG5cdGdldE9wZXJhdG9yc0luZm8oKTogUmVjb3JkPEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+IHtcblx0XHRyZXR1cm4gZXh0ZW5kZWRPcGVyYXRvcnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZGVkIFNlbWFudGljIERhdGUgb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkLlxuXHQgKiBAcmV0dXJucyBFeHRlbmRlZCBPcGVyYXRvciBuYW1lc1xuXHQgKi9cblx0Z2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFsuLi5leHRlbmRlZE9wZXJhdG9yTmFtZXNdO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNpbmdsZSBkYXRlIG9wZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHRoZSBleHRlbmRlZCBvcGVyYXRvci5cblx0ICogQHBhcmFtIG9wZXJhdG9yTmFtZSBFeHRlbmRlZCBvcGVyYXRvciBuYW1lXG5cdCAqIEByZXR1cm5zIFNpbmdsZSBkYXRlIG9wZXJhdG9yIG5hbWVcblx0ICovXG5cdGdldENvcnJlc3BvbmRpbmdTaW5nbGVEYXRlT3BlcmF0b3Iob3BlcmF0b3JOYW1lOiBFeHRlbmRlZE9wZXJhdG9yTmFtZSk6IFNpbmdsZVZhbHVlRGF0ZU9wZXJhdG9yTmFtZSB7XG5cdFx0Y29uc3QgeyBwcmltaXRpdmVPcGVyYXRvciB9ID0gZXh0ZW5kZWRPcGVyYXRvcnNbb3BlcmF0b3JOYW1lXTtcblx0XHRyZXR1cm4gcHJpbWl0aXZlT3BlcmF0b3I7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBpdCBpcyBhbiBleHRlbmRlZCBvcGVyYXRvci5cblx0ICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIEV4dGVuZGVkIE9wZXJhdG9yIG5hbWVzXG5cdCAqL1xuXHRpc0V4dGVuZGVkT3BlcmF0b3Iob3BlcmF0b3JOYW1lOiBzdHJpbmcpOiBvcGVyYXRvck5hbWUgaXMgRXh0ZW5kZWRPcGVyYXRvck5hbWUge1xuXHRcdHJldHVybiAoZXh0ZW5kZWRPcGVyYXRvck5hbWVzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhvcGVyYXRvck5hbWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgb3BlcmF0b3IgaXMgYSBUTyBleHRlbmRlZCBvcGVyYXRvciBsaWtlIFwiVE9UT0RBWVwiLCBcIlRPVE9NT1JST1dcIi5cblx0ICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4uIElmICd0bycgZXh0ZW5kZWQgb3BlcmF0b3IuXG5cdCAqL1xuXHRnZXRGaWx0ZXJPcGVyYXRvcihvcGVyYXRvck5hbWU6IEV4dGVuZGVkT3BlcmF0b3JOYW1lKTogRmlsdGVyT3BlcmF0b3Ige1xuXHRcdGxldCBmaWx0ZXJPcGVyYXRvciA9IE1vZGVsT3BlcmF0b3IuRVE7XG5cdFx0aWYgKGlzRnJvbUV4dGVuZGVkT3BlcmF0b3Iob3BlcmF0b3JOYW1lKSkge1xuXHRcdFx0ZmlsdGVyT3BlcmF0b3IgPSBNb2RlbE9wZXJhdG9yLkdFO1xuXHRcdH0gZWxzZSBpZiAoaXNUb0V4dGVuZGVkT3BlcmF0b3Iob3BlcmF0b3JOYW1lKSkge1xuXHRcdFx0ZmlsdGVyT3BlcmF0b3IgPSBNb2RlbE9wZXJhdG9yLkxFO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyT3BlcmF0b3I7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZCBleHRlbmRlZCBvcGVyYXRpb25zIHRvIE1EQyBmaWx0ZXJpbmcgZW52aXJvbm1lbnQuXG5cdCAqXG5cdCAqIFByZXNlbnRseSBvbmx5IHNpbmdsZSB2YWx1ZSBkYXRlIG9wZXJhdG9ycyBleHRlbmRlZCB2aWEgVE8vRlJPTSBvcGVyYXRpb25zIGNhbiBiZSBhZGRlZC5cblx0ICogVGhlc2UgaW5jbHVkZS4uLlxuXHQgKiAxLiBcIkZST01ZRVNURVJEQVlcIi5cblx0ICogMi4gXCJGUk9NVE9EQVlcIi5cblx0ICogMy4gXCJGUk9NVE9NT1JST1dcIi5cblx0ICogNC4gXCJGUk9NRklSU1REQVlXRUVLXCIuXG5cdCAqIDUuIFwiRlJPTUxBU1REQVlXRUVLXCIuXG5cdCAqIDYuIFwiRlJPTUZJUlNUREFZTU9OVEhcIi5cblx0ICogNy4gXCJGUk9NTEFTVERBWU1PTlRIXCIuXG5cdCAqIDguIFwiRlJPTUZJUlNUREFZUVVBUlRFUlwiLlxuXHQgKiA5LiBcIkZST01MQVNUREFZUVVBUlRFUlwiLlxuXHQgKiAxMC4gXCJGUk9NRklSU1REQVlZRUFSXCIuXG5cdCAqIDExLiBcIkZST01MQVNUREFZWUVBUlwiLlxuXHQgKiAxMi4gXCJUT1lFU1RFUkRBWVwiLlxuXHQgKiAxMy4gXCJUT1RPREFZXCIuXG5cdCAqIDE0LiBcIlRPVE9NT1JST1dcIi5cblx0ICogMTUuIFwiVE9GSVJTVERBWVdFRUtcIi5cblx0ICogMTYuIFwiVE9MQVNUREFZV0VFS1wiLlxuXHQgKiAxNy4gXCJUT0ZJUlNUREFZTU9OVEhcIi5cblx0ICogMTguIFwiVE9MQVNUREFZTU9OVEhcIi5cblx0ICogMTkuIFwiVE9GSVJTVERBWVFVQVJURVJcIi5cblx0ICogMjAuIFwiVE9MQVNUREFZUVVBUlRFUlwiLlxuXHQgKiAyMS4gXCJUT0ZJUlNUREFZWUVBUlwiLlxuXHQgKiAyMi4gXCJUT0xBU1REQVlZRUFSXCIuXG5cdCAqXG5cdCAqIFRoZXNlIGN1c3RvbSBvcGVyYXRvcnMgY3JlYXRlZCBieSBGRSBhcmUgbm90IGF2YWlsYWJsZSBieSBkZWZhdWx0IHdpdGggTURDIGZpbHRlcmluZyBlbnZpcm9ubWVudC5cblx0ICogVGhlIG5lZWQgdG8gYmUgYWRkZWQgb24tZGVtYW5kIHZpYSBNREMgQVBJcyBsaWtlICdGaWx0ZXJPcGVyYXRvclV0aWxzLmFkZE9wZXJhdG9yJy5cblx0ICpcblx0ICogSWYgb3BlcmF0b3JOYW1lcyBpcyB1bmRlZmluZWQsIHRoZW4gd2UgYWRkIGFsbCBleHRlbmRlZCBzZW1hbnRpYyBkYXRlIG9wZXJhdG9ycy5cblx0ICogQHBhcmFtIG9wZXJhdG9yTmFtZXMgT3BlcmF0aW9uIG5hbWVzIHRvIGJlIGFkZGVkIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGFkZEV4dGVuZGVkRmlsdGVyT3BlcmF0b3JzKG9wZXJhdG9yTmFtZXM6IHN0cmluZ1tdID0gZXh0ZW5kZWRPcGVyYXRvck5hbWVzKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0Y29uc3Qgb3BlcmF0b3JzOiBSYW5nZU9wZXJhdG9yW10gPSBvcGVyYXRvck5hbWVzLnJlZHVjZSgob3BlcmF0b3JzLCBvcGVyYXRvck5hbWUpID0+IHtcblx0XHRcdGlmICghRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yKG9wZXJhdG9yTmFtZSkgJiYgRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaXNFeHRlbmRlZE9wZXJhdG9yKG9wZXJhdG9yTmFtZSkpIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSBnZXRFeHRlbmRlZE9wZXJhdG9yKG9wZXJhdG9yTmFtZSwgcmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0XHRvcGVyYXRvcnMucHVzaChvcGVyYXRvcik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0b3JzO1xuXHRcdH0sIFtdIGFzIFJhbmdlT3BlcmF0b3JbXSk7XG5cdFx0RmlsdGVyT3BlcmF0b3JVdGlsLmFkZE9wZXJhdG9ycyhvcGVyYXRvcnMpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxpQkFBaUIsR0FBR0MsaUNBQWlDLENBQUMsQ0FBQzs7RUFFN0Q7O0VBRUEsTUFBTUMsNEJBQTRCLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSixpQkFBaUIsQ0FBa0M7RUFFcEcsTUFBTUssT0FBTyxHQUFHLE1BQU07RUFDdEIsTUFBTUMsS0FBSyxHQUFHLElBQUk7O0VBSWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBUUEsTUFBTUMscUJBQTBFLEdBQUdMLDRCQUE0QixDQUFDTSxNQUFNLENBQ3JILENBQUNDLFVBQVUsRUFBRUMscUJBQXFCLEtBQUs7SUFDdENELFVBQVUsQ0FBQyxHQUFHSixPQUFPLEdBQUdLLHFCQUFxQixFQUFFLENBQUMsR0FBRztNQUNsREMsR0FBRyxFQUFFLEdBQUdOLE9BQU8sR0FBR0sscUJBQXFCLEVBQUU7TUFDekNFLFFBQVEsRUFBRUMscUJBQXFCO01B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
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcGVyYXRvcnNUb0V4dGVuZCIsImdldEZpeGVkRGF0ZVNpbmdsZVZhbHVlT3BlcmF0aW9ucyIsInNpbmdsZVZhbHVlRGF0ZU9wZXJhdG9yTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiRlJPTV9PUCIsIlRPX09QIiwiZXh0ZW5kZWRGcm9tT3BlcmF0b3JzIiwicmVkdWNlIiwib3BlcmF0aW9ucyIsInNpbmdsZURhdGVPcGVyYXRvcktleSIsImtleSIsImNhdGVnb3J5IiwiRFlOQU1JQ19EQVRFX0NBVEVHT1JZIiwicHJpbWl0aXZlT3BlcmF0b3IiLCJleHRlbmRlZFRvT3BlcmF0b3JzIiwiZXh0ZW5kZWRPcGVyYXRvcnMiLCJleHRlbmRlZE9wZXJhdG9yTmFtZXMiLCJpc0Zyb21FeHRlbmRlZE9wZXJhdG9yIiwib3BlcmF0b3JOYW1lIiwiaW5jbHVkZXMiLCJpc1RvRXh0ZW5kZWRPcGVyYXRvciIsImdldEV4dGVuZGVkT3BlcmF0b3IiLCJyZXNvdXJjZUJ1bmRsZSIsImZpbHRlck9wZXJhdG9yIiwiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRGaWx0ZXJPcGVyYXRvciIsInRva2VuVGV4dEtleSIsImNyZWF0ZVJhbmdlT3BlcmF0b3IiLCJuYW1lIiwibG9uZ1RleHQiLCJnZXRUZXh0IiwidG9rZW5UZXh0IiwidmFsdWVUeXBlcyIsIk9wZXJhdG9yVmFsdWVUeXBlIiwiU3RhdGljIiwiZ3JvdXAiLCJpZCIsInRleHQiLCJjYWxjUmFuZ2UiLCJmcm9tUGljayIsInRvUGljayIsImZuUmFuZ2VzIiwiY29uZmlnIiwiUmFuZ2VPcGVyYXRvciIsImdldE9wZXJhdG9yc0luZm8iLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29ycmVzcG9uZGluZ1NpbmdsZURhdGVPcGVyYXRvciIsImlzRXh0ZW5kZWRPcGVyYXRvciIsIk1vZGVsT3BlcmF0b3IiLCJFUSIsIkdFIiwiTEUiLCJhZGRFeHRlbmRlZEZpbHRlck9wZXJhdG9ycyIsIm9wZXJhdG9yTmFtZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJvcGVyYXRvcnMiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvciIsIm9wZXJhdG9yIiwicHVzaCIsImFkZE9wZXJhdG9ycyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IERZTkFNSUNfREFURV9DQVRFR09SWSwgZ2V0Rml4ZWREYXRlU2luZ2xlVmFsdWVPcGVyYXRpb25zIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFVuaXZlcnNhbERhdGUgZnJvbSBcInNhcC91aS9jb3JlL2RhdGUvVW5pdmVyc2FsRGF0ZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgUmFuZ2VPcGVyYXRvciwgeyB0eXBlIENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vUmFuZ2VPcGVyYXRvclwiO1xuaW1wb3J0IE9wZXJhdG9yVmFsdWVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL09wZXJhdG9yVmFsdWVUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRmlsdGVyT3BlcmF0b3IgfSBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIE1vZGVsT3BlcmF0b3IgfSBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5cbi8qKlxuICogU2luZ2xlIHZhbHVlIGRhdGUgb3BlcmF0b3JzIHdpdGggcmFuZ2VzLlxuICogV2Ugc2hhbGwgdXNlIHRoZXNlIHNpbmdsZSB2YWx1ZSBkYXRlIG9wZXJhdG9yIGFuZCBjb21iaW5lIHdpdGggXCJGUk9NXCIgYW5kIFwiVE9cIiBvcGVyYXRvcnMuXG4gKiBUaGUgcmVzdWx0YW50IG9wZXJhdG9yIGlzIGV4cGVjdGVkIHRvIGJlIGEgcmFuZ2Ugb3BlcmF0b3IuIEhlbmNlIHdlIHdvdWxkIG5lZWQgdGhlIHJhbmdlcy5cbiAqIExpa2U6XG4gKiB7XG4gKiBcdDxvcGVyYXRvciBuYW1lPjoge1xuICogXHRcdGtleTogPGlkZW50aWZpZXI+LFxuICogXHRcdGZuUmFuZ2VzOiA8QVBJIHRvIGdldCB0aGUgcmFuZ2U+XG4gKiBcdH0sXG4gKiBcdDxtb3JlIG9wZXJhdG9ycz4uLi5cbiAqIH1cbiAqL1xuY29uc3Qgb3BlcmF0b3JzVG9FeHRlbmQgPSBnZXRGaXhlZERhdGVTaW5nbGVWYWx1ZU9wZXJhdGlvbnMoKTtcblxuLy8gU2luZ2xlIFZhbHVlIGRhdGUgb3BlcmF0b3JzOiBMaWtlIFwiVE9EQVlcIiwgXCJUT01PUlJPV1wiLCBcIkxBU1REQVlZRUFSXCIsIGV0Yy5cbnR5cGUgU2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lID0ga2V5b2YgdHlwZW9mIG9wZXJhdG9yc1RvRXh0ZW5kO1xuY29uc3Qgc2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lcyA9IE9iamVjdC5rZXlzKG9wZXJhdG9yc1RvRXh0ZW5kKSBhcyBTaW5nbGVWYWx1ZURhdGVPcGVyYXRvck5hbWVbXTtcblxuY29uc3QgRlJPTV9PUCA9IFwiRlJPTVwiO1xuY29uc3QgVE9fT1AgPSBcIlRPXCI7XG50eXBlIEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSA9IGAke3R5cGVvZiBGUk9NX09QfSR7U2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lfWA7XG50eXBlIEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lID0gYCR7dHlwZW9mIFRPX09QfSR7U2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lfWA7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBpbmZvIHRvIGlkZW50aWZ5IHdoaWNoIG9wZXJhdG9ycyB0aGUgdXNlciB3YW50cyB0byBzdXBwb3J0LlxuICogTGlrZTpcbiAqIHtcbiAqIFx0PG9wZXJhdG9yIG5hbWU+OiB7XG4gKiBcdFx0a2V5OiA8aWRlbnRpZmllcj4sXG4gKiBcdFx0Y2F0ZWdvcnk6IDx0eXBlIG9mIG9wZXJhdG9yPlxuICogXHR9LFxuICogXHQ8bW9yZSBvcGVyYXRvcnM+Li4uXG4gKiB9XG4gKi9cbnR5cGUgT3BlcmF0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0Y2F0ZWdvcnk6IHN0cmluZztcbn07XG50eXBlIEV4dGVuZGVkT3BlcmF0aW9uID0gT3BlcmF0aW9uICYge1xuXHRwcmltaXRpdmVPcGVyYXRvcjogU2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lO1xufTtcbmNvbnN0IGV4dGVuZGVkRnJvbU9wZXJhdG9yczogUmVjb3JkPEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+ID0gc2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lcy5yZWR1Y2UoXG5cdChvcGVyYXRpb25zLCBzaW5nbGVEYXRlT3BlcmF0b3JLZXkpID0+IHtcblx0XHRvcGVyYXRpb25zW2Ake0ZST01fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YF0gPSB7XG5cdFx0XHRrZXk6IGAke0ZST01fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YCxcblx0XHRcdGNhdGVnb3J5OiBEWU5BTUlDX0RBVEVfQ0FURUdPUlksXG5cdFx0XHRwcmltaXRpdmVPcGVyYXRvcjogc2luZ2xlRGF0ZU9wZXJhdG9yS2V5XG5cdFx0fTtcblx0XHRyZXR1cm4gb3BlcmF0aW9ucztcblx0fSxcblx0e30gYXMgUmVjb3JkPEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+XG4pO1xuY29uc3QgZXh0ZW5kZWRUb09wZXJhdG9yczogUmVjb3JkPEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lLCBFeHRlbmRlZE9wZXJhdGlvbj4gPSBzaW5nbGVWYWx1ZURhdGVPcGVyYXRvck5hbWVzLnJlZHVjZShcblx0KG9wZXJhdGlvbnMsIHNpbmdsZURhdGVPcGVyYXRvcktleSkgPT4ge1xuXHRcdG9wZXJhdGlvbnNbYCR7VE9fT1B9JHtzaW5nbGVEYXRlT3BlcmF0b3JLZXl9YF0gPSB7XG5cdFx0XHRrZXk6IGAke1RPX09QfSR7c2luZ2xlRGF0ZU9wZXJhdG9yS2V5fWAsXG5cdFx0XHRjYXRlZ29yeTogRFlOQU1JQ19EQVRFX0NBVEVHT1JZLFxuXHRcdFx0cHJpbWl0aXZlT3BlcmF0b3I6IHNpbmdsZURhdGVPcGVyYXRvcktleVxuXHRcdH07XG5cdFx0cmV0dXJuIG9wZXJhdGlvbnM7XG5cdH0sXG5cdHt9IGFzIFJlY29yZDxFeHRlbmRlZFRPT3BlcmF0b3JzTmFtZSwgRXh0ZW5kZWRPcGVyYXRpb24+XG4pO1xuXG4vLyBFeHRlbmQgT3BlcmF0b3JzIGxpa2UgXCJGUk9NVE9EQVlcIiwgXCJUT1RPREFZXCIsIFwiRlJPTVlFU1RFUkRBWVwiLCBldGMuXG5jb25zdCBleHRlbmRlZE9wZXJhdG9ycyA9IHsgLi4uZXh0ZW5kZWRGcm9tT3BlcmF0b3JzLCAuLi5leHRlbmRlZFRvT3BlcmF0b3JzIH07XG5leHBvcnQgdHlwZSBFeHRlbmRlZE9wZXJhdG9yTmFtZSA9IEV4dGVuZGVkRlJPTU9wZXJhdG9yTmFtZSB8IEV4dGVuZGVkVE9PcGVyYXRvcnNOYW1lO1xuY29uc3QgZXh0ZW5kZWRPcGVyYXRvck5hbWVzID0gT2JqZWN0LmtleXMoZXh0ZW5kZWRPcGVyYXRvcnMpIGFzIEV4dGVuZGVkT3BlcmF0b3JOYW1lW107XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIG9wZXJhdG9yIGlzIGEgRlJPTSBleHRlbmRlZCBvcGVyYXRvciBsaWtlIFwiRlJPTVRPREFZXCIsIFwiRlJPTVRPTU9SUk9XXCIuXG4gKiBAcGFyYW0gb3BlcmF0b3JOYW1lIE9wZXJhdG9yIG5hbWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIEJvb2xlYW4uIElmICdmcm9tJyBleHRlbmRlZCBvcGVyYXRvci5cbiAqL1xuZnVuY3Rpb24gaXNGcm9tRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWU6IHN0cmluZyk6IG9wZXJhdG9yTmFtZSBpcyBFeHRlbmRlZEZST01PcGVyYXRvck5hbWUge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMoZXh0ZW5kZWRGcm9tT3BlcmF0b3JzKS5pbmNsdWRlcyhvcGVyYXRvck5hbWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBvcGVyYXRvciBpcyBhIFRPIGV4dGVuZGVkIG9wZXJhdG9yIGxpa2UgXCJUT1RPREFZXCIsIFwiVE9UT01PUlJPV1wiLlxuICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBCb29sZWFuLiBJZiAndG8nIGV4dGVuZGVkIG9wZXJhdG9yLlxuICovXG5mdW5jdGlvbiBpc1RvRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWU6IHN0cmluZyk6IG9wZXJhdG9yTmFtZSBpcyBFeHRlbmRlZFRPT3BlcmF0b3JzTmFtZSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhleHRlbmRlZFRvT3BlcmF0b3JzKS5pbmNsdWRlcyhvcGVyYXRvck5hbWUpO1xufVxuXG4vKipcbiAqIEdldCBleHRlbmRlZCBvcGVyYXRvciBieSBjb21iaW5pbmcgXCJGUk9NXCIgYW5kIFwiVE9cIiBvcGVyYXRpb25zIHdpdGggc2luZ2xlIHZhbHVlIGRhdGVzLlxuICogQHBhcmFtIG9wZXJhdG9yTmFtZSBPcGVyYXRvciBuYW1lXG4gKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgUmVzb3VyY2UgdG8gY29sbGVjdCB0cmFuc2xhdGVkIHRleHRzIGZvciB0aGUgb3BlcmF0b3JzIHRvIGJlIHNob3duIGluIFVJLlxuICogQHJldHVybnMgUmFuZ2VPcGVyYXRvclxuICovXG5mdW5jdGlvbiBnZXRFeHRlbmRlZE9wZXJhdG9yKG9wZXJhdG9yTmFtZTogRXh0ZW5kZWRPcGVyYXRvck5hbWUsIHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSk6IFJhbmdlT3BlcmF0b3Ige1xuXHRjb25zdCB7IHByaW1pdGl2ZU9wZXJhdG9yIH0gPSBleHRlbmRlZE9wZXJhdG9yc1tvcGVyYXRvck5hbWVdO1xuXHRjb25zdCBmaWx0ZXJPcGVyYXRvciA9IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdG9yKG9wZXJhdG9yTmFtZSkgYXMgTW9kZWxPcGVyYXRvci5HRSB8IE1vZGVsT3BlcmF0b3IuTEU7XG5cdGNvbnN0IHRva2VuVGV4dEtleSA9IGBNX0VYVEVOREVEX09QRVJBVE9SXyR7b3BlcmF0b3JOYW1lfV9UT0tFTl9URVhUYDtcblx0cmV0dXJuIEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzLmNyZWF0ZVJhbmdlT3BlcmF0b3Ioe1xuXHRcdG5hbWU6IG9wZXJhdG9yTmFtZSxcblx0XHRsb25nVGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dCh0b2tlblRleHRLZXksIFtdKSxcblx0XHR0b2tlblRleHQ6IGAke3Jlc291cmNlQnVuZGxlLmdldFRleHQodG9rZW5UZXh0S2V5LCBbXSl9ICh7MH0pYCxcblx0XHR2YWx1ZVR5cGVzOiBbT3BlcmF0b3JWYWx1ZVR5cGUuU3RhdGljXSxcblx0XHRmaWx0ZXJPcGVyYXRvcixcblx0XHRncm91cDogeyBpZDogMywgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChgTV9FWFRFTkRFRF9PUEVSQVRPUl9HUlBfVEVYVGApIH0sXG5cdFx0Y2FsY1JhbmdlOiBmdW5jdGlvbiAoKTogVW5pdmVyc2FsRGF0ZVtdIHtcblx0XHRcdGNvbnN0IFtmcm9tUGljaywgdG9QaWNrXSA9IG9wZXJhdG9yc1RvRXh0ZW5kW3ByaW1pdGl2ZU9wZXJhdG9yXS5mblJhbmdlcygpO1xuXHRcdFx0cmV0dXJuIFtpc0Zyb21FeHRlbmRlZE9wZXJhdG9yKG9wZXJhdG9yTmFtZSkgPyBmcm9tUGljayA6IHRvUGlja107XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgPSB7XG5cdC8qKlxuXHQgKiBDcmVhdGlvbiBvZiBSYW5nZU9wZXJhdG9yIGZyb20gY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIGNvbmZpZyBSYW5nZSBPcGVyYXRvciBjb25maWd1cmF0aW9uc1xuXHQgKiBAcmV0dXJucyBSYW5nZSBPcGVyYXRvclxuXHQgKi9cblx0Y3JlYXRlUmFuZ2VPcGVyYXRvcihjb25maWc6IENvbmZpZ3VyYXRpb24pOiBSYW5nZU9wZXJhdG9yIHtcblx0XHRyZXR1cm4gbmV3IFJhbmdlT3BlcmF0b3IoeyAuLi5jb25maWcgfSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZXJhdG9ycyBJbmZvIHRvIGhlbHAgZGVjaWRlIHdoaWNoIG9wZXJhdGlvbnMgdGhlIHVzZXIgd2FudHMgdG8gZW5hYmxlLlxuXHQgKiBAcmV0dXJucyBPcGVyYXRvcnMgSW5mb1xuXHQgKi9cblx0Z2V0T3BlcmF0b3JzSW5mbygpOiBSZWNvcmQ8RXh0ZW5kZWRGUk9NT3BlcmF0b3JOYW1lLCBFeHRlbmRlZE9wZXJhdGlvbj4ge1xuXHRcdHJldHVybiBleHRlbmRlZE9wZXJhdG9ycztcblx0fSxcblxuXHQvKipcblx0ICogRXh0ZW5kZWQgU2VtYW50aWMgRGF0ZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQuXG5cdCAqIEByZXR1cm5zIEV4dGVuZGVkIE9wZXJhdG9yIG5hbWVzXG5cdCAqL1xuXHRnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gWy4uLmV4dGVuZGVkT3BlcmF0b3JOYW1lc107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2luZ2xlIGRhdGUgb3BlcmF0b3IgdXNlZCB0byBjcmVhdGUgdGhlIGV4dGVuZGVkIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gb3BlcmF0b3JOYW1lIEV4dGVuZGVkIG9wZXJhdG9yIG5hbWVcblx0ICogQHJldHVybnMgU2luZ2xlIGRhdGUgb3BlcmF0b3IgbmFtZVxuXHQgKi9cblx0Z2V0Q29ycmVzcG9uZGluZ1NpbmdsZURhdGVPcGVyYXRvcihvcGVyYXRvck5hbWU6IEV4dGVuZGVkT3BlcmF0b3JOYW1lKTogU2luZ2xlVmFsdWVEYXRlT3BlcmF0b3JOYW1lIHtcblx0XHRjb25zdCB7IHByaW1pdGl2ZU9wZXJhdG9yIH0gPSBleHRlbmRlZE9wZXJhdG9yc1tvcGVyYXRvck5hbWVdO1xuXHRcdHJldHVybiBwcmltaXRpdmVPcGVyYXRvcjtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGl0IGlzIGFuIGV4dGVuZGVkIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gb3BlcmF0b3JOYW1lIE9wZXJhdG9yIG5hbWUgdG8gY2hlY2tcblx0ICogQHJldHVybnMgRXh0ZW5kZWQgT3BlcmF0b3IgbmFtZXNcblx0ICovXG5cdGlzRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWU6IHN0cmluZyk6IG9wZXJhdG9yTmFtZSBpcyBFeHRlbmRlZE9wZXJhdG9yTmFtZSB7XG5cdFx0cmV0dXJuIChleHRlbmRlZE9wZXJhdG9yTmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdG9yTmFtZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBvcGVyYXRvciBpcyBhIFRPIGV4dGVuZGVkIG9wZXJhdG9yIGxpa2UgXCJUT1RPREFZXCIsIFwiVE9UT01PUlJPV1wiLlxuXHQgKiBAcGFyYW0gb3BlcmF0b3JOYW1lIE9wZXJhdG9yIG5hbWUgdG8gY2hlY2tcblx0ICogQHJldHVybnMgQm9vbGVhbi4gSWYgJ3RvJyBleHRlbmRlZCBvcGVyYXRvci5cblx0ICovXG5cdGdldEZpbHRlck9wZXJhdG9yKG9wZXJhdG9yTmFtZTogRXh0ZW5kZWRPcGVyYXRvck5hbWUpOiBGaWx0ZXJPcGVyYXRvciB7XG5cdFx0bGV0IGZpbHRlck9wZXJhdG9yID0gTW9kZWxPcGVyYXRvci5FUTtcblx0XHRpZiAoaXNGcm9tRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWUpKSB7XG5cdFx0XHRmaWx0ZXJPcGVyYXRvciA9IE1vZGVsT3BlcmF0b3IuR0U7XG5cdFx0fSBlbHNlIGlmIChpc1RvRXh0ZW5kZWRPcGVyYXRvcihvcGVyYXRvck5hbWUpKSB7XG5cdFx0XHRmaWx0ZXJPcGVyYXRvciA9IE1vZGVsT3BlcmF0b3IuTEU7XG5cdFx0fVxuXHRcdHJldHVybiBmaWx0ZXJPcGVyYXRvcjtcblx0fSxcblxuXHQvKipcblx0ICogQWRkIGV4dGVuZGVkIG9wZXJhdGlvbnMgdG8gTURDIGZpbHRlcmluZyBlbnZpcm9ubWVudC5cblx0ICpcblx0ICogUHJlc2VudGx5IG9ubHkgc2luZ2xlIHZhbHVlIGRhdGUgb3BlcmF0b3JzIGV4dGVuZGVkIHZpYSBUTy9GUk9NIG9wZXJhdGlvbnMgY2FuIGJlIGFkZGVkLlxuXHQgKiBUaGVzZSBpbmNsdWRlLi4uXG5cdCAqIDEuIFwiRlJPTVlFU1RFUkRBWVwiLlxuXHQgKiAyLiBcIkZST01UT0RBWVwiLlxuXHQgKiAzLiBcIkZST01UT01PUlJPV1wiLlxuXHQgKiA0LiBcIkZST01GSVJTVERBWVdFRUtcIi5cblx0ICogNS4gXCJGUk9NTEFTVERBWVdFRUtcIi5cblx0ICogNi4gXCJGUk9NRklSU1REQVlNT05USFwiLlxuXHQgKiA3LiBcIkZST01MQVNUREFZTU9OVEhcIi5cblx0ICogOC4gXCJGUk9NRklSU1REQVlRVUFSVEVSXCIuXG5cdCAqIDkuIFwiRlJPTUxBU1REQVlRVUFSVEVSXCIuXG5cdCAqIDEwLiBcIkZST01GSVJTVERBWVlFQVJcIi5cblx0ICogMTEuIFwiRlJPTUxBU1REQVlZRUFSXCIuXG5cdCAqIDEyLiBcIlRPWUVTVEVSREFZXCIuXG5cdCAqIDEzLiBcIlRPVE9EQVlcIi5cblx0ICogMTQuIFwiVE9UT01PUlJPV1wiLlxuXHQgKiAxNS4gXCJUT0ZJUlNUREFZV0VFS1wiLlxuXHQgKiAxNi4gXCJUT0xBU1REQVlXRUVLXCIuXG5cdCAqIDE3LiBcIlRPRklSU1REQVlNT05USFwiLlxuXHQgKiAxOC4gXCJUT0xBU1REQVlNT05USFwiLlxuXHQgKiAxOS4gXCJUT0ZJUlNUREFZUVVBUlRFUlwiLlxuXHQgKiAyMC4gXCJUT0xBU1REQVlRVUFSVEVSXCIuXG5cdCAqIDIxLiBcIlRPRklSU1REQVlZRUFSXCIuXG5cdCAqIDIyLiBcIlRPTEFTVERBWVlFQVJcIi5cblx0ICpcblx0ICogVGhlc2UgY3VzdG9tIG9wZXJhdG9ycyBjcmVhdGVkIGJ5IEZFIGFyZSBub3QgYXZhaWxhYmxlIGJ5IGRlZmF1bHQgd2l0aCBNREMgZmlsdGVyaW5nIGVudmlyb25tZW50LlxuXHQgKiBUaGUgbmVlZCB0byBiZSBhZGRlZCBvbi1kZW1hbmQgdmlhIE1EQyBBUElzIGxpa2UgJ0ZpbHRlck9wZXJhdG9yVXRpbHMuYWRkT3BlcmF0b3InLlxuXHQgKlxuXHQgKiBJZiBvcGVyYXRvck5hbWVzIGlzIHVuZGVmaW5lZCwgdGhlbiB3ZSBhZGQgYWxsIGV4dGVuZGVkIHNlbWFudGljIGRhdGUgb3BlcmF0b3JzLlxuXHQgKiBAcGFyYW0gb3BlcmF0b3JOYW1lcyBPcGVyYXRpb24gbmFtZXMgdG8gYmUgYWRkZWQgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0YWRkRXh0ZW5kZWRGaWx0ZXJPcGVyYXRvcnMob3BlcmF0b3JOYW1lczogc3RyaW5nW10gPSBleHRlbmRlZE9wZXJhdG9yTmFtZXMpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRjb25zdCBvcGVyYXRvcnM6IFJhbmdlT3BlcmF0b3JbXSA9IG9wZXJhdG9yTmFtZXMucmVkdWNlKChvcGVyYXRvcnMsIG9wZXJhdG9yTmFtZSkgPT4ge1xuXHRcdFx0aWYgKCFGaWx0ZXJPcGVyYXRvclV0aWwuZ2V0T3BlcmF0b3Iob3BlcmF0b3JOYW1lKSAmJiBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycy5pc0V4dGVuZGVkT3BlcmF0b3Iob3BlcmF0b3JOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBvcGVyYXRvciA9IGdldEV4dGVuZGVkT3BlcmF0b3Iob3BlcmF0b3JOYW1lLCByZXNvdXJjZUJ1bmRsZSk7XG5cdFx0XHRcdG9wZXJhdG9ycy5wdXNoKG9wZXJhdG9yKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvcGVyYXRvcnM7XG5cdFx0fSwgW10gYXMgUmFuZ2VPcGVyYXRvcltdKTtcblx0XHRGaWx0ZXJPcGVyYXRvclV0aWwuYWRkT3BlcmF0b3JzKG9wZXJhdG9ycyk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLGlCQUFpQixHQUFHQyxpQ0FBaUMsQ0FBQyxDQUFDOztFQUU3RDs7RUFFQSxNQUFNQyw0QkFBNEIsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNKLGlCQUFpQixDQUFrQztFQUVwRyxNQUFNSyxPQUFPLEdBQUcsTUFBTTtFQUN0QixNQUFNQyxLQUFLLEdBQUcsSUFBSTs7RUFJbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFRQSxNQUFNQyxxQkFBMEUsR0FBR0wsNEJBQTRCLENBQUNNLE1BQU0sQ0FDckgsQ0FBQ0MsVUFBVSxFQUFFQyxxQkFBcUIsS0FBSztJQUN0Q0QsVUFBVSxDQUFDLEdBQUdKLE9BQU8sR0FBR0sscUJBQXFCLEVBQUUsQ0FBQyxHQUFHO01BQ2xEQyxHQUFHLEVBQUUsR0FBR04sT0FBTyxHQUFHSyxxQkFBcUIsRUFBRTtNQUN6Q0UsUUFBUSxFQUFFQyxxQkFBcUI7TUFDL0JD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
@@ -112,7 +112,7 @@ function getExtendedOperator(operatorName: ExtendedOperatorName, resourceBundle:
112
112
  tokenText: `${resourceBundle.getText(tokenTextKey, [])} ({0})`,
113
113
  valueTypes: [OperatorValueType.Static],
114
114
  filterOperator,
115
- group: { id: 3, text: resourceBundle.getText(`M_EXTENDED_OPERATOR_GRP_TEXT`, []) },
115
+ group: { id: 3, text: resourceBundle.getText(`M_EXTENDED_OPERATOR_GRP_TEXT`) },
116
116
  calcRange: function (): UniversalDate[] {
117
117
  const [fromPick, toPick] = operatorsToExtend[primitiveOperator].fnRanges();
118
118
  return [isFromExtendedOperator(operatorName) ? fromPick : toPick];