@sapui5/sap.fe.macros 1.140.0 → 1.141.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -18,7 +18,19 @@ import {
18
18
  } from "@sap-ux/vocabularies-types/vocabularies/UI";
19
19
  import Log from "sap/base/Log";
20
20
  import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
21
- import { and, compileExpression, constant, equal, ifElse, isConstant, isTruthy, not, or, pathInModel } from "sap/fe/base/BindingToolkit";
21
+ import {
22
+ and,
23
+ compileExpression,
24
+ constant,
25
+ equal,
26
+ greaterThan,
27
+ ifElse,
28
+ isConstant,
29
+ isTruthy,
30
+ not,
31
+ or,
32
+ pathInModel
33
+ } from "sap/fe/base/BindingToolkit";
22
34
  import type { PropertiesOf, StrictPropertiesOf } from "sap/fe/base/ClassSupport";
23
35
  import type AppComponent from "sap/fe/core/AppComponent";
24
36
  import CommonUtils from "sap/fe/core/CommonUtils";
@@ -424,11 +436,7 @@ export function getRowSettings(
424
436
  handlerProvider: TableEventHandlerProvider
425
437
  ): RowSettings {
426
438
  const rowActionItem = (
427
- <RowActionItem
428
- type={rowActionType}
429
- press={tableType === "ResponsiveTable" ? undefined : handlerProvider.rowPress}
430
- visible={tableDefinition.annotation.row?.visible}
431
- />
439
+ <RowActionItem type={"Navigation"} press={handlerProvider.rowPress} visible={tableDefinition.annotation.row?.visible} />
432
440
  );
433
441
 
434
442
  return (
@@ -520,14 +528,13 @@ function getOpenInNewTabTemplate(handlerProvider: TableEventHandlerProvider): Me
520
528
  not(and(pathInModel("/sessionOn", "internal"), UI.IsEditable)),
521
529
  not(pathInModel("contextmenu/inactiveContext", "internal"))
522
530
  );
523
-
524
531
  return (
525
532
  <MenuItem
526
533
  core:require="{API: 'sap/fe/macros/table/TableAPI'}"
527
534
  startsSection={true}
528
535
  text="{sap.fe.i18n>M_COMMON_TABLE_CONTEXT_MENU_OPEN_IN_NEW_TAB}"
529
536
  press={handlerProvider.contextMenuOpenInNewTab}
530
- enabled="{= ${internal>contextmenu/numberOfSelectedContexts} > 0}"
537
+ enabled={greaterThan(pathInModel("contextmenu/numberOfNavigableContexts", "internal"), 0)}
531
538
  visible={visible}
532
539
  />
533
540
  );
@@ -1739,7 +1746,6 @@ export function getMDCTableTemplate(tableProperties: TableBlockProperties, param
1739
1746
  busyIndicatorDelay={0}
1740
1747
  enableExport={tableProperties.tableDefinition.control.enableExport}
1741
1748
  delegate={JSON.parse(delegate)}
1742
- rowPress={tableType === "ResponsiveTable" ? parameters.handlerProvider.rowPress : undefined}
1743
1749
  beforeOpenContextMenu={parameters.handlerProvider.beforeOpenContextMenu}
1744
1750
  autoBindOnInit={tableProperties.useBasicSearch || !tableProperties.filterBar}
1745
1751
  selectionMode={tableProperties.tableDefinition.annotation.selectionMode || "None"}
@@ -71,7 +71,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
71
71
  };
72
72
  _proto.getOverflowToolbarConfig = function getOverflowToolbarConfig() {
73
73
  return {
74
- canOverflow: true
74
+ canOverflow: true,
75
+ onBeforeEnterOverflow: function (control) {
76
+ const content = control?.getContent();
77
+ content?.getOverflowToolbarConfig()?.onBeforeEnterOverflow?.(content);
78
+ },
79
+ onAfterExitOverflow: function (control) {
80
+ const content = control?.getContent();
81
+ content?.getOverflowToolbarConfig()?.onAfterExitOverflow?.(content);
82
+ }
75
83
  };
76
84
  }
77
85
 
@@ -323,7 +331,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
323
331
  const itemFilters = CommonUtils.getFiltersFromAnnotation(table, itemKey);
324
332
  const count = await TableUtils.getListBindingForCount(table, table.getBindingContext(), {
325
333
  batchGroupId: "$auto",
326
- additionalFilters: [...baseTableFilters, ...itemFilters]
334
+ additionalFilters: [...baseTableFilters, ...itemFilters],
335
+ itemKey: itemKey
327
336
  });
328
337
  const itemIndex = items.findIndex(selectorItem => selectorItem.getKey() === itemKey);
329
338
  if (itemIndex > -1) {
@@ -371,4 +380,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
371
380
  _exports = QuickFilterSelector;
372
381
  return _exports;
373
382
  }, false);
374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJRdWlja0ZpbHRlclNlbGVjdG9yIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiaW50ZXJmYWNlcyIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzMiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjNCIsIl9kZWM1IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZ2V0VG9vbGJhckludGVyYWN0aXZlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJtZXRhRGF0YUF2YWlsYWJsZSIsImNvbnRlbnQiLCJtZXRhUGF0aCIsImluaXRpYWxpemVDb250ZW50IiwiZ2V0T3ZlcmZsb3dUb29sYmFyQ29uZmlnIiwiY2FuT3ZlcmZsb3ciLCJzZXRNZXRhUGF0aCIsIm9uU2VsQ2hhbmdlIiwidGFibGVBUEkiLCJnZXRNRENUYWJsZSIsImdldFBhcmVudCIsImlzQSIsIm9uUXVpY2tGaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZWdtZW50ZWRCdXR0b25TZWxlY3RvciIsIm1ldGFDb250ZXh0IiwiaXRlbXMiLCJwYXRocyIsIm1hcCIsInBhdGgiLCJpbmRleCIsIl9qc3giLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwiZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyIsIlNlZ21lbnRlZEJ1dHRvbiIsImlkIiwiZW5hYmxlZCIsIm5vdEVxdWFsIiwicGF0aEluTW9kZWwiLCJhcmlhTGFiZWxsZWRCeSIsImdldFNlbGVjdG9yQXJpYUxhYmVsbGVkQnlJZCIsInNlbGVjdGlvbkNoYW5nZSIsImJpbmQiLCJjaGlsZHJlbiIsImdldFNlbGVjdFNlbGVjdG9yIiwiSXRlbSIsIlNlbGVjdCIsImF1dG9BZGp1c3RXaWR0aCIsImNoYW5nZSIsImtleSIsInRleHQiLCJnZXRTZWxlY3Rvckl0ZW1UZXh0IiwiZ2VuZXJhdGUiLCJjb3VudFRleHQiLCJkYXRhVGFibGVNb2RlbFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJUZXh0IiwidG9TdHJpbmciLCJzaG93Q291bnRzIiwicmVnaXN0ZXJTaWRlRWZmZWN0Rm9yUXVpY2tGaWx0ZXIiLCJjb250ZXh0UGF0aCIsImRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoIiwidmlld0VudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidGFibGVOYXZpZ2F0aW9uUGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwic291cmNlUHJvcGVydGllcyIsIlNldCIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiU2VsZWN0T3B0aW9ucyIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eU5hbWUiLCJ2YWx1ZSIsInByb3BlcnR5TW9kZWxQYXRoIiwiYWRkIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsIkFycmF5IiwiZnJvbSIsInRhcmdldEVudGl0aWVzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzb3VyY2VDb250cm9sSWQiLCJnZXRBY2Nlc3NpYmlsaXR5Q29udHJvbCIsInRleHRCaW5kaW5nIiwiaW52aXNpYmxlVGV4dCIsIkludmlzaWJsZVRleHQiLCJ0b1N0YXRpYyIsIm1ldGFQYXRoT2JqZWN0IiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJvZGF0YU1ldGFNb2RlbCIsIl9nZXRPd25lciIsImdldE1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0UGF0aCIsInNlbGVjdG9yIiwibGVuZ3RoIiwiYWRkRGVwZW5kZW50IiwibWRjVGFibGUiLCJjdXJyZW50Q29udHJvbCIsImdldFNlbGVjdGVkS2V5IiwiZ2V0SXRlbXMiLCJnZXRLZXkiLCJzZXRTZWxlY3RlZEtleSIsInNldENvdW50c0FzTG9hZGluZyIsInF1aWNrRmlsdGVyQ291bnRzIiwiaW50ZXJuYWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJrIiwic2V0UHJvcGVydHkiLCJjb3VudHMiLCJyZWZyZXNoU2VsZWN0ZWRDb3VudCIsImNvdW50IiwiZ2V0Um93QmluZGluZyIsImdldENvdW50IiwidW5kZWZpbmVkIiwiaXRlbUluZGV4IiwiZmluZEluZGV4Iiwic2VsZWN0b3JJdGVtIiwiVGFibGVVdGlscyIsImdldENvdW50Rm9ybWF0dGVkIiwicmVmcmVzaFVuU2VsZWN0ZWRDb3VudHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRhYmxlIiwiY29udHJvbGxlciIsImdldFBhZ2VDb250cm9sbGVyIiwiY2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJjaGFydEJsb2NrIiwic2V0SXRlbUNvdW50cyIsIml0ZW0iLCJpdGVtS2V5IiwiaXRlbUZpbHRlcnMiLCJDb21tb25VdGlscyIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJiYXRjaEdyb3VwSWQiLCJhZGRpdGlvbmFsRmlsdGVycyIsImJhc2VUYWJsZUZpbHRlcnMiLCJjaGFydEZpbHRlciIsImhhc1NlbGVjdGlvbnMiLCJnZXRGaWx0ZXIiLCJnZXRIaWRkZW5GaWx0ZXJzIiwicHVzaCIsImJpbmRpbmdQcm9taXNlcyIsImZpbHRlciIsImFsbCIsImVycm9yIiwiTG9nIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUXVpY2tGaWx0ZXJTZWxlY3Rvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBub3RFcXVhbCwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IHR5cGUgeyBJT3ZlcmZsb3dUb29sYmFyQ29udGVudCwgT3ZlcmZsb3dUb29sYmFyQ29uZmlnIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB7IHR5cGUgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IEl0ZW0gZnJvbSBcInNhcC91aS9jb3JlL0l0ZW1cIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4vVGFibGVBUElcIjtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIHRoZSBxdWlja1ZhcmlhbnRTZWxlY3Rpb24gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyU2VsZWN0b3JcIiwge1xuXHRpbnRlcmZhY2VzOiBbXCJzYXAubS5JVG9vbGJhckludGVyYWN0aXZlQ29udHJvbFwiXVxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1aWNrRmlsdGVyU2VsZWN0b3IgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFNlZ21lbnRlZEJ1dHRvbiB8IFNlbGVjdD4gaW1wbGVtZW50cyBJT3ZlcmZsb3dUb29sYmFyQ29udGVudCB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAubS5JT3ZlcmZsb3dUb29sYmFyQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9tX0lPdmVyZmxvd1Rvb2xiYXJDb250ZW50ID0gdHJ1ZTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBsaXN0IG9mIHBhdGhzIHBvaW50aW5nIHRvIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBxdWljayBmaWx0ZXJzXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1tdXCIgfSlcblx0cGF0aHMhOiBzdHJpbmdbXTtcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjb3VudHMgc2hvdWxkIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZSB0ZXh0XG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRzaG93Q291bnRzID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBtZXRhUGF0aD86IHN0cmluZztcblxuXHRwcml2YXRlIG1ldGFEYXRhQXZhaWxhYmxlPzogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgbWRjVGFibGU/OiBUYWJsZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFF1aWNrRmlsdGVyU2VsZWN0b3I+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5tZXRhRGF0YUF2YWlsYWJsZSA9IHRydWU7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5tZXRhUGF0aCkge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdGdldE92ZXJmbG93VG9vbGJhckNvbmZpZygpOiBPdmVyZmxvd1Rvb2xiYXJDb25maWcge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjYW5PdmVyZmxvdzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbWV0YVBhdGguXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgbWV0YVBhdGhcblx0ICovXG5cdHNldE1ldGFQYXRoKG1ldGFQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm1ldGFQYXRoID0gbWV0YVBhdGg7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5tZXRhRGF0YUF2YWlsYWJsZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBldmVudC5cblx0ICovXG5cdHByaXZhdGUgb25TZWxDaGFuZ2UoKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLmdldE1EQ1RhYmxlKCkuZ2V0UGFyZW50KCk7XG5cdFx0aWYgKHRhYmxlQVBJPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0dGFibGVBUEkub25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHNlbGVjdG9yIGFzIGEgU2VnbWVudGVkQnV0dG9uLlxuXHQgKiBAcGFyYW0gbWV0YUNvbnRleHQgVGhlIG1ldGEgY29udGV4dFxuXHQgKiBAcmV0dXJucyAgVGhlIFNlZ21lbnRlZEJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWdtZW50ZWRCdXR0b25TZWxlY3RvcihtZXRhQ29udGV4dDogQ29udGV4dCk6IFNlZ21lbnRlZEJ1dHRvbiB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLnBhdGhzLm1hcCgocGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdHJldHVybiAoPFNlZ21lbnRlZEJ1dHRvbkl0ZW0gey4uLnRoaXMuZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyhpbmRleCwgbWV0YUNvbnRleHQpfSAvPikgYXMgU2VnbWVudGVkQnV0dG9uSXRlbTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvblxuXHRcdFx0XHRpZD17YCR7dGhpcy5pZH0tY29udGVudGB9XG5cdFx0XHRcdGVuYWJsZWQ9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgXCJwYWdlSW50ZXJuYWxcIiksIHRydWUpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCldfVxuXHRcdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3RoaXMub25TZWxDaGFuZ2UuYmluZCh0aGlzKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtc1xuXHRcdFx0XHR9fVxuXHRcdFx0PC9TZWdtZW50ZWRCdXR0b24+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1aXJlZCBieSB0aGUge0BsaW5rIHNhcC5tLklUb29sYmFySW50ZXJhY3RpdmVDb250cm9sfSBpbnRlcmZhY2UuXG5cdCAqIERldGVybWluZXMgaWYgdGhlIENvbnRyb2wgaXMgaW50ZXJhY3RpdmUuXG5cdCAqIEByZXR1cm5zIElmIGl0IGlzIGFuIGludGVyYWN0aXZlIENvbnRyb2xcblx0ICovXG5cdF9nZXRUb29sYmFySW50ZXJhY3RpdmUgPSAoKTogYm9vbGVhbiA9PiB0cnVlO1xuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHNlbGVjdG9yIGFzIGEgU2VsZWN0LlxuXHQgKiBAcGFyYW0gbWV0YUNvbnRleHQgVGhlIG1ldGEgY29udGV4dFxuXHQgKiBAcmV0dXJucyAgVGhlIFNlbGVjdFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWxlY3RTZWxlY3RvcihtZXRhQ29udGV4dDogQ29udGV4dCk6IFNlbGVjdCB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLnBhdGhzLm1hcCgocGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdHJldHVybiAoPEl0ZW0gey4uLnRoaXMuZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyhpbmRleCwgbWV0YUNvbnRleHQpfSAvPikgYXMgSXRlbTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRpZD17YCR7dGhpcy5pZH0tY29udGVudGB9XG5cdFx0XHRcdGVuYWJsZWQ9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgXCJwYWdlSW50ZXJuYWxcIiksIHRydWUpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCldfVxuXHRcdFx0XHRhdXRvQWRqdXN0V2lkdGg9e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17dGhpcy5vblNlbENoYW5nZS5iaW5kKHRoaXMpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1NlbGVjdD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdG9yIEl0ZW0uXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW50byB0aGUgc2VsZWN0b3Jcblx0ICogQHBhcmFtIG1ldGFDb250ZXh0IFRoZSBtZXRhIGNvbnRleHRcblx0ICogQHJldHVybnMgIFRoZSBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9ySXRlbVByb3BlcnRpZXMoaW5kZXg6IG51bWJlciwgbWV0YUNvbnRleHQ6IENvbnRleHQpOiB7IGtleTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogdGhpcy5wYXRoc1tpbmRleF0sXG5cdFx0XHR0ZXh0OiB0aGlzLmdldFNlbGVjdG9ySXRlbVRleHQoaW5kZXgsIG1ldGFDb250ZXh0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJZCBvZiB0aGUgSW52aXNpYmxlVGV4dCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgVGhlIElkXG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9yQXJpYUxhYmVsbGVkQnlJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBnZW5lcmF0ZShbYCR7dGhpcy5pZH0tY29udGVudGAsIFwiQXJpYVRleHRcIl0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGV4dCBmb3IgdGhlIHNlbGVjdG9yIGl0ZW0uXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW50byB0aGUgc2VsZWN0b3Jcblx0ICogQHBhcmFtIG1ldGFDb250ZXh0IFRoZSBtZXRhIGNvbnRleHRcblx0ICogQHJldHVybnMgIFRoZSB0ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9ySXRlbVRleHQoaW5kZXg6IG51bWJlciwgbWV0YUNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvdW50VGV4dCA9IGAgKHtpbnRlcm5hbD5xdWlja0ZpbHRlcnMvY291bnRzLyR7aW5kZXh9fSlgO1xuXHRcdGNvbnN0IGRhdGFUYWJsZU1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFUYWJsZU1vZGVsUGF0aCwgdGhpcy5wYXRoc1tpbmRleF0pLnRhcmdldE9iamVjdCBhc1xuXHRcdFx0fCBTZWxlY3Rpb25WYXJpYW50VHlwZVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGV4dCA9IHNlbGVjdGlvblZhcmlhbnQ/LlRleHQ/LnRvU3RyaW5nKCkgPz8gXCJcIjtcblx0XHRyZXR1cm4gYCR7dGV4dH0ke3RoaXMuc2hvd0NvdW50cyA/IGNvdW50VGV4dCA6IFwiXCJ9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIFNpZGVFZmZlY3RzIGNvbnRyb2wgdGhhdCBtdXN0IGJlIGV4ZWN1dGVkIHdoZW4gdGFibGUgY2VsbHMgdGhhdCBhcmUgcmVsYXRlZCB0byBjb25maWd1cmVkIGZpbHRlcihzKSBjaGFuZ2UuXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgbWV0YVBhdGguXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dFBhdGguXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyU2lkZUVmZmVjdEZvclF1aWNrRmlsdGVyKG1ldGFQYXRoOiBDb250ZXh0LCBjb250ZXh0UGF0aDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFQYXRoLCBjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3Qgdmlld0VudGl0eVR5cGUgPSBkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGNvbnN0IHRhYmxlTmF2aWdhdGlvblBhdGggPSBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aCwgdHJ1ZSk7XG5cblx0XHRpZiAodGFibGVOYXZpZ2F0aW9uUGF0aCAmJiB2aWV3RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3Qgc291cmNlUHJvcGVydGllczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoIG9mIHRoaXMucGF0aHMpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoLCBzZWxlY3Rpb25WYXJpYW50UGF0aClcblx0XHRcdFx0XHQudGFyZ2V0T2JqZWN0IGFzIFBhcnRpYWw8U2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcz47IC8vIFdlIGF1dGhvcml6ZSBTZWxlY3Rpb25WYXJpYW50IHdpdGhvdXQgU2VsZWN0T3B0aW9ucyBldmVuIGlmIGl0J3Mgbm90IGNvbXBsaWFudCB3aXRoIHZvY2FidWxhcmllc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zICYmXG5cdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblZhcmlhbnQ+KHNlbGVjdGlvblZhcmlhbnQsIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblZhcmlhbnRUeXBlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aCwgcHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0c291cmNlUHJvcGVydGllcy5hZGQoZ2V0VGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eU1vZGVsUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpIVxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmFkZENvbnRyb2xTaWRlRWZmZWN0cyh2aWV3RW50aXR5VHlwZSwge1xuXHRcdFx0XHRcdHNvdXJjZVByb3BlcnRpZXM6IEFycmF5LmZyb20oc291cmNlUHJvcGVydGllcyksXG5cdFx0XHRcdFx0dGFyZ2V0RW50aXRpZXM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHRhYmxlTmF2aWdhdGlvblBhdGhcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdHNvdXJjZUNvbnRyb2xJZDogYCR7dGhpcy5pZH0tY29udGVudGBcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGludmlzaWJsZVRleHQgZm9yIHRoZSBhY2Nlc3NpYmlsaXR5IGNvbXBsaWFuY2UuXG5cdCAqIEByZXR1cm5zICBUaGUgSW52aXNpYmxlVGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRBY2Nlc3NpYmlsaXR5Q29udHJvbCgpOiBJbnZpc2libGVUZXh0IHtcblx0XHRjb25zdCB0ZXh0QmluZGluZyA9IGB7c2FwLmZlLmkxOG4+TV9UQUJMRV9RVUlDS0ZJTFRFUl9BUklBfWA7XG5cdFx0Y29uc3QgaW52aXNpYmxlVGV4dCA9ICg8SW52aXNpYmxlVGV4dCB0ZXh0PXt0ZXh0QmluZGluZ30gaWQ9e3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCl9IC8+KSBhcyBJbnZpc2libGVUZXh0O1xuXG5cdFx0Ly9BZGRzIHRoZSBpbnZpc2libGVUZXh0IGludG8gdGhlIHN0YXRpYywgaGlkZGVuIGFyZWEgVUkgYXJlYSBjb250YWluZXIuXG5cdFx0aW52aXNpYmxlVGV4dC50b1N0YXRpYygpO1xuXHRcdHJldHVybiBpbnZpc2libGVUZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0aWFsaXplQ29udGVudCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5tZXRhUGF0aCkge1xuXHRcdFx0Y29uc3QgbWV0YVBhdGhPYmplY3QgPSB0aGlzLmdldE1ldGFQYXRoT2JqZWN0KHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKG1ldGFQYXRoT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IG9kYXRhTWV0YU1vZGVsID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFQYXRoT2JqZWN0LmdldFBhdGgoKSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBvZGF0YU1ldGFNb2RlbD8uY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YVBhdGhPYmplY3QuZ2V0Q29udGV4dFBhdGgoKSk7XG5cdFx0XHRcdGlmICghbWV0YUNvbnRleHQgfHwgIWNvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlclNpZGVFZmZlY3RGb3JRdWlja0ZpbHRlcihtZXRhQ29udGV4dCwgY29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIFRoZSBudW1iZXIgb2Ygdmlld3MgZGVmaW5lZCBmb3IgYSB0YWJsZSBkZXRlcm1pbmVzIHRoZSBVSSBjb250cm9sIHRoYXQgbGV0cyB1c2VycyBzd2l0Y2ggdGhlIHRhYmxlIHZpZXdzOlxuXHRcdFx0XHQgKiAgLSBBIHNlZ21lbnRlZCBidXR0b24gZm9yIGEgbWF4aW11bSBvZiB0aHJlZSB2aWV3c1xuXHRcdFx0XHQgKiAgLSBBIHNlbGVjdCBjb250cm9sIGZvciBmb3VyIG9yIG1vcmUgdmlld3MuXG5cdFx0XHRcdCAqL1xuXG5cdFx0XHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5wYXRocy5sZW5ndGggPiAzID8gdGhpcy5nZXRTZWxlY3RTZWxlY3RvcihtZXRhQ29udGV4dCkgOiB0aGlzLmdldFNlZ21lbnRlZEJ1dHRvblNlbGVjdG9yKG1ldGFDb250ZXh0KTtcblx0XHRcdFx0c2VsZWN0b3IuYWRkRGVwZW5kZW50KHRoaXMuZ2V0QWNjZXNzaWJpbGl0eUNvbnRyb2woKSk7XG5cdFx0XHRcdHRoaXMuY29udGVudCA9IHNlbGVjdG9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBnZXRNRENUYWJsZSgpOiBUYWJsZSB7XG5cdFx0aWYgKCF0aGlzLm1kY1RhYmxlKSB7XG5cdFx0XHRsZXQgY3VycmVudENvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0XHR3aGlsZSAoY3VycmVudENvbnRyb2wgJiYgIWN1cnJlbnRDb250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGN1cnJlbnRDb250cm9sID0gY3VycmVudENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdHRoaXMubWRjVGFibGUgPSBjdXJyZW50Q29udHJvbCBhcyBUYWJsZTtcblx0XHRcdHJldHVybiB0aGlzLm1kY1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tZGNUYWJsZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUga2V5IG9mIHRoZSBzZWxlY3RlZCBpdGVtIChvciB0aGUga2V5IG9mIHRoZSBmaXJzdCBpdGVtIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uKS5cblx0ICogQHJldHVybnMgVGhlIHNlbGVjdGVkIGtleVxuXHQgKi9cblx0Z2V0U2VsZWN0ZWRLZXkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRTZWxlY3RlZEtleSgpIHx8IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKVswXS5nZXRLZXkoKSB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNlbGVjdGVkIGtleS5cblx0ICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIGJlIHNlbGVjdGVkXG5cdCAqL1xuXHRzZXRTZWxlY3RlZEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudD8uc2V0U2VsZWN0ZWRLZXkoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudCBpbiBhIHBlbmRpbmcgc3RhdGUuXG5cdCAqL1xuXHRzZXRDb3VudHNBc0xvYWRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJDb3VudHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXG5cdFx0Zm9yIChjb25zdCBrIGluIHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXJDb3VudHNba10gPSBcIi4uLlwiO1xuXHRcdH1cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJxdWlja0ZpbHRlcnNcIiwgeyBjb3VudHM6IHF1aWNrRmlsdGVyQ291bnRzIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGNvdW50IG9mIHRoZSBzZWxlY3RlZCBpdGVtLlxuXHQgKi9cblx0cmVmcmVzaFNlbGVjdGVkQ291bnQoKTogdm9pZCB7XG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmdldE1EQ1RhYmxlKCkuZ2V0Um93QmluZGluZygpLmdldENvdW50KCk7XG5cblx0XHRpZiAodGhpcy5zaG93Q291bnRzID09PSB0cnVlICYmIGNvdW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5maW5kSW5kZXgoKHNlbGVjdG9ySXRlbSkgPT4gc2VsZWN0b3JJdGVtLmdldEtleSgpID09PSB0aGlzLmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdFx0aWYgKGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkICYmIGl0ZW1JbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoYHF1aWNrRmlsdGVycy9jb3VudHMvJHtpdGVtSW5kZXh9YCwgVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChjb3VudCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBjb3VudHMgb2YgdGhlIHVuc2VsZWN0ZWQgaXRlbXMuXG5cdCAqIEByZXR1cm5zICBQcm9taXNlIHJlc29sdmVzIG9uY2UgdGhlIGNvdW50IGFyZSB1cGRhdGVkXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoVW5TZWxlY3RlZENvdW50cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0TURDVGFibGUoKTtcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuY29udGVudC5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgY2hhcnQgPSAoY29udHJvbGxlciBhcyBQYWdlQ29udHJvbGxlciAmIHsgZ2V0Q2hhcnRDb250cm9sPzogRnVuY3Rpb24gfSkuZ2V0Q2hhcnRDb250cm9sPy4oKTtcblx0XHRjb25zdCBjaGFydEJsb2NrID0gY2hhcnQ/LmdldFBhcmVudCgpO1xuXG5cdFx0Y29uc3Qgc2V0SXRlbUNvdW50cyA9IGFzeW5jIChpdGVtOiBJdGVtKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRjb25zdCBpdGVtS2V5ID0gaXRlbS5nZXRLZXkoKTtcblx0XHRcdGNvbnN0IGl0ZW1GaWx0ZXJzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uKHRhYmxlLCBpdGVtS2V5KTtcblx0XHRcdGNvbnN0IGNvdW50ID0gYXdhaXQgVGFibGVVdGlscy5nZXRMaXN0QmluZGluZ0ZvckNvdW50KHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRcdGJhdGNoR3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHRhZGRpdGlvbmFsRmlsdGVyczogWy4uLmJhc2VUYWJsZUZpbHRlcnMsIC4uLml0ZW1GaWx0ZXJzXVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBpdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKHNlbGVjdG9ySXRlbSkgPT4gc2VsZWN0b3JJdGVtLmdldEtleSgpID09PSBpdGVtS2V5KTtcblx0XHRcdGlmIChpdGVtSW5kZXggPiAtMSkge1xuXHRcdFx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoYHF1aWNrRmlsdGVycy9jb3VudHMvJHtpdGVtSW5kZXh9YCwgVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChjb3VudCkpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBjaGFydEZpbHRlciA9IGNoYXJ0QmxvY2s/Lmhhc1NlbGVjdGlvbnMoKSAmJiBjaGFydEJsb2NrPy5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBiYXNlVGFibGVGaWx0ZXJzID0gVGFibGVVdGlscy5nZXRIaWRkZW5GaWx0ZXJzKHRhYmxlKTtcblx0XHRpZiAoY2hhcnRGaWx0ZXIpIHtcblx0XHRcdGJhc2VUYWJsZUZpbHRlcnMucHVzaChjaGFydEZpbHRlcik7XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmdQcm9taXNlcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5nZXRLZXkoKSAhPT0gdGhpcy5nZXRTZWxlY3RlZEtleSgpKS5tYXAoYXN5bmMgKGl0ZW0pID0+IHNldEl0ZW1Db3VudHMoaXRlbSkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChiaW5kaW5nUHJvbWlzZXMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIHByb21pc2VzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QkE7QUFDQTtBQUNBO0VBRkEsSUFNcUJBLG1CQUFtQixJQUFBQyxJQUFBLEdBSHZDQyxjQUFjLENBQUMseUNBQXlDLEVBQUU7SUFDMURDLFVBQVUsRUFBRSxDQUFDLGtDQUFrQztFQUNoRCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUVBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFBQyxLQUFBLEdBR25EQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNNUJGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVyxDQUFDLENBQUMs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
383
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJRdWlja0ZpbHRlclNlbGVjdG9yIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiaW50ZXJmYWNlcyIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzMiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjNCIsIl9kZWM1IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZ2V0VG9vbGJhckludGVyYWN0aXZlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJtZXRhRGF0YUF2YWlsYWJsZSIsImNvbnRlbnQiLCJtZXRhUGF0aCIsImluaXRpYWxpemVDb250ZW50IiwiZ2V0T3ZlcmZsb3dUb29sYmFyQ29uZmlnIiwiY2FuT3ZlcmZsb3ciLCJvbkJlZm9yZUVudGVyT3ZlcmZsb3ciLCJjb250cm9sIiwiZ2V0Q29udGVudCIsIm9uQWZ0ZXJFeGl0T3ZlcmZsb3ciLCJzZXRNZXRhUGF0aCIsIm9uU2VsQ2hhbmdlIiwidGFibGVBUEkiLCJnZXRNRENUYWJsZSIsImdldFBhcmVudCIsImlzQSIsIm9uUXVpY2tGaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZWdtZW50ZWRCdXR0b25TZWxlY3RvciIsIm1ldGFDb250ZXh0IiwiaXRlbXMiLCJwYXRocyIsIm1hcCIsInBhdGgiLCJpbmRleCIsIl9qc3giLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwiZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyIsIlNlZ21lbnRlZEJ1dHRvbiIsImlkIiwiZW5hYmxlZCIsIm5vdEVxdWFsIiwicGF0aEluTW9kZWwiLCJhcmlhTGFiZWxsZWRCeSIsImdldFNlbGVjdG9yQXJpYUxhYmVsbGVkQnlJZCIsInNlbGVjdGlvbkNoYW5nZSIsImJpbmQiLCJjaGlsZHJlbiIsImdldFNlbGVjdFNlbGVjdG9yIiwiSXRlbSIsIlNlbGVjdCIsImF1dG9BZGp1c3RXaWR0aCIsImNoYW5nZSIsImtleSIsInRleHQiLCJnZXRTZWxlY3Rvckl0ZW1UZXh0IiwiZ2VuZXJhdGUiLCJjb3VudFRleHQiLCJkYXRhVGFibGVNb2RlbFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJUZXh0IiwidG9TdHJpbmciLCJzaG93Q291bnRzIiwicmVnaXN0ZXJTaWRlRWZmZWN0Rm9yUXVpY2tGaWx0ZXIiLCJjb250ZXh0UGF0aCIsImRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoIiwidmlld0VudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidGFibGVOYXZpZ2F0aW9uUGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwic291cmNlUHJvcGVydGllcyIsIlNldCIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiU2VsZWN0T3B0aW9ucyIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eU5hbWUiLCJ2YWx1ZSIsInByb3BlcnR5TW9kZWxQYXRoIiwiYWRkIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsIkFycmF5IiwiZnJvbSIsInRhcmdldEVudGl0aWVzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzb3VyY2VDb250cm9sSWQiLCJnZXRBY2Nlc3NpYmlsaXR5Q29udHJvbCIsInRleHRCaW5kaW5nIiwiaW52aXNpYmxlVGV4dCIsIkludmlzaWJsZVRleHQiLCJ0b1N0YXRpYyIsIm1ldGFQYXRoT2JqZWN0IiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJvZGF0YU1ldGFNb2RlbCIsIl9nZXRPd25lciIsImdldE1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0UGF0aCIsInNlbGVjdG9yIiwibGVuZ3RoIiwiYWRkRGVwZW5kZW50IiwibWRjVGFibGUiLCJjdXJyZW50Q29udHJvbCIsImdldFNlbGVjdGVkS2V5IiwiZ2V0SXRlbXMiLCJnZXRLZXkiLCJzZXRTZWxlY3RlZEtleSIsInNldENvdW50c0FzTG9hZGluZyIsInF1aWNrRmlsdGVyQ291bnRzIiwiaW50ZXJuYWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJrIiwic2V0UHJvcGVydHkiLCJjb3VudHMiLCJyZWZyZXNoU2VsZWN0ZWRDb3VudCIsImNvdW50IiwiZ2V0Um93QmluZGluZyIsImdldENvdW50IiwidW5kZWZpbmVkIiwiaXRlbUluZGV4IiwiZmluZEluZGV4Iiwic2VsZWN0b3JJdGVtIiwiVGFibGVVdGlscyIsImdldENvdW50Rm9ybWF0dGVkIiwicmVmcmVzaFVuU2VsZWN0ZWRDb3VudHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRhYmxlIiwiY29udHJvbGxlciIsImdldFBhZ2VDb250cm9sbGVyIiwiY2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJjaGFydEJsb2NrIiwic2V0SXRlbUNvdW50cyIsIml0ZW0iLCJpdGVtS2V5IiwiaXRlbUZpbHRlcnMiLCJDb21tb25VdGlscyIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJiYXRjaEdyb3VwSWQiLCJhZGRpdGlvbmFsRmlsdGVycyIsImJhc2VUYWJsZUZpbHRlcnMiLCJjaGFydEZpbHRlciIsImhhc1NlbGVjdGlvbnMiLCJnZXRGaWx0ZXIiLCJnZXRIaWRkZW5GaWx0ZXJzIiwicHVzaCIsImJpbmRpbmdQcm9taXNlcyIsImZpbHRlciIsImFsbCIsImVycm9yIiwiTG9nIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUXVpY2tGaWx0ZXJTZWxlY3Rvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBub3RFcXVhbCwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IHR5cGUgeyBJT3ZlcmZsb3dUb29sYmFyQ29udGVudCwgT3ZlcmZsb3dUb29sYmFyQ29uZmlnIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB7IHR5cGUgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IEl0ZW0gZnJvbSBcInNhcC91aS9jb3JlL0l0ZW1cIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4vVGFibGVBUElcIjtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIHRoZSBxdWlja1ZhcmlhbnRTZWxlY3Rpb24gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyU2VsZWN0b3JcIiwge1xuXHRpbnRlcmZhY2VzOiBbXCJzYXAubS5JVG9vbGJhckludGVyYWN0aXZlQ29udHJvbFwiXVxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1aWNrRmlsdGVyU2VsZWN0b3IgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFNlZ21lbnRlZEJ1dHRvbiB8IFNlbGVjdD4gaW1wbGVtZW50cyBJT3ZlcmZsb3dUb29sYmFyQ29udGVudCB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAubS5JT3ZlcmZsb3dUb29sYmFyQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9tX0lPdmVyZmxvd1Rvb2xiYXJDb250ZW50ID0gdHJ1ZTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBsaXN0IG9mIHBhdGhzIHBvaW50aW5nIHRvIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBxdWljayBmaWx0ZXJzXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1tdXCIgfSlcblx0cGF0aHMhOiBzdHJpbmdbXTtcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjb3VudHMgc2hvdWxkIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZSB0ZXh0XG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRzaG93Q291bnRzID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBtZXRhUGF0aD86IHN0cmluZztcblxuXHRwcml2YXRlIG1ldGFEYXRhQXZhaWxhYmxlPzogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgbWRjVGFibGU/OiBUYWJsZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFF1aWNrRmlsdGVyU2VsZWN0b3I+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5tZXRhRGF0YUF2YWlsYWJsZSA9IHRydWU7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5tZXRhUGF0aCkge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdGdldE92ZXJmbG93VG9vbGJhckNvbmZpZygpOiBPdmVyZmxvd1Rvb2xiYXJDb25maWcge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjYW5PdmVyZmxvdzogdHJ1ZSxcblx0XHRcdG9uQmVmb3JlRW50ZXJPdmVyZmxvdzogZnVuY3Rpb24gKGNvbnRyb2w6IFF1aWNrRmlsdGVyU2VsZWN0b3IpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgY29udGVudCA9IGNvbnRyb2w/LmdldENvbnRlbnQoKTtcblx0XHRcdFx0KGNvbnRlbnQgYXMgdW5rbm93biBhcyB7IGdldE92ZXJmbG93VG9vbGJhckNvbmZpZzogKCkgPT4gT3ZlcmZsb3dUb29sYmFyQ29uZmlnIH0gfCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Py5nZXRPdmVyZmxvd1Rvb2xiYXJDb25maWcoKVxuXHRcdFx0XHRcdD8ub25CZWZvcmVFbnRlck92ZXJmbG93Py4oY29udGVudCk7XG5cdFx0XHR9LFxuXHRcdFx0b25BZnRlckV4aXRPdmVyZmxvdzogZnVuY3Rpb24gKGNvbnRyb2w6IFF1aWNrRmlsdGVyU2VsZWN0b3IpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgY29udGVudCA9IGNvbnRyb2w/LmdldENvbnRlbnQoKTtcblx0XHRcdFx0KGNvbnRlbnQgYXMgdW5rbm93biBhcyB7IGdldE92ZXJmbG93VG9vbGJhckNvbmZpZzogKCkgPT4gT3ZlcmZsb3dUb29sYmFyQ29uZmlnIH0gfCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Py5nZXRPdmVyZmxvd1Rvb2xiYXJDb25maWcoKVxuXHRcdFx0XHRcdD8ub25BZnRlckV4aXRPdmVyZmxvdz8uKGNvbnRlbnQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbWV0YVBhdGguXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgbWV0YVBhdGhcblx0ICovXG5cdHNldE1ldGFQYXRoKG1ldGFQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm1ldGFQYXRoID0gbWV0YVBhdGg7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5tZXRhRGF0YUF2YWlsYWJsZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBldmVudC5cblx0ICovXG5cdHByaXZhdGUgb25TZWxDaGFuZ2UoKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLmdldE1EQ1RhYmxlKCkuZ2V0UGFyZW50KCk7XG5cdFx0aWYgKHRhYmxlQVBJPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0dGFibGVBUEkub25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHNlbGVjdG9yIGFzIGEgU2VnbWVudGVkQnV0dG9uLlxuXHQgKiBAcGFyYW0gbWV0YUNvbnRleHQgVGhlIG1ldGEgY29udGV4dFxuXHQgKiBAcmV0dXJucyAgVGhlIFNlZ21lbnRlZEJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWdtZW50ZWRCdXR0b25TZWxlY3RvcihtZXRhQ29udGV4dDogQ29udGV4dCk6IFNlZ21lbnRlZEJ1dHRvbiB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLnBhdGhzLm1hcCgocGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdHJldHVybiAoPFNlZ21lbnRlZEJ1dHRvbkl0ZW0gey4uLnRoaXMuZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyhpbmRleCwgbWV0YUNvbnRleHQpfSAvPikgYXMgU2VnbWVudGVkQnV0dG9uSXRlbTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvblxuXHRcdFx0XHRpZD17YCR7dGhpcy5pZH0tY29udGVudGB9XG5cdFx0XHRcdGVuYWJsZWQ9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgXCJwYWdlSW50ZXJuYWxcIiksIHRydWUpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCldfVxuXHRcdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3RoaXMub25TZWxDaGFuZ2UuYmluZCh0aGlzKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtc1xuXHRcdFx0XHR9fVxuXHRcdFx0PC9TZWdtZW50ZWRCdXR0b24+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1aXJlZCBieSB0aGUge0BsaW5rIHNhcC5tLklUb29sYmFySW50ZXJhY3RpdmVDb250cm9sfSBpbnRlcmZhY2UuXG5cdCAqIERldGVybWluZXMgaWYgdGhlIENvbnRyb2wgaXMgaW50ZXJhY3RpdmUuXG5cdCAqIEByZXR1cm5zIElmIGl0IGlzIGFuIGludGVyYWN0aXZlIENvbnRyb2xcblx0ICovXG5cdF9nZXRUb29sYmFySW50ZXJhY3RpdmUgPSAoKTogYm9vbGVhbiA9PiB0cnVlO1xuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHNlbGVjdG9yIGFzIGEgU2VsZWN0LlxuXHQgKiBAcGFyYW0gbWV0YUNvbnRleHQgVGhlIG1ldGEgY29udGV4dFxuXHQgKiBAcmV0dXJucyAgVGhlIFNlbGVjdFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWxlY3RTZWxlY3RvcihtZXRhQ29udGV4dDogQ29udGV4dCk6IFNlbGVjdCB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLnBhdGhzLm1hcCgocGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdHJldHVybiAoPEl0ZW0gey4uLnRoaXMuZ2V0U2VsZWN0b3JJdGVtUHJvcGVydGllcyhpbmRleCwgbWV0YUNvbnRleHQpfSAvPikgYXMgSXRlbTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRpZD17YCR7dGhpcy5pZH0tY29udGVudGB9XG5cdFx0XHRcdGVuYWJsZWQ9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgXCJwYWdlSW50ZXJuYWxcIiksIHRydWUpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCldfVxuXHRcdFx0XHRhdXRvQWRqdXN0V2lkdGg9e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17dGhpcy5vblNlbENoYW5nZS5iaW5kKHRoaXMpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1NlbGVjdD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdG9yIEl0ZW0uXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW50byB0aGUgc2VsZWN0b3Jcblx0ICogQHBhcmFtIG1ldGFDb250ZXh0IFRoZSBtZXRhIGNvbnRleHRcblx0ICogQHJldHVybnMgIFRoZSBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9ySXRlbVByb3BlcnRpZXMoaW5kZXg6IG51bWJlciwgbWV0YUNvbnRleHQ6IENvbnRleHQpOiB7IGtleTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogdGhpcy5wYXRoc1tpbmRleF0sXG5cdFx0XHR0ZXh0OiB0aGlzLmdldFNlbGVjdG9ySXRlbVRleHQoaW5kZXgsIG1ldGFDb250ZXh0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJZCBvZiB0aGUgSW52aXNpYmxlVGV4dCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgVGhlIElkXG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9yQXJpYUxhYmVsbGVkQnlJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBnZW5lcmF0ZShbYCR7dGhpcy5pZH0tY29udGVudGAsIFwiQXJpYVRleHRcIl0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGV4dCBmb3IgdGhlIHNlbGVjdG9yIGl0ZW0uXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW50byB0aGUgc2VsZWN0b3Jcblx0ICogQHBhcmFtIG1ldGFDb250ZXh0IFRoZSBtZXRhIGNvbnRleHRcblx0ICogQHJldHVybnMgIFRoZSB0ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGdldFNlbGVjdG9ySXRlbVRleHQoaW5kZXg6IG51bWJlciwgbWV0YUNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvdW50VGV4dCA9IGAgKHtpbnRlcm5hbD5xdWlja0ZpbHRlcnMvY291bnRzLyR7aW5kZXh9fSlgO1xuXHRcdGNvbnN0IGRhdGFUYWJsZU1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFUYWJsZU1vZGVsUGF0aCwgdGhpcy5wYXRoc1tpbmRleF0pLnRhcmdldE9iamVjdCBhc1xuXHRcdFx0fCBTZWxlY3Rpb25WYXJpYW50VHlwZVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGV4dCA9IHNlbGVjdGlvblZhcmlhbnQ/LlRleHQ/LnRvU3RyaW5nKCkgPz8gXCJcIjtcblx0XHRyZXR1cm4gYCR7dGV4dH0ke3RoaXMuc2hvd0NvdW50cyA/IGNvdW50VGV4dCA6IFwiXCJ9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIFNpZGVFZmZlY3RzIGNvbnRyb2wgdGhhdCBtdXN0IGJlIGV4ZWN1dGVkIHdoZW4gdGFibGUgY2VsbHMgdGhhdCBhcmUgcmVsYXRlZCB0byBjb25maWd1cmVkIGZpbHRlcihzKSBjaGFuZ2UuXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgbWV0YVBhdGguXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dFBhdGguXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyU2lkZUVmZmVjdEZvclF1aWNrRmlsdGVyKG1ldGFQYXRoOiBDb250ZXh0LCBjb250ZXh0UGF0aDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFQYXRoLCBjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3Qgdmlld0VudGl0eVR5cGUgPSBkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGNvbnN0IHRhYmxlTmF2aWdhdGlvblBhdGggPSBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aCwgdHJ1ZSk7XG5cblx0XHRpZiAodGFibGVOYXZpZ2F0aW9uUGF0aCAmJiB2aWV3RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3Qgc291cmNlUHJvcGVydGllczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoIG9mIHRoaXMucGF0aHMpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFWaXN1YWxpemF0aW9uTW9kZWxQYXRoLCBzZWxlY3Rpb25WYXJpYW50UGF0aClcblx0XHRcdFx0XHQudGFyZ2V0T2JqZWN0IGFzIFBhcnRpYWw8U2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcz47IC8vIFdlIGF1dGhvcml6ZSBTZWxlY3Rpb25WYXJpYW50IHdpdGhvdXQgU2VsZWN0T3B0aW9ucyBldmVuIGlmIGl0J3Mgbm90IGNvbXBsaWFudCB3aXRoIHZvY2FidWxhcmllc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zICYmXG5cdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblZhcmlhbnQ+KHNlbGVjdGlvblZhcmlhbnQsIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblZhcmlhbnRUeXBlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhVmlzdWFsaXphdGlvbk1vZGVsUGF0aCwgcHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0c291cmNlUHJvcGVydGllcy5hZGQoZ2V0VGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eU1vZGVsUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpIVxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmFkZENvbnRyb2xTaWRlRWZmZWN0cyh2aWV3RW50aXR5VHlwZSwge1xuXHRcdFx0XHRcdHNvdXJjZVByb3BlcnRpZXM6IEFycmF5LmZyb20oc291cmNlUHJvcGVydGllcyksXG5cdFx0XHRcdFx0dGFyZ2V0RW50aXRpZXM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHRhYmxlTmF2aWdhdGlvblBhdGhcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdHNvdXJjZUNvbnRyb2xJZDogYCR7dGhpcy5pZH0tY29udGVudGBcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGludmlzaWJsZVRleHQgZm9yIHRoZSBhY2Nlc3NpYmlsaXR5IGNvbXBsaWFuY2UuXG5cdCAqIEByZXR1cm5zICBUaGUgSW52aXNpYmxlVGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRBY2Nlc3NpYmlsaXR5Q29udHJvbCgpOiBJbnZpc2libGVUZXh0IHtcblx0XHRjb25zdCB0ZXh0QmluZGluZyA9IGB7c2FwLmZlLmkxOG4+TV9UQUJMRV9RVUlDS0ZJTFRFUl9BUklBfWA7XG5cdFx0Y29uc3QgaW52aXNpYmxlVGV4dCA9ICg8SW52aXNpYmxlVGV4dCB0ZXh0PXt0ZXh0QmluZGluZ30gaWQ9e3RoaXMuZ2V0U2VsZWN0b3JBcmlhTGFiZWxsZWRCeUlkKCl9IC8+KSBhcyBJbnZpc2libGVUZXh0O1xuXG5cdFx0Ly9BZGRzIHRoZSBpbnZpc2libGVUZXh0IGludG8gdGhlIHN0YXRpYywgaGlkZGVuIGFyZWEgVUkgYXJlYSBjb250YWluZXIuXG5cdFx0aW52aXNpYmxlVGV4dC50b1N0YXRpYygpO1xuXHRcdHJldHVybiBpbnZpc2libGVUZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0aWFsaXplQ29udGVudCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5tZXRhUGF0aCkge1xuXHRcdFx0Y29uc3QgbWV0YVBhdGhPYmplY3QgPSB0aGlzLmdldE1ldGFQYXRoT2JqZWN0KHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKG1ldGFQYXRoT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IG9kYXRhTWV0YU1vZGVsID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFQYXRoT2JqZWN0LmdldFBhdGgoKSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBvZGF0YU1ldGFNb2RlbD8uY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YVBhdGhPYmplY3QuZ2V0Q29udGV4dFBhdGgoKSk7XG5cdFx0XHRcdGlmICghbWV0YUNvbnRleHQgfHwgIWNvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlclNpZGVFZmZlY3RGb3JRdWlja0ZpbHRlcihtZXRhQ29udGV4dCwgY29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIFRoZSBudW1iZXIgb2Ygdmlld3MgZGVmaW5lZCBmb3IgYSB0YWJsZSBkZXRlcm1pbmVzIHRoZSBVSSBjb250cm9sIHRoYXQgbGV0cyB1c2VycyBzd2l0Y2ggdGhlIHRhYmxlIHZpZXdzOlxuXHRcdFx0XHQgKiAgLSBBIHNlZ21lbnRlZCBidXR0b24gZm9yIGEgbWF4aW11bSBvZiB0aHJlZSB2aWV3c1xuXHRcdFx0XHQgKiAgLSBBIHNlbGVjdCBjb250cm9sIGZvciBmb3VyIG9yIG1vcmUgdmlld3MuXG5cdFx0XHRcdCAqL1xuXG5cdFx0XHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5wYXRocy5sZW5ndGggPiAzID8gdGhpcy5nZXRTZWxlY3RTZWxlY3RvcihtZXRhQ29udGV4dCkgOiB0aGlzLmdldFNlZ21lbnRlZEJ1dHRvblNlbGVjdG9yKG1ldGFDb250ZXh0KTtcblx0XHRcdFx0c2VsZWN0b3IuYWRkRGVwZW5kZW50KHRoaXMuZ2V0QWNjZXNzaWJpbGl0eUNvbnRyb2woKSk7XG5cdFx0XHRcdHRoaXMuY29udGVudCA9IHNlbGVjdG9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBnZXRNRENUYWJsZSgpOiBUYWJsZSB7XG5cdFx0aWYgKCF0aGlzLm1kY1RhYmxlKSB7XG5cdFx0XHRsZXQgY3VycmVudENvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0XHR3aGlsZSAoY3VycmVudENvbnRyb2wgJiYgIWN1cnJlbnRDb250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGN1cnJlbnRDb250cm9sID0gY3VycmVudENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdHRoaXMubWRjVGFibGUgPSBjdXJyZW50Q29udHJvbCBhcyBUYWJsZTtcblx0XHRcdHJldHVybiB0aGlzLm1kY1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tZGNUYWJsZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUga2V5IG9mIHRoZSBzZWxlY3RlZCBpdGVtIChvciB0aGUga2V5IG9mIHRoZSBmaXJzdCBpdGVtIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uKS5cblx0ICogQHJldHVybnMgVGhlIHNlbGVjdGVkIGtleVxuXHQgKi9cblx0Z2V0U2VsZWN0ZWRLZXkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRTZWxlY3RlZEtleSgpIHx8IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKVswXS5nZXRLZXkoKSB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNlbGVjdGVkIGtleS5cblx0ICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIGJlIHNlbGVjdGVkXG5cdCAqL1xuXHRzZXRTZWxlY3RlZEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudD8uc2V0U2VsZWN0ZWRLZXkoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudCBpbiBhIHBlbmRpbmcgc3RhdGUuXG5cdCAqL1xuXHRzZXRDb3VudHNBc0xvYWRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJDb3VudHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXG5cdFx0Zm9yIChjb25zdCBrIGluIHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXJDb3VudHNba10gPSBcIi4uLlwiO1xuXHRcdH1cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJxdWlja0ZpbHRlcnNcIiwgeyBjb3VudHM6IHF1aWNrRmlsdGVyQ291bnRzIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGNvdW50IG9mIHRoZSBzZWxlY3RlZCBpdGVtLlxuXHQgKi9cblx0cmVmcmVzaFNlbGVjdGVkQ291bnQoKTogdm9pZCB7XG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmdldE1EQ1RhYmxlKCkuZ2V0Um93QmluZGluZygpLmdldENvdW50KCk7XG5cblx0XHRpZiAodGhpcy5zaG93Q291bnRzID09PSB0cnVlICYmIGNvdW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5maW5kSW5kZXgoKHNlbGVjdG9ySXRlbSkgPT4gc2VsZWN0b3JJdGVtLmdldEtleSgpID09PSB0aGlzLmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdFx0aWYgKGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkICYmIGl0ZW1JbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoYHF1aWNrRmlsdGVycy9jb3VudHMvJHtpdGVtSW5kZXh9YCwgVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChjb3VudCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBjb3VudHMgb2YgdGhlIHVuc2VsZWN0ZWQgaXRlbXMuXG5cdCAqIEByZXR1cm5zICBQcm9taXNlIHJlc29sdmVzIG9uY2UgdGhlIGNvdW50IGFyZSB1cGRhdGVkXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoVW5TZWxlY3RlZENvdW50cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0TURDVGFibGUoKTtcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuY29udGVudC5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgY2hhcnQgPSAoY29udHJvbGxlciBhcyBQYWdlQ29udHJvbGxlciAmIHsgZ2V0Q2hhcnRDb250cm9sPzogRnVuY3Rpb24gfSkuZ2V0Q2hhcnRDb250cm9sPy4oKTtcblx0XHRjb25zdCBjaGFydEJsb2NrID0gY2hhcnQ/LmdldFBhcmVudCgpO1xuXG5cdFx0Y29uc3Qgc2V0SXRlbUNvdW50cyA9IGFzeW5jIChpdGVtOiBJdGVtKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRjb25zdCBpdGVtS2V5ID0gaXRlbS5nZXRLZXkoKTtcblx0XHRcdGNvbnN0IGl0ZW1GaWx0ZXJzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uKHRhYmxlLCBpdGVtS2V5KTtcblx0XHRcdGNvbnN0IGNvdW50ID0gYXdhaXQgVGFibGVVdGlscy5nZXRMaXN0QmluZGluZ0ZvckNvdW50KHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRcdGJhdGNoR3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHRhZGRpdGlvbmFsRmlsdGVyczogWy4uLmJhc2VUYWJsZUZpbHRlcnMsIC4uLml0ZW1GaWx0ZXJzXSxcblx0XHRcdFx0aXRlbUtleTogaXRlbUtleVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBpdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKHNlbGVjdG9ySXRlbSkgPT4gc2VsZWN0b3JJdGVtLmdldEtleSgpID09PSBpdGVtS2V5KTtcblx0XHRcdGlmIChpdGVtSW5kZXggPiAtMSkge1xuXHRcdFx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoYHF1aWNrRmlsdGVycy9jb3VudHMvJHtpdGVtSW5kZXh9YCwgVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChjb3VudCkpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBjaGFydEZpbHRlciA9IGNoYXJ0QmxvY2s/Lmhhc1NlbGVjdGlvbnMoKSAmJiBjaGFydEJsb2NrPy5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBiYXNlVGFibGVGaWx0ZXJzID0gVGFibGVVdGlscy5nZXRIaWRkZW5GaWx0ZXJzKHRhYmxlKTtcblx0XHRpZiAoY2hhcnRGaWx0ZXIpIHtcblx0XHRcdGJhc2VUYWJsZUZpbHRlcnMucHVzaChjaGFydEZpbHRlcik7XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmdQcm9taXNlcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5nZXRLZXkoKSAhPT0gdGhpcy5nZXRTZWxlY3RlZEtleSgpKS5tYXAoYXN5bmMgKGl0ZW0pID0+IHNldEl0ZW1Db3VudHMoaXRlbSkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChiaW5kaW5nUHJvbWlzZXMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIHByb21pc2VzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QkE7QUFDQTtBQUNBO0VBRkEsSUFNcUJBLG1CQUFtQixJQUFBQyxJQUFBLEdBSHZDQyxjQUFjLENBQUMseUNBQXlDLEVBQUU7SUFDMURDLFVBQVUsRUFBRSxDQUFDLGtDQUFrQztFQUNoRCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUVBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUFBQyxLQUFBLEdBR25EQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNNUJGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQU05QkgsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBUCxJQUFBLENBQUFVLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQVM5QixTQUFBYixvQkFBWWMsVUFBZ0UsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFD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
@@ -70,7 +70,19 @@ export default class QuickFilterSelector extends BuildingBlock<SegmentedButton |
70
70
 
71
71
  getOverflowToolbarConfig(): OverflowToolbarConfig {
72
72
  return {
73
- canOverflow: true
73
+ canOverflow: true,
74
+ onBeforeEnterOverflow: function (control: QuickFilterSelector): void {
75
+ const content = control?.getContent();
76
+ (content as unknown as { getOverflowToolbarConfig: () => OverflowToolbarConfig } | undefined)
77
+ ?.getOverflowToolbarConfig()
78
+ ?.onBeforeEnterOverflow?.(content);
79
+ },
80
+ onAfterExitOverflow: function (control: QuickFilterSelector): void {
81
+ const content = control?.getContent();
82
+ (content as unknown as { getOverflowToolbarConfig: () => OverflowToolbarConfig } | undefined)
83
+ ?.getOverflowToolbarConfig()
84
+ ?.onAfterExitOverflow?.(content);
85
+ }
74
86
  };
75
87
  }
76
88
 
@@ -344,7 +356,8 @@ export default class QuickFilterSelector extends BuildingBlock<SegmentedButton |
344
356
  const itemFilters = CommonUtils.getFiltersFromAnnotation(table, itemKey);
345
357
  const count = await TableUtils.getListBindingForCount(table, table.getBindingContext(), {
346
358
  batchGroupId: "$auto",
347
- additionalFilters: [...baseTableFilters, ...itemFilters]
359
+ additionalFilters: [...baseTableFilters, ...itemFilters],
360
+ itemKey: itemKey
348
361
  });
349
362
  const itemIndex = items.findIndex((selectorItem) => selectorItem.getKey() === itemKey);
350
363
  if (itemIndex > -1) {