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