@sapui5/sap.fe.core 1.136.1 → 1.138.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 (154) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +76 -28
  4. package/src/sap/fe/core/ActionRuntime.ts +106 -30
  5. package/src/sap/fe/core/AppComponent.js +11 -1
  6. package/src/sap/fe/core/AppComponent.ts +10 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +8 -2
  9. package/src/sap/fe/core/CommonUtils.js +15 -3
  10. package/src/sap/fe/core/CommonUtils.ts +13 -2
  11. package/src/sap/fe/core/PageController.controller.js +10 -0
  12. package/src/sap/fe/core/PageController.controller.ts +3 -0
  13. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
  14. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
  19. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
  20. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
  21. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
  22. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
  27. package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
  28. package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
  29. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
  30. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
  33. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
  34. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
  35. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
  36. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
  38. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
  39. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
  40. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
  47. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
  49. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
  50. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
  51. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
  52. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
  53. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
  54. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
  55. package/src/sap/fe/core/controls/DataWatcher.js +2 -2
  56. package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
  57. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
  58. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
  59. package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
  60. package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  62. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
  63. package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
  64. package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
  65. package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
  66. package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
  67. package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
  68. package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
  69. package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
  70. package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
  71. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
  72. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
  73. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
  74. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
  75. package/src/sap/fe/core/fpm/manifest.json +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
  78. package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
  79. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  80. package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
  81. package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
  82. package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
  83. package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
  84. package/src/sap/fe/core/library.js +33 -4
  85. package/src/sap/fe/core/library.ts +33 -2
  86. package/src/sap/fe/core/messagebundle.properties +18 -2
  87. package/src/sap/fe/core/messagebundle_ar.properties +3 -2
  88. package/src/sap/fe/core/messagebundle_bg.properties +2 -1
  89. package/src/sap/fe/core/messagebundle_ca.properties +2 -1
  90. package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
  91. package/src/sap/fe/core/messagebundle_cs.properties +4 -3
  92. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  93. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  94. package/src/sap/fe/core/messagebundle_de.properties +8 -7
  95. package/src/sap/fe/core/messagebundle_el.properties +2 -1
  96. package/src/sap/fe/core/messagebundle_en.properties +2 -1
  97. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  98. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
  99. package/src/sap/fe/core/messagebundle_es.properties +5 -4
  100. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  101. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  102. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  103. package/src/sap/fe/core/messagebundle_fr.properties +2 -1
  104. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
  105. package/src/sap/fe/core/messagebundle_hi.properties +2 -1
  106. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  107. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  108. package/src/sap/fe/core/messagebundle_id.properties +2 -1
  109. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  110. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  111. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  112. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  113. package/src/sap/fe/core/messagebundle_ko.properties +2 -1
  114. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  115. package/src/sap/fe/core/messagebundle_lv.properties +2 -1
  116. package/src/sap/fe/core/messagebundle_mk.properties +2 -1
  117. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  118. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  119. package/src/sap/fe/core/messagebundle_no.properties +3 -2
  120. package/src/sap/fe/core/messagebundle_pl.properties +2 -1
  121. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  122. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  123. package/src/sap/fe/core/messagebundle_ro.properties +2 -1
  124. package/src/sap/fe/core/messagebundle_ru.properties +2 -1
  125. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  126. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  127. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  128. package/src/sap/fe/core/messagebundle_sr.properties +2 -1
  129. package/src/sap/fe/core/messagebundle_sv.properties +2 -1
  130. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  131. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  132. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  133. package/src/sap/fe/core/messagebundle_vi.properties +2 -1
  134. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
  135. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
  136. package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
  137. package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
  138. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
  139. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
  140. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
  141. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
  142. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
  143. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
  144. package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
  145. package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
  146. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  147. package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
  148. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
  149. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
  150. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
  151. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
  152. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
  153. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
  154. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
@@ -328,11 +328,15 @@ class EditFlow extends BaseControllerExtension {
328
328
  BusyLocker.lock(lockObject);
329
329
 
330
330
  try {
331
+ const deleted = await this.deleteDocumentTransaction(contextsToDelete, parameters);
332
+ if (!deleted) {
333
+ // The delete was cancelled
334
+ return;
335
+ }
336
+
331
337
  if (this.getProgrammingModel(parameters?.selectedContexts?.[0] ?? contextsToDelete[0]) === ProgrammingModel.Sticky) {
332
338
  this.setDocumentModified(true);
333
339
  }
334
- await this.deleteDocumentTransaction(contextsToDelete, parameters);
335
-
336
340
  let result;
337
341
 
338
342
  // Multiple object deletion is triggered from a list
@@ -525,7 +529,6 @@ class EditFlow extends BaseControllerExtension {
525
529
  ): Promise<void> {
526
530
  let oDataListBinding!: ODataListBinding;
527
531
  let parentContext: ODataV4Context | undefined;
528
-
529
532
  const dataModel = this.getView().getModel();
530
533
  let selectedProperties: string | undefined;
531
534
  if (dataModel && ModelHelper.isCollaborationDraftSupported(dataModel.getMetaModel())) {
@@ -1610,7 +1613,7 @@ class EditFlow extends BaseControllerExtension {
1610
1613
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
1611
1614
  * @param _mParameters Object containing the parameters passed to onAfterSave
1612
1615
  * @param _mParameters.context The context we obtained after saving
1613
- * @returns A promise to be returned by the overridden method.
1616
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
1614
1617
  * @public
1615
1618
  * @since 1.116.0
1616
1619
  */
@@ -1629,7 +1632,7 @@ class EditFlow extends BaseControllerExtension {
1629
1632
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
1630
1633
  * @param _mParameters Object containing the parameters passed to onAfterCreate
1631
1634
  * @param _mParameters.context The newly created context
1632
- * @returns A promise to be returned by the overridden method.
1635
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
1633
1636
  * @public
1634
1637
  * @since 1.116.0
1635
1638
  */
@@ -1648,7 +1651,7 @@ class EditFlow extends BaseControllerExtension {
1648
1651
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
1649
1652
  * @param _mParameters Object containing the parameters passed to onAfterEdit
1650
1653
  * @param _mParameters.context Page context that is going to be edited.
1651
- * @returns A promise to be returned by the overridden method.
1654
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
1652
1655
  * @public
1653
1656
  * @since 1.116.0
1654
1657
  */
@@ -1667,7 +1670,7 @@ class EditFlow extends BaseControllerExtension {
1667
1670
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
1668
1671
  * @param _mParameters Object containing the parameters passed to onAfterDiscard
1669
1672
  * @param _mParameters.context The context obtained after discarding the object, or undefined if we discarded a new object
1670
- * @returns A promise to be returned by the overridden method.
1673
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
1671
1674
  * @public
1672
1675
  * @since 1.116.0
1673
1676
  */
@@ -1686,7 +1689,7 @@ class EditFlow extends BaseControllerExtension {
1686
1689
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
1687
1690
  * @param _mParameters Object containing the parameters passed to onAfterDelete
1688
1691
  * @param _mParameters.contexts An array of contexts that are going to be deleted
1689
- * @returns A promise to be returned by the overridden method.
1692
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
1690
1693
  * @public
1691
1694
  * @since 1.116.0
1692
1695
  */
@@ -1922,6 +1925,7 @@ class EditFlow extends BaseControllerExtension {
1922
1925
 
1923
1926
  let siblingInfo: SiblingInformation | undefined;
1924
1927
  let isNewDocument = false;
1928
+ mParameters.skipDiscardPopover = this._hiddenDraft?.enabled ? true : mParameters.skipDiscardPopover;
1925
1929
  const cancelParameters: CancelParameters = {
1926
1930
  skipDiscardPopover: mParameters.skipDiscardPopover === true,
1927
1931
  cancelButton: (mParameters.control || mParameters.cancelButton)!,
@@ -2044,7 +2048,9 @@ class EditFlow extends BaseControllerExtension {
2044
2048
 
2045
2049
  async isRootContextNew(context: Context): Promise<boolean> {
2046
2050
  const rootContext = await this.getRootContext(context, { $select: "HasActiveEntity,IsActiveEntity" });
2047
- return !rootContext.getObject("HasActiveEntity") && !rootContext.getObject("IsActiveEntity");
2051
+ // When we refresh the root context, it may not have the properties HasActiveEntity and IsActiveEntity yet, so we request them
2052
+ const draftProperties = await rootContext.requestProperty(["HasActiveEntity", "IsActiveEntity"]);
2053
+ return !draftProperties[0] && !draftProperties[1];
2048
2054
  }
2049
2055
 
2050
2056
  /**
@@ -2141,12 +2147,16 @@ class EditFlow extends BaseControllerExtension {
2141
2147
  };
2142
2148
  }
2143
2149
 
2150
+ const deleted = await this.deleteDocumentTransaction(oContext, mParameters);
2151
+ if (!deleted) {
2152
+ // The delete was canceled by the user
2153
+ return;
2154
+ }
2155
+
2144
2156
  if (this.getProgrammingModel(oContext) === ProgrammingModel.Sticky) {
2145
2157
  this.setDocumentModified(true);
2146
2158
  }
2147
2159
 
2148
- await this.deleteDocumentTransaction(oContext, mParameters);
2149
-
2150
2160
  // Single objet deletion is triggered from an OP header button (not from a list)
2151
2161
  // --> Mark UI dirty and navigate back to dismiss the OP
2152
2162
  if (!this._isFclEnabled()) {
@@ -2725,15 +2735,15 @@ class EditFlow extends BaseControllerExtension {
2725
2735
  let forceDisplayMode = false;
2726
2736
  const isActiveEntity = await context.requestObject("IsActiveEntity");
2727
2737
 
2728
- if (isCollaborationDraftSupported && isActiveEntity === false) {
2738
+ if (isCollaborationDraftSupported) {
2729
2739
  forceDisplayMode = !(await this.base.collaborativeDraft.activateCollaboration(context, isActiveEntity));
2730
2740
  } else {
2731
2741
  globalModel.setProperty("/hasCollaborationAuthorization", undefined);
2732
2742
  }
2733
2743
  this.fetchCollaborativeDraftUsersPromise = undefined;
2734
-
2735
2744
  if (isActiveEntity === false && !forceDisplayMode) {
2736
- // in case the document is draft set it in edit mode
2745
+ // in case the document is draft, set it in edit mode
2746
+ // unless we don't have the authorization for a collaborative user
2737
2747
  this.setEditMode(EditMode.Editable);
2738
2748
  const hasActiveEntity = await context.requestObject("HasActiveEntity");
2739
2749
  this.setEditMode(undefined, !hasActiveEntity);
@@ -2782,6 +2792,7 @@ class EditFlow extends BaseControllerExtension {
2782
2792
  * @param parameters.lockedContexts
2783
2793
  * @param parameters.draftsWithDeletableActive
2784
2794
  * @param parameters.draftsWithNonDeletableActive
2795
+ * @returns Promise resolves once the deletion is completed
2785
2796
  */
2786
2797
  private async deleteDocumentTransaction(
2787
2798
  contexts: Context | Context[],
@@ -2802,7 +2813,7 @@ class EditFlow extends BaseControllerExtension {
2802
2813
  draftsWithDeletableActive?: DraftSiblingPair[];
2803
2814
  draftsWithNonDeletableActive?: Context[];
2804
2815
  }
2805
- ): Promise<void> {
2816
+ ): Promise<boolean> {
2806
2817
  if (parameters.selectedContexts) {
2807
2818
  // as selected contexts may include inactive context we need to compute this parameter again to ensure delete helper works properly
2808
2819
  parameters.numberOfSelectedContexts = parameters.selectedContexts.length;
@@ -2822,7 +2833,7 @@ class EditFlow extends BaseControllerExtension {
2822
2833
  }
2823
2834
 
2824
2835
  await this.syncTask();
2825
- await transactionHelper.deleteDocument(contexts, parameters, this.getAppComponent(), resourceModel, this.getMessageHandler());
2836
+ return transactionHelper.deleteDocument(contexts, parameters, this.getAppComponent(), resourceModel, this.getMessageHandler());
2826
2837
  }
2827
2838
 
2828
2839
  _getResourceModel(): ResourceModel {
@@ -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/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controls/inlineEditFlow/BeforeActionDialog", "sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/m/MessageToast", "sap/ui/core/Lib", "sap/ui/core/Messaging", "../controls/inlineEditFlow/DraftExistsDialog"], function (Log, ClassSupport, HookSupport, CommonUtils, BaseControllerExtension, messageHandling, BeforeActionDialog, BeforeNavigationDialog, MetaModelConverter, TypeGuards, MessageToast, Lib, Messaging, DraftExistsDialog) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/m/MessageToast", "sap/ui/core/Lib", "sap/ui/core/Messaging", "../controls/inlineEditFlow/DraftExistsDialog"], function (Log, ClassSupport, HookSupport, CommonUtils, BaseControllerExtension, messageHandling, InlineEditExitDialog, MetaModelConverter, TypeGuards, MessageToast, Lib, Messaging, DraftExistsDialog) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2;
@@ -244,6 +244,24 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
244
244
  * @returns Promise that retruns true if we need to cancel navigation and stay in inline edit
245
245
  */;
246
246
  _proto.onBeforeNavigation = async function onBeforeNavigation() {
247
+ try {
248
+ await this.onBeforeAnyEditFlowAction();
249
+ return false;
250
+ } catch (e) {
251
+ return true;
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Method to open the dialog before navigation.
257
+ * @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
258
+ */;
259
+ _proto.openInlineEditExitDialogAndWaitForResult = async function openInlineEditExitDialogAndWaitForResult() {
260
+ return new Promise(resolve => {
261
+ new InlineEditExitDialog(this.base.getView(), resolve).open();
262
+ });
263
+ };
264
+ _proto.onBeforeAnyEditFlowAction = async function onBeforeAnyEditFlowAction() {
247
265
  if (this.inlineEditControls.length > 0) {
248
266
  // there are controls in inline edit we need to prevent the navigation and show the dialog
249
267
  this.preventFieldGroupChangeHandler = true;
@@ -254,13 +272,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
254
272
  if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
255
273
  // fields are in inline edit and there are no pending changes. We need to show the dialog
256
274
  this.inlineEditEnd();
257
- return false;
275
+ return;
258
276
  }
259
277
  try {
260
278
  if (this.patchPromise) {
261
279
  await this.patchPromise;
262
280
  } else {
263
- const dialogResult = await this.openInlineEditBeforeNavigationDialogAndWaitForResult();
281
+ const dialogResult = await this.openInlineEditExitDialogAndWaitForResult();
264
282
  if (dialogResult === "Save") {
265
283
  // we save and wait for the patchPromise
266
284
  await this.inlineEditSave();
@@ -268,58 +286,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
268
286
  // if after saves there are still changes this means save has failed. we need to cancel navigation
269
287
  this.focusHandling(this.inlineEditControls[0]);
270
288
  this.reactivateFieldGroupChangeHandler();
271
- return true;
289
+ throw new Error("unsave change prevent execution");
272
290
  }
273
291
  } else if (dialogResult === "Cancel") {
274
292
  this.focusHandling(this.inlineEditControls[0]);
275
293
  this.reactivateFieldGroupChangeHandler();
276
- return true;
294
+ throw new Error("cancel was chosen");
277
295
  } else {
278
296
  // we discard the changes
279
297
  this.inlineEditDiscard();
280
298
  }
281
299
  this.reactivateFieldGroupChangeHandler();
282
- return false;
300
+ return;
283
301
  }
284
302
  } catch (e) {
285
303
  this.focusHandling(this.inlineEditControls[0]);
286
304
  this.reactivateFieldGroupChangeHandler();
287
- return true;
288
- }
289
- }
290
- return false;
291
- }
292
-
293
- /**
294
- * Method to open the dialog before navigation.
295
- * @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
296
- */;
297
- _proto.openInlineEditBeforeNavigationDialogAndWaitForResult = async function openInlineEditBeforeNavigationDialogAndWaitForResult() {
298
- return new Promise(resolve => {
299
- new BeforeNavigationDialog(this.base.getView(), resolve).open();
300
- });
301
- }
302
-
303
- /**
304
- * Method to ensure we leave inline edit before any standard edit flowaction.
305
- * @returns Promise that reject and triggers save or discard if we are in inline edit
306
- */;
307
- _proto.onBeforeAnyEditFlowAction = async function onBeforeAnyEditFlowAction() {
308
- if (this.inlineEditControls.length > 0) {
309
- if (this.abortTimerBeforeSave) {
310
- this.abortTimerBeforeSave();
311
- this.abortTimerBeforeSave = undefined;
305
+ return Promise.reject();
312
306
  }
313
- if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
314
- // fields are in inline edit and there are no pending changes. We don't need to show the dialog
315
- this.inlineEditEnd();
316
- return Promise.resolve();
317
- }
318
- new BeforeActionDialog(this.base.getView()).open();
319
- // there are controls in inline edit we need to prevent the action and show the dialog
320
- return Promise.reject();
321
307
  }
322
- return Promise.resolve();
308
+ return;
323
309
  }
324
310
 
325
311
  /**
@@ -386,4 +372,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
386
372
  _exports = InlineEditFlow;
387
373
  return _exports;
388
374
  }, false);
389
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfZGVjMyIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsImlubGluZUVkaXRDb250cm9scyIsInByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0lubGluZUVkaXRQb3NzaWJsZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRJbmxpbmVFZGl0U2VydmljZSIsImRvZXNQYWdlSGF2ZUlubGluZUVkaXQiLCJnZXRSb3V0aW5nVGFyZ2V0TmFtZSIsImlubGluZUVkaXRTYXZlIiwibW9kZWwiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJoYXNUZWNobmljYWxNZXNzYWdlcyIsInNvbWUiLCJtZXNzYWdlIiwibWVzc2FnZUhhbmRsaW5nIiwiaXNOb25UZWNobmljYWxNZXNzYWdlIiwic2V0U2hvd0Zvb3RlciIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJpbmxpbmVFZGl0RW5kIiwicmVtb3ZlQWxsTWVzc2FnZXMiLCJzdWJtaXRCYXRjaCIsImVycm9yIiwiTG9nIiwid2FybmluZyIsImlubGluZUVkaXREaXNjYXJkIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwiY29udHJvbCIsInNldFByb3BlcnR5Iiwic3RhcnRJbmxpbmVFZGl0IiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJjb250cm9sVHJpZ2dlciIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJEcmFmdEV4aXN0c0RpYWxvZyIsIm9wZW4iLCJyZXNldEluZGljYXRvclBvcHVwIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJkZXBlbmRlbnRQcm9wZXJ0aWVzIiwiZ2V0SW5saW5lQ29ubmVjdGVkUHJvcGVydGllcyIsImlubGluZUVkaXRTdGFydCIsImZvY3VzSGFuZGxpbmciLCJpbmxpbmVFZGl0Q29udHJvbCIsImNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUiLCJmb2N1cyIsInByb3BlcnRpZXMiLCJhYm9ydFRpbWVyQmVmb3JlU2F2ZSIsInVuZGVmaW5lZCIsImFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMiLCJtYXAiLCJnZXRJZCIsImluY2x1ZGVzIiwicHVzaCIsImlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgiLCJpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQiLCJoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50IiwiZXZlbnQiLCJwYXRjaFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdldFNvdXJjZSIsImF0dGFjaEV2ZW50T25jZSIsInBhdGNoQ29tcGxldGVkRXZlbnQiLCJiU3VjY2VzcyIsImdldFBhcmFtZXRlciIsInJlc291cmNlQnVuZGxlIiwiTGliIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsImhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicHJvcGFnYXRlSW5saW5lRmllbGRHcm91cElkVG9NZXNzYWdlQnV0dG9uIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0cyIsInRhcmdldE1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGVsYXllZENhbGxUb1NhdmUiLCJ0aW1lckJlZm9yZVNhdmUiLCJzZXRUaW1lb3V0IiwiZSIsInJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsImRpYWxvZ1Jlc3VsdCIsIm9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQiLCJCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nIiwib25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbiIsIkJlZm9yZUFjdGlvbkRpYWxvZyIsIm9uQmVmb3JlQmluZGluZyIsIm9uQmVmb3JlRWRpdCIsIm9uQmVmb3JlQ3JlYXRlIiwib25CZWZvcmVEZWxldGUiLCJvbkJlZm9yZUV4ZWN1dGVBY3Rpb24iLCJmb290ZXJDb250cm9scyIsImdldEZvb3RlciIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJpc0EiLCJjaGlsZEZpZWxkR3JvdXBJZHMiLCJTZXQiLCJnZXRGaWVsZEdyb3VwSWRzIiwiYWRkIiwic2V0RmllbGRHcm91cElkcyIsImZyb20iLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRGbG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlLCB0eXBlIEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgQmVmb3JlQWN0aW9uRGlhbG9nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9pbmxpbmVFZGl0Rmxvdy9CZWZvcmVBY3Rpb25EaWFsb2dcIjtcbmltcG9ydCBCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nLCB7IHR5cGUgRElBTE9HUkVTVUxUIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL2lubGluZUVkaXRGbG93L0JlZm9yZU5hdmlnYXRpb25EaWFsb2dcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgSW5saW5lRWRpdCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBEcmFmdEV4aXN0c0RpYWxvZyBmcm9tIFwiLi4vY29udHJvbHMvaW5saW5lRWRpdEZsb3cvRHJhZnRFeGlzdHNEaWFsb2dcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW5saW5lRWRpdEZsb3dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRGbG93IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblxuXHRwcml2YXRlIGlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBhYm9ydFRpbWVyQmVmb3JlU2F2ZT86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgcGF0Y2hQcm9taXNlPzogUHJvbWlzZTxVSTVFdmVudD47XG5cblx0cHJpdmF0ZSBwcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgdGhlcmUgY2FuIGJlIGlubGluZSBlZGl0IG9uIHRoZSBwYWdlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGlubGluZSBlZGl0IGlzIHBvc3NpYmxlXG5cdCAqL1xuXHRpc0lubGluZUVkaXRQb3NzaWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldElubGluZUVkaXRTZXJ2aWNlKCkuZG9lc1BhZ2VIYXZlSW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZWQgb25jZSB0aGUgYmF0Y2ggaGFzIHJldHVybmVkLlxuXHQgKi9cblx0YXN5bmMgaW5saW5lRWRpdFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgaGFzVGVjaG5pY2FsTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZUhhbmRsaW5nLmlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlKSk7XG5cdFx0aWYgKGhhc1RlY2huaWNhbE1lc3NhZ2VzKSB7XG5cdFx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3Rlcih0cnVlKTtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBpbnZhbGlkIHR5cGVzIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNhdmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFtb2RlbC5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVBbGxNZXNzYWdlcygpO1xuXHRcdFx0YXdhaXQgbW9kZWwuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzYXZpbmcgaW5saW5lIGVkaXQgY2hhbmdlc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY2FyZCB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICovXG5cdGlubGluZUVkaXREaXNjYXJkKCk6IHZvaWQge1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR0aGlzLmlubGluZUVkaXRFbmQodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5kIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvblxuXHQgKi9cblx0aW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5iYXNlLnNldFNob3dGb290ZXIoZmFsc2UpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmlubGluZUVkaXRDb250cm9scykge1xuXHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuaW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24pO1xuXHRcdH1cblx0XHR0aGlzLmlubGluZUVkaXRDb250cm9scyA9IFtdO1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRBY3RpdmVcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqIEBwYXJhbSBjb250cm9sVHJpZ2dlclxuXHQgKi9cblx0c3RhcnRJbmxpbmVFZGl0KFxuXHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcsXG5cdFx0YmluZGluZ0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbFRyaWdnZXI/OiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChjb250cm9sVHJpZ2dlcj8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYWxyZWFkeSBhIGRyYWZ0IG9uIHRoZSBlbnRpdHkuIFdlIHNob3VsZCBub3Qgc3RhcnQgaW5saW5lIGVkaXRcblx0XHRcdG5ldyBEcmFmdEV4aXN0c0RpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpKS5vcGVuKCk7XG5cdFx0XHRjb250cm9sVHJpZ2dlcj8ucmVzZXRJbmRpY2F0b3JQb3B1cCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpbmxpbmVFZGl0U2VydmljZSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRJbmxpbmVFZGl0U2VydmljZSgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudFByb3BlcnRpZXMgPSBpbmxpbmVFZGl0U2VydmljZS5nZXRJbmxpbmVDb25uZWN0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0dGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksXG5cdFx0XHRwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cblx0XHR0aGlzLmlubGluZUVkaXRTdGFydChbXSwgZGVwZW5kZW50UHJvcGVydGllcz8ubGVuZ3RoID8gZGVwZW5kZW50UHJvcGVydGllcyA6IFtwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZV0sIGJpbmRpbmdDb250ZXh0UGF0aCk7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGluZyBmb3IgaW5saW5lIGVkaXQuIFdoZW4gb25lIGZpZWxkIGdldHMgZm9jdXMsIGFsbCBvdGhlciBpbmxpbmUgZWRpdCBwb3B1cHMsIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuZWQsIHNob3VsZCBiZSBjbG9zZWQuXG5cdCAqIEBwYXJhbSBpbmxpbmVFZGl0Q29udHJvbCBDb250cm9scyB3aGljaCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nKGlubGluZUVkaXRDb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoY29udHJvbCAhPT0gaW5saW5lRWRpdENvbnRyb2wpIHtcblx0XHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sID09PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHRjb250cm9sLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpcm0gdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc1xuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqL1xuXHRAaG9va2FibGUoXCJCZWZvcmVcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBpbmxpbmVFZGl0U3RhcnQoaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBiaW5kaW5nQ29udGV4dFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyAgYSB0aW1lciB0byBzYXZlXG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzID0gdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubWFwKChjb250cm9sOiBDb250cm9sKSA9PiBjb250cm9sLmdldElkKCkpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBpbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmICghYWxyZWFkeVJlZ2lzdGVyZWRDb250cm9scy5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdCAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgaXMgY29uc2lkZXJlZCBmb3IgSW5saW5lIGVkaXQuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJhc2Vcblx0XHRcdC5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldElubGluZUVkaXRTZXJ2aWNlKClcblx0XHRcdC5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQodGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBwYXRjaFNlbnQgZXZlbnQ6IGhhbmRsZSBpbmxpbmUgZWRpdCBzYXZlIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBzZW50IGJ5IHRoZSBiaW5kaW5nXG5cdCAqL1xuXHRhc3luYyBoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50KGV2ZW50OiBPRGF0YUNvbnRleHRCaW5kaW5nJFBhdGNoU2VudEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIGlubGluZSBlZGl0IGNvbnRyb2xzLCB0aGlzIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTxVSTVFdmVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IFVJNUV2ZW50PHsgc3VjY2VzczogYm9vbGVhbiB9PikgPT4ge1xuXHRcdFx0XHRjb25zdCBiU3VjY2VzcyA9IHBhdGNoQ29tcGxldGVkRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QocGF0Y2hDb21wbGV0ZWRFdmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdHRoaXMucGF0Y2hQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdGlmIChyZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19JTkxJTkVfRURJVF9TQVZFRFwiKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9IGNhdGNoIChwYXRjaENvbXBsZXRlZEV2ZW50KSB7XG5cdFx0XHR0aGlzLnBhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIGVycm9ycyB3aGVuIHRoZSBpbmxpbmUgZWRpdCBzYXZlIGZhaWxzLlxuXHQgKi9cblx0aGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0dGhpcy5wcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRhcmdldCBvZiBtZXNzYWdlLmdldFRhcmdldHMoKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0KSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgPSB0YXJnZXRNZXRhQ29udGV4dFxuXHRcdFx0XHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czx1bmtub3duPih0YXJnZXRNZXRhQ29udGV4dClcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUgPVxuXHRcdFx0XHRcdFx0KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik/LnRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhcnRJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSwgdGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSBkZWxheWVkQ2FsbCB3aGVuIHlvdSBmb2N1cyBvdXQgb2YgYSBmaWVsZC5cblx0ICovXG5cdGFzeW5jIGRlbGF5ZWRDYWxsVG9TYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlIHx8IHRoaXMucGF0Y2hQcm9taXNlIHx8IHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgdGltZXIgcnVubmluZyBvciBhIHNhdmUgaW4gcHJvY2VzcyBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHRpbWVyQmVmb3JlU2F2ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSByZWplY3Q7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgNTAwKTtcblx0XHR9KTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGltZXJCZWZvcmVTYXZlO1xuXHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBOb3RoaW5nIHRvIHNlZSBpdCBpcyBqdXN0IHNvbWVvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIHRpbWVyXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZWFjdGl2YXRlIHRoZSBmaWVsZCBncm91cCBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIGRlbGF5LlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBoYW5kbGVyIGlzIG5vdCB0cmlnZ2VyZWQgd2hpbGUgZm9jdXMgaXMgc2hpZnRpbmcgd2hlbiB3ZSBvcGVuIGEgZGlhbG9nLlxuXHQgKi9cblx0cmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5wcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblx0XHR9LCA1MDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBuYXZpZ2F0aW9uLi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHJ1bnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uIGFuZCBzdGF5IGluIGlubGluZSBlZGl0XG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJyb3V0aW5nXCIpXG5cdGFzeW5jIG9uQmVmb3JlTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gdGhlcmUgYXJlIGNvbnRyb2xzIGluIGlubGluZSBlZGl0IHdlIG5lZWQgdG8gcHJldmVudCB0aGUgbmF2aWdhdGlvbiBhbmQgc2hvdyB0aGUgZGlhbG9nXG5cdFx0XHR0aGlzLnByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciA9IHRydWU7XG5cdFx0XHRpZiAodGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSkge1xuXHRcdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHRcdC8vIGZpZWxkcyBhcmUgaW4gaW5saW5lIGVkaXQgYW5kIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXMuIFdlIG5lZWQgdG8gc2hvdyB0aGUgZGlhbG9nXG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodGhpcy5wYXRjaFByb21pc2UpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBkaWFsb2dSZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoZGlhbG9nUmVzdWx0ID09PSBcIlNhdmVcIikge1xuXHRcdFx0XHRcdFx0Ly8gd2Ugc2F2ZSBhbmQgd2FpdCBmb3IgdGhlIHBhdGNoUHJvbWlzZVxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGFmdGVyIHNhdmVzIHRoZXJlIGFyZSBzdGlsbCBjaGFuZ2VzIHRoaXMgbWVhbnMgc2F2ZSBoYXMgZmFpbGVkLiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZyh0aGlzLmlubGluZUVkaXRDb250cm9sc1swXSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nUmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmcodGhpcy5pbmxpbmVFZGl0Q29udHJvbHNbMF0pO1xuXHRcdFx0XHRcdFx0dGhpcy5yZWFjdGl2YXRlRmllbGRHcm91cENoYW5nZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBkaXNjYXJkIHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHR0aGlzLmlubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZyh0aGlzLmlubGluZUVkaXRDb250cm9sc1swXSk7XG5cdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG9wZW4gdGhlIGRpYWxvZyBiZWZvcmUgbmF2aWdhdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIGRpYWxvZyBjaG9pY2Ugb25jZSB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbiBvayBvciBjYW5jZWxcblx0ICovXG5cdGFzeW5jIG9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQoKTogUHJvbWlzZTxESUFMT0dSRVNVTFQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8RElBTE9HUkVTVUxUPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bmV3IEJlZm9yZU5hdmlnYXRpb25EaWFsb2codGhpcy5iYXNlLmdldFZpZXcoKSwgcmVzb2x2ZSkub3BlbigpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBzdGFuZGFyZCBlZGl0IGZsb3dhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgYW5kIHRyaWdnZXJzIHNhdmUgb3IgZGlzY2FyZCBpZiB3ZSBhcmUgaW4gaW5saW5lIGVkaXRcblx0ICovXG5cdGFzeW5jIG9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0Ly8gZmllbGRzIGFyZSBpbiBpbmxpbmUgZWRpdCBhbmQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlcy4gV2UgZG9uJ3QgbmVlZCB0byBzaG93IHRoZSBkaWFsb2dcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH1cblx0XHRcdG5ldyBCZWZvcmVBY3Rpb25EaWFsb2codGhpcy5iYXNlLmdldFZpZXcoKSkub3BlbigpO1xuXHRcdFx0Ly8gdGhlcmUgYXJlIGNvbnRyb2xzIGluIGlubGluZSBlZGl0IHdlIG5lZWQgdG8gcHJldmVudCB0aGUgYWN0aW9uIGFuZCBzaG93IHRoZSBkaWFsb2dcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGVuc3VyZSB3ZSBzdGFydCB0aGUgcGFnZSB3aXRob3V0IGFueSB1bnNhdmVkIGlubGluZSBlZGl0IGNoYW5nZXMuXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvbkJlZm9yZUJpbmRpbmcoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIGlmIGZvciBzb21lb25lIHJlYXNvbiBpbmxpbmUgZWRpdCB3YXNuJ3QgZW5kZWQgcHJvcGVybHkgd2UgZW5zdXJlIHdlIHN0YXJ0IGZyZXNoIG9uIHRoZSBwYWdlXG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHQvLyBpZiBmb3Igc29tZW9uZSByZWFzb24gaW5saW5lIGVkaXQgd2Fzbid0IGVuZGVkIHByb3Blcmx5IHdlIGVuc3VyZSB0aGF0IHRoZSBtb2RlbCBpcyBjb25zaXN0ZW50XG5cdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgZWRpdC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBlZGl0IG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVFZGl0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGNyZWF0ZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBjcmV0YWUgbmVlZHMgdG8gYmUgY2FuY2VsbGVkXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJlZGl0Rmxvd1wiKVxuXHRhc3luYyBvbkJlZm9yZUNyZWF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGJlZm9yZSBkZWxldGUuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgZGVsZXRlIG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVEZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgYWN0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVqZWN0IGlmIGRlbGV0ZSBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRXhlY3V0ZUFjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvcGFnYXRlIHRoZSBmaWVsZCBncm91cCBpZCB0byB0aGUgbWVzc2FnZSBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIHByb3BhZ2F0ZUlubGluZUZpZWxkR3JvdXBJZFRvTWVzc2FnZUJ1dHRvbigpOiB2b2lkIHtcblx0XHQvLyB3ZSBwcm9wYWdhdGUgdGhlIGZpZWxkZ3JvdXBJZCB0byB0aGUgZm9vdGVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzIHRvIGVuc3VyZSB0aGF0XG5cdFx0Ly8gY2xpY2tpbmcgb24gdGhlIGZvb3RlciBkb2VzIG5vdCB0cmlnZ2VyIGEgZm9jdXNvdXQgYW5kIGEgc2F2ZSBmb3IgdGhlIGlubGluZSBlZGl0XG5cdFx0Y29uc3QgZm9vdGVyQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuYmFzZVxuXHRcdFx0XHQuZ2V0Rm9vdGVyKClcblx0XHRcdFx0Py5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG1hbmFnZWRPYmplY3Q6IE1hbmFnZWRPYmplY3QpID0+IG1hbmFnZWRPYmplY3QuaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkgYXNcblx0XHRcdFx0fCBDb250cm9sW11cblx0XHRcdFx0fCB1bmRlZmluZWQpID8/IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGZvb3RlckNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5hZGQoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUEwQnFCQSxjQUFjLElBQUFDLElBQUEsR0FEbENDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQyxFQUFBQyxLQUFBLEdBcUhoRUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFBQyxLQUFBLEdBbUlsQkMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFBQyxLQUFBLEdBbUZ6QkQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBRSxLQUFBLEdBZ0IxQkYsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBRyxLQUFBLEdBUzFCSCxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUFJLEtBQUEsR0FTMUJKLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUssS0FBQSxHQVMxQkwsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBTCxJQUFBLENBQUFXLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMscUJBQUE7SUFBQSxTQUFBZCxlQUFBO01BQUEsSUFBQWUsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FB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LENBQUM7UUFDOURGLGtCQUFrQixDQUFDRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ3BDdEYsT0FBTyxDQUFDdUYsZ0JBQWdCLENBQUNoSSxLQUFLLENBQUNpSSxJQUFJLENBQUNMLGtCQUFrQixDQUFDLENBQUM7TUFDekQ7SUFDRCxDQUFDO0lBQUEsT0FBQWhKLGNBQUE7RUFBQSxFQTVZMENzSix1QkFBdUIsR0FBQUMseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSxzQkFBQXpCLEtBQUEsR0FBQXFKLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSxzQkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUEySCx5QkFBQSxDQUFBMUksT0FBQSxDQUFBZSxTQUFBLHlCQUFBdkIsS0FBQSxHQUFBbUosTUFBQSxDQUFBQyx3QkFBQSxDQUFBNUksT0FBQSxDQUFBZSxTQUFBLHlCQUFBZixPQUFBLENBQUFlLFNBQUEsR0FBQTJILHlCQUFBLENBQUExSSxPQUFBLENBQUFlLFNBQUEsc0JBQUFyQixLQUFBLEdBQUFpSixNQUFBLENBQUFDLHdCQUFBLENBQUE1SSxPQUFBLENBQUFlLFNBQUEsc0JBQUFmLE9BQUEsQ0FBQWUsU0FBQSxHQUFBMkgseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSxtQkFBQXBCLEtBQUEsR0FBQWdKLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSxtQkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUEySCx5QkFBQSxDQUFBMUksT0FBQSxDQUFBZSxTQUFBLHFCQUFBbkIsS0FBQSxHQUFBK0ksTUFBQSxDQUFBQyx3QkFBQSxDQUFBNUksT0FBQSxDQUFBZSxTQUFBLHFCQUFBZixPQUFBLENBQUFlLFNBQUEsR0FBQTJILHlCQUFBLENBQUExSSxPQUFBLENBQUFlLFNBQUEscUJBQUFsQixLQUFBLEdBQUE4SSxNQUFBLENBQUFDLHdCQUFBLENBQUE1SSxPQUFBLENBQUFlLFNBQUEscUJBQUFmLE9BQUEsQ0FBQWUsU0FBQSxHQUFBMkgseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSw0QkFBQWpCLEtBQUEsR0FBQTZJLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSw0QkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUFmLE9BQUEsTUFBQUQsTUFBQTtFQUFBYSxRQUFBLEdBQUF6QixjQUFBO0VBQUEsT0FBQXlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
375
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfZGVjMyIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsImlubGluZUVkaXRDb250cm9scyIsInByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0lubGluZUVkaXRQb3NzaWJsZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRJbmxpbmVFZGl0U2VydmljZSIsImRvZXNQYWdlSGF2ZUlubGluZUVkaXQiLCJnZXRSb3V0aW5nVGFyZ2V0TmFtZSIsImlubGluZUVkaXRTYXZlIiwibW9kZWwiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJoYXNUZWNobmljYWxNZXNzYWdlcyIsInNvbWUiLCJtZXNzYWdlIiwibWVzc2FnZUhhbmRsaW5nIiwiaXNOb25UZWNobmljYWxNZXNzYWdlIiwic2V0U2hvd0Zvb3RlciIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJpbmxpbmVFZGl0RW5kIiwicmVtb3ZlQWxsTWVzc2FnZXMiLCJzdWJtaXRCYXRjaCIsImVycm9yIiwiTG9nIiwid2FybmluZyIsImlubGluZUVkaXREaXNjYXJkIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwiY29udHJvbCIsInNldFByb3BlcnR5Iiwic3RhcnRJbmxpbmVFZGl0IiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJjb250cm9sVHJpZ2dlciIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJEcmFmdEV4aXN0c0RpYWxvZyIsIm9wZW4iLCJyZXNldEluZGljYXRvclBvcHVwIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJkZXBlbmRlbnRQcm9wZXJ0aWVzIiwiZ2V0SW5saW5lQ29ubmVjdGVkUHJvcGVydGllcyIsImlubGluZUVkaXRTdGFydCIsImZvY3VzSGFuZGxpbmciLCJpbmxpbmVFZGl0Q29udHJvbCIsImNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUiLCJmb2N1cyIsInByb3BlcnRpZXMiLCJhYm9ydFRpbWVyQmVmb3JlU2F2ZSIsInVuZGVmaW5lZCIsImFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMiLCJtYXAiLCJnZXRJZCIsImluY2x1ZGVzIiwicHVzaCIsImlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgiLCJpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQiLCJoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50IiwiZXZlbnQiLCJwYXRjaFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdldFNvdXJjZSIsImF0dGFjaEV2ZW50T25jZSIsInBhdGNoQ29tcGxldGVkRXZlbnQiLCJiU3VjY2VzcyIsImdldFBhcmFtZXRlciIsInJlc291cmNlQnVuZGxlIiwiTGliIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsImhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicHJvcGFnYXRlSW5saW5lRmllbGRHcm91cElkVG9NZXNzYWdlQnV0dG9uIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0cyIsInRhcmdldE1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGVsYXllZENhbGxUb1NhdmUiLCJ0aW1lckJlZm9yZVNhdmUiLCJzZXRUaW1lb3V0IiwiZSIsInJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24iLCJvcGVuSW5saW5lRWRpdEV4aXREaWFsb2dBbmRXYWl0Rm9yUmVzdWx0IiwiSW5saW5lRWRpdEV4aXREaWFsb2ciLCJkaWFsb2dSZXN1bHQiLCJFcnJvciIsIm9uQmVmb3JlQmluZGluZyIsIm9uQmVmb3JlRWRpdCIsIm9uQmVmb3JlQ3JlYXRlIiwib25CZWZvcmVEZWxldGUiLCJvbkJlZm9yZUV4ZWN1dGVBY3Rpb24iLCJmb290ZXJDb250cm9scyIsImdldEZvb3RlciIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJpc0EiLCJjaGlsZEZpZWxkR3JvdXBJZHMiLCJTZXQiLCJnZXRGaWVsZEdyb3VwSWRzIiwiYWRkIiwic2V0RmllbGRHcm91cElkcyIsImZyb20iLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRGbG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlLCB0eXBlIEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgSW5saW5lRWRpdEV4aXREaWFsb2csIHsgdHlwZSBESUFMT0dSRVNVTFQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvaW5saW5lRWRpdEZsb3cvSW5saW5lRWRpdEV4aXREaWFsb2dcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgSW5saW5lRWRpdCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBEcmFmdEV4aXN0c0RpYWxvZyBmcm9tIFwiLi4vY29udHJvbHMvaW5saW5lRWRpdEZsb3cvRHJhZnRFeGlzdHNEaWFsb2dcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW5saW5lRWRpdEZsb3dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRGbG93IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblxuXHRwcml2YXRlIGlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBhYm9ydFRpbWVyQmVmb3JlU2F2ZT86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgcGF0Y2hQcm9taXNlPzogUHJvbWlzZTxVSTVFdmVudD47XG5cblx0cHJpdmF0ZSBwcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgdGhlcmUgY2FuIGJlIGlubGluZSBlZGl0IG9uIHRoZSBwYWdlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGlubGluZSBlZGl0IGlzIHBvc3NpYmxlXG5cdCAqL1xuXHRpc0lubGluZUVkaXRQb3NzaWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldElubGluZUVkaXRTZXJ2aWNlKCkuZG9lc1BhZ2VIYXZlSW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZWQgb25jZSB0aGUgYmF0Y2ggaGFzIHJldHVybmVkLlxuXHQgKi9cblx0YXN5bmMgaW5saW5lRWRpdFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgaGFzVGVjaG5pY2FsTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZUhhbmRsaW5nLmlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlKSk7XG5cdFx0aWYgKGhhc1RlY2huaWNhbE1lc3NhZ2VzKSB7XG5cdFx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3Rlcih0cnVlKTtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBpbnZhbGlkIHR5cGVzIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNhdmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFtb2RlbC5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVBbGxNZXNzYWdlcygpO1xuXHRcdFx0YXdhaXQgbW9kZWwuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzYXZpbmcgaW5saW5lIGVkaXQgY2hhbmdlc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY2FyZCB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICovXG5cdGlubGluZUVkaXREaXNjYXJkKCk6IHZvaWQge1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR0aGlzLmlubGluZUVkaXRFbmQodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5kIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvblxuXHQgKi9cblx0aW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5iYXNlLnNldFNob3dGb290ZXIoZmFsc2UpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmlubGluZUVkaXRDb250cm9scykge1xuXHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuaW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24pO1xuXHRcdH1cblx0XHR0aGlzLmlubGluZUVkaXRDb250cm9scyA9IFtdO1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRBY3RpdmVcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqIEBwYXJhbSBjb250cm9sVHJpZ2dlclxuXHQgKi9cblx0c3RhcnRJbmxpbmVFZGl0KFxuXHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcsXG5cdFx0YmluZGluZ0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbFRyaWdnZXI/OiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChjb250cm9sVHJpZ2dlcj8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYWxyZWFkeSBhIGRyYWZ0IG9uIHRoZSBlbnRpdHkuIFdlIHNob3VsZCBub3Qgc3RhcnQgaW5saW5lIGVkaXRcblx0XHRcdG5ldyBEcmFmdEV4aXN0c0RpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpKS5vcGVuKCk7XG5cdFx0XHRjb250cm9sVHJpZ2dlcj8ucmVzZXRJbmRpY2F0b3JQb3B1cCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpbmxpbmVFZGl0U2VydmljZSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRJbmxpbmVFZGl0U2VydmljZSgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudFByb3BlcnRpZXMgPSBpbmxpbmVFZGl0U2VydmljZS5nZXRJbmxpbmVDb25uZWN0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0dGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksXG5cdFx0XHRwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cblx0XHR0aGlzLmlubGluZUVkaXRTdGFydChbXSwgZGVwZW5kZW50UHJvcGVydGllcz8ubGVuZ3RoID8gZGVwZW5kZW50UHJvcGVydGllcyA6IFtwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZV0sIGJpbmRpbmdDb250ZXh0UGF0aCk7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGluZyBmb3IgaW5saW5lIGVkaXQuIFdoZW4gb25lIGZpZWxkIGdldHMgZm9jdXMsIGFsbCBvdGhlciBpbmxpbmUgZWRpdCBwb3B1cHMsIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuZWQsIHNob3VsZCBiZSBjbG9zZWQuXG5cdCAqIEBwYXJhbSBpbmxpbmVFZGl0Q29udHJvbCBDb250cm9scyB3aGljaCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nKGlubGluZUVkaXRDb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoY29udHJvbCAhPT0gaW5saW5lRWRpdENvbnRyb2wpIHtcblx0XHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sID09PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHRjb250cm9sLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpcm0gdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc1xuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqL1xuXHRAaG9va2FibGUoXCJCZWZvcmVcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBpbmxpbmVFZGl0U3RhcnQoaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBiaW5kaW5nQ29udGV4dFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyAgYSB0aW1lciB0byBzYXZlXG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzID0gdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubWFwKChjb250cm9sOiBDb250cm9sKSA9PiBjb250cm9sLmdldElkKCkpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBpbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmICghYWxyZWFkeVJlZ2lzdGVyZWRDb250cm9scy5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdCAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgaXMgY29uc2lkZXJlZCBmb3IgSW5saW5lIGVkaXQuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJhc2Vcblx0XHRcdC5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldElubGluZUVkaXRTZXJ2aWNlKClcblx0XHRcdC5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQodGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBwYXRjaFNlbnQgZXZlbnQ6IGhhbmRsZSBpbmxpbmUgZWRpdCBzYXZlIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBzZW50IGJ5IHRoZSBiaW5kaW5nXG5cdCAqL1xuXHRhc3luYyBoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50KGV2ZW50OiBPRGF0YUNvbnRleHRCaW5kaW5nJFBhdGNoU2VudEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIGlubGluZSBlZGl0IGNvbnRyb2xzLCB0aGlzIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTxVSTVFdmVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IFVJNUV2ZW50PHsgc3VjY2VzczogYm9vbGVhbiB9PikgPT4ge1xuXHRcdFx0XHRjb25zdCBiU3VjY2VzcyA9IHBhdGNoQ29tcGxldGVkRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QocGF0Y2hDb21wbGV0ZWRFdmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdHRoaXMucGF0Y2hQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdGlmIChyZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19JTkxJTkVfRURJVF9TQVZFRFwiKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9IGNhdGNoIChwYXRjaENvbXBsZXRlZEV2ZW50KSB7XG5cdFx0XHR0aGlzLnBhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIGVycm9ycyB3aGVuIHRoZSBpbmxpbmUgZWRpdCBzYXZlIGZhaWxzLlxuXHQgKi9cblx0aGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0dGhpcy5wcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRhcmdldCBvZiBtZXNzYWdlLmdldFRhcmdldHMoKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0KSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgPSB0YXJnZXRNZXRhQ29udGV4dFxuXHRcdFx0XHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czx1bmtub3duPih0YXJnZXRNZXRhQ29udGV4dClcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUgPVxuXHRcdFx0XHRcdFx0KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik/LnRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhcnRJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSwgdGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSBkZWxheWVkQ2FsbCB3aGVuIHlvdSBmb2N1cyBvdXQgb2YgYSBmaWVsZC5cblx0ICovXG5cdGFzeW5jIGRlbGF5ZWRDYWxsVG9TYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlIHx8IHRoaXMucGF0Y2hQcm9taXNlIHx8IHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgdGltZXIgcnVubmluZyBvciBhIHNhdmUgaW4gcHJvY2VzcyBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHRpbWVyQmVmb3JlU2F2ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSByZWplY3Q7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgNTAwKTtcblx0XHR9KTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGltZXJCZWZvcmVTYXZlO1xuXHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBOb3RoaW5nIHRvIHNlZSBpdCBpcyBqdXN0IHNvbWVvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIHRpbWVyXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZWFjdGl2YXRlIHRoZSBmaWVsZCBncm91cCBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIGRlbGF5LlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBoYW5kbGVyIGlzIG5vdCB0cmlnZ2VyZWQgd2hpbGUgZm9jdXMgaXMgc2hpZnRpbmcgd2hlbiB3ZSBvcGVuIGEgZGlhbG9nLlxuXHQgKi9cblx0cmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5wcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblx0XHR9LCA1MDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBuYXZpZ2F0aW9uLi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHJ1bnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uIGFuZCBzdGF5IGluIGlubGluZSBlZGl0XG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJyb3V0aW5nXCIpXG5cdGFzeW5jIG9uQmVmb3JlTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBvcGVuIHRoZSBkaWFsb2cgYmVmb3JlIG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSBkaWFsb2cgY2hvaWNlIG9uY2UgdGhlIHVzZXIgaGFzIGNsaWNrZWQgb24gb2sgb3IgY2FuY2VsXG5cdCAqL1xuXHRhc3luYyBvcGVuSW5saW5lRWRpdEV4aXREaWFsb2dBbmRXYWl0Rm9yUmVzdWx0KCk6IFByb21pc2U8RElBTE9HUkVTVUxUPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPERJQUxPR1JFU1VMVD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG5ldyBJbmxpbmVFZGl0RXhpdERpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpLCByZXNvbHZlKS5vcGVuKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBvbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyB0aGVyZSBhcmUgY29udHJvbHMgaW4gaW5saW5lIGVkaXQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBuYXZpZ2F0aW9uIGFuZCBzaG93IHRoZSBkaWFsb2dcblx0XHRcdHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyID0gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0Ly8gZmllbGRzIGFyZSBpbiBpbmxpbmUgZWRpdCBhbmQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlcy4gV2UgbmVlZCB0byBzaG93IHRoZSBkaWFsb2dcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhdGNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGF0Y2hQcm9taXNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMub3BlbklubGluZUVkaXRFeGl0RGlhbG9nQW5kV2FpdEZvclJlc3VsdCgpO1xuXHRcdFx0XHRcdGlmIChkaWFsb2dSZXN1bHQgPT09IFwiU2F2ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBzYXZlIGFuZCB3YWl0IGZvciB0aGUgcGF0Y2hQcm9taXNlXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmlubGluZUVkaXRTYXZlKCk7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgYWZ0ZXIgc2F2ZXMgdGhlcmUgYXJlIHN0aWxsIGNoYW5nZXMgdGhpcyBtZWFucyBzYXZlIGhhcyBmYWlsZWQuIHdlIG5lZWQgdG8gY2FuY2VsIG5hdmlnYXRpb25cblx0XHRcdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWFjdGl2YXRlRmllbGRHcm91cENoYW5nZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zYXZlIGNoYW5nZSBwcmV2ZW50IGV4ZWN1dGlvblwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRpYWxvZ1Jlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjYW5jZWwgd2FzIGNob3NlblwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gd2UgZGlzY2FyZCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlcigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmcodGhpcy5pbmxpbmVFZGl0Q29udHJvbHNbMF0pO1xuXHRcdFx0XHR0aGlzLnJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlcigpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2Ugc3RhcnQgdGhlIHBhZ2Ugd2l0aG91dCBhbnkgdW5zYXZlZCBpbmxpbmUgZWRpdCBjaGFuZ2VzLlxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiX3JvdXRpbmdcIilcblx0b25CZWZvcmVCaW5kaW5nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBpZiBmb3Igc29tZW9uZSByZWFzb24gaW5saW5lIGVkaXQgd2Fzbid0IGVuZGVkIHByb3Blcmx5IHdlIGVuc3VyZSB3ZSBzdGFydCBmcmVzaCBvbiB0aGUgcGFnZVxuXHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKSkge1xuXHRcdFx0Ly8gaWYgZm9yIHNvbWVvbmUgcmVhc29uIGlubGluZSBlZGl0IHdhc24ndCBlbmRlZCBwcm9wZXJseSB3ZSBlbnN1cmUgdGhhdCB0aGUgbW9kZWwgaXMgY29uc2lzdGVudFxuXHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLnJlc2V0Q2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGVkaXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgZWRpdCBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRWRpdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGJlZm9yZSBjcmVhdGUuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgY3JldGFlIG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVDcmVhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgZGVsZXRlLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVqZWN0IGlmIGRlbGV0ZSBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGFjdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBkZWxldGUgbmVlZHMgdG8gYmUgY2FuY2VsbGVkXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJlZGl0Rmxvd1wiKVxuXHRhc3luYyBvbkJlZm9yZUV4ZWN1dGVBY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3BhZ2F0ZSB0aGUgZmllbGQgZ3JvdXAgaWQgdG8gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBwcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTogdm9pZCB7XG5cdFx0Ly8gd2UgcHJvcGFnYXRlIHRoZSBmaWVsZGdyb3VwSWQgdG8gdGhlIGZvb3RlciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyB0byBlbnN1cmUgdGhhdFxuXHRcdC8vIGNsaWNraW5nIG9uIHRoZSBmb290ZXIgZG9lcyBub3QgdHJpZ2dlciBhIGZvY3Vzb3V0IGFuZCBhIHNhdmUgZm9yIHRoZSBpbmxpbmUgZWRpdFxuXHRcdGNvbnN0IGZvb3RlckNvbnRyb2xzID1cblx0XHRcdCh0aGlzLmJhc2Vcblx0XHRcdFx0LmdldEZvb3RlcigpXG5cdFx0XHRcdD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PiBtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIGFzXG5cdFx0XHRcdHwgQ29udHJvbFtdXG5cdFx0XHRcdHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBmb290ZXJDb250cm9scykge1xuXHRcdFx0Y29uc3QgY2hpbGRGaWVsZEdyb3VwSWRzID0gbmV3IFNldChjb250cm9sLmdldEZpZWxkR3JvdXBJZHMoKSk7XG5cdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdGNvbnRyb2wuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGNoaWxkRmllbGRHcm91cElkcykpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O01BeUJxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQXFIaEVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQUMsS0FBQSxHQW1JbEJDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQUMsS0FBQSxHQXNFekJELGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUUsS0FBQSxHQWdCMUJGLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUcsS0FBQSxHQVMxQkgsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBSSxLQUFBLEdBUzFCSixjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUFLLEtBQUEsR0FTMUJMLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUwsSUFBQSxDQUFBVyxNQUFBLElBQUFDLE9B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
@@ -6,8 +6,7 @@ import CommonUtils from "sap/fe/core/CommonUtils";
6
6
  import type PageController from "sap/fe/core/PageController";
7
7
  import BaseControllerExtension from "sap/fe/core/controllerextensions/BaseControllerExtension";
8
8
  import messageHandling from "sap/fe/core/controllerextensions/messageHandler/messageHandling";
9
- import BeforeActionDialog from "sap/fe/core/controls/inlineEditFlow/BeforeActionDialog";
10
- import BeforeNavigationDialog, { type DIALOGRESULT } from "sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog";
9
+ import InlineEditExitDialog, { type DIALOGRESULT } from "sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog";
11
10
  import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
12
11
  import { isProperty } from "sap/fe/core/helpers/TypeGuards";
13
12
  import { type DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
@@ -273,6 +272,25 @@ export default class InlineEditFlow extends BaseControllerExtension {
273
272
  */
274
273
  @methodOverride("routing")
275
274
  async onBeforeNavigation(): Promise<boolean> {
275
+ try {
276
+ await this.onBeforeAnyEditFlowAction();
277
+ return false;
278
+ } catch (e) {
279
+ return true;
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Method to open the dialog before navigation.
285
+ * @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
286
+ */
287
+ async openInlineEditExitDialogAndWaitForResult(): Promise<DIALOGRESULT> {
288
+ return new Promise<DIALOGRESULT>((resolve) => {
289
+ new InlineEditExitDialog(this.base.getView(), resolve).open();
290
+ });
291
+ }
292
+
293
+ async onBeforeAnyEditFlowAction(): Promise<void> {
276
294
  if (this.inlineEditControls.length > 0) {
277
295
  // there are controls in inline edit we need to prevent the navigation and show the dialog
278
296
  this.preventFieldGroupChangeHandler = true;
@@ -283,13 +301,13 @@ export default class InlineEditFlow extends BaseControllerExtension {
283
301
  if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
284
302
  // fields are in inline edit and there are no pending changes. We need to show the dialog
285
303
  this.inlineEditEnd();
286
- return false;
304
+ return;
287
305
  }
288
306
  try {
289
307
  if (this.patchPromise) {
290
308
  await this.patchPromise;
291
309
  } else {
292
- const dialogResult = await this.openInlineEditBeforeNavigationDialogAndWaitForResult();
310
+ const dialogResult = await this.openInlineEditExitDialogAndWaitForResult();
293
311
  if (dialogResult === "Save") {
294
312
  // we save and wait for the patchPromise
295
313
  await this.inlineEditSave();
@@ -297,58 +315,26 @@ export default class InlineEditFlow extends BaseControllerExtension {
297
315
  // if after saves there are still changes this means save has failed. we need to cancel navigation
298
316
  this.focusHandling(this.inlineEditControls[0]);
299
317
  this.reactivateFieldGroupChangeHandler();
300
- return true;
318
+ throw new Error("unsave change prevent execution");
301
319
  }
302
320
  } else if (dialogResult === "Cancel") {
303
321
  this.focusHandling(this.inlineEditControls[0]);
304
322
  this.reactivateFieldGroupChangeHandler();
305
- return true;
323
+ throw new Error("cancel was chosen");
306
324
  } else {
307
325
  // we discard the changes
308
326
  this.inlineEditDiscard();
309
327
  }
310
328
  this.reactivateFieldGroupChangeHandler();
311
- return false;
329
+ return;
312
330
  }
313
331
  } catch (e) {
314
332
  this.focusHandling(this.inlineEditControls[0]);
315
333
  this.reactivateFieldGroupChangeHandler();
316
- return true;
334
+ return Promise.reject();
317
335
  }
318
336
  }
319
- return false;
320
- }
321
-
322
- /**
323
- * Method to open the dialog before navigation.
324
- * @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
325
- */
326
- async openInlineEditBeforeNavigationDialogAndWaitForResult(): Promise<DIALOGRESULT> {
327
- return new Promise<DIALOGRESULT>((resolve) => {
328
- new BeforeNavigationDialog(this.base.getView(), resolve).open();
329
- });
330
- }
331
-
332
- /**
333
- * Method to ensure we leave inline edit before any standard edit flowaction.
334
- * @returns Promise that reject and triggers save or discard if we are in inline edit
335
- */
336
- async onBeforeAnyEditFlowAction(): Promise<void> {
337
- if (this.inlineEditControls.length > 0) {
338
- if (this.abortTimerBeforeSave) {
339
- this.abortTimerBeforeSave();
340
- this.abortTimerBeforeSave = undefined;
341
- }
342
- if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
343
- // fields are in inline edit and there are no pending changes. We don't need to show the dialog
344
- this.inlineEditEnd();
345
- return Promise.resolve();
346
- }
347
- new BeforeActionDialog(this.base.getView()).open();
348
- // there are controls in inline edit we need to prevent the action and show the dialog
349
- return Promise.reject();
350
- }
351
- return Promise.resolve();
337
+ return;
352
338
  }
353
339
 
354
340
  /**