@sapui5/sap.fe.core 1.134.0 → 1.136.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.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -34,6 +34,7 @@ import type ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBindin
|
|
|
34
34
|
import type { HiddenDraft } from "../converters/ManifestSettings";
|
|
35
35
|
import { getInvolvedDataModelObjects } from "../converters/MetaModelConverter";
|
|
36
36
|
import type { SideEffectsTargetType } from "../services/SideEffectsServiceFactory";
|
|
37
|
+
import { addSelf } from "./collaboration/CollaborationCommon";
|
|
37
38
|
import UiModelConstants from "./editFlow/editFlowConstants";
|
|
38
39
|
import messageHandling from "./messageHandler/messageHandling";
|
|
39
40
|
|
|
@@ -61,13 +62,13 @@ class InternalRouting extends ControllerExtension {
|
|
|
61
62
|
|
|
62
63
|
private _oRouterProxy!: RouterProxy;
|
|
63
64
|
|
|
64
|
-
private _fnRouteMatchedBound
|
|
65
|
+
private _fnRouteMatchedBound?: Function;
|
|
65
66
|
|
|
66
67
|
protected _oTargetInformation!: RoutingTarget;
|
|
67
68
|
|
|
68
69
|
@methodOverride()
|
|
69
70
|
onExit(): void {
|
|
70
|
-
if (this._oRoutingService) {
|
|
71
|
+
if (this._oRoutingService && this._fnRouteMatchedBound) {
|
|
71
72
|
this._oRoutingService.detachRouteMatched(this._fnRouteMatchedBound);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -96,8 +97,11 @@ class InternalRouting extends ControllerExtension {
|
|
|
96
97
|
.getService("routingService")
|
|
97
98
|
.then((oRoutingService: RoutingService) => {
|
|
98
99
|
this._oRoutingService = oRoutingService;
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
if (this._oPageComponent?.isA("sap.fe.core.ReuseComponent") !== true) {
|
|
101
|
+
// Reuse components can potentially embed a view with a page controller, we want to avoid attaching the route matched event in this case
|
|
102
|
+
this._fnRouteMatchedBound = this._onRouteMatched.bind(this);
|
|
103
|
+
this._oRoutingService.attachRouteMatched({}, this._fnRouteMatchedBound);
|
|
104
|
+
}
|
|
101
105
|
this._oTargetInformation = oRoutingService.getTargetInformationFor(this._oPageComponent || this._oView)! ?? {};
|
|
102
106
|
return;
|
|
103
107
|
})
|
|
@@ -252,8 +256,18 @@ class InternalRouting extends ControllerExtension {
|
|
|
252
256
|
const internalModel = this._oView.getModel("internal");
|
|
253
257
|
internalModel.setProperty("/paginatorCurrentContext", null);
|
|
254
258
|
|
|
255
|
-
// Storing the selected context to use it in internal route navigation if
|
|
256
|
-
|
|
259
|
+
// Storing the selected context to use it in internal route navigation if necessary.
|
|
260
|
+
let contextToNavigate: Context | null = context;
|
|
261
|
+
let hiddenBinding: ODataContextBinding | undefined;
|
|
262
|
+
if (parameters.updateFCLLevel === -1) {
|
|
263
|
+
// If we're navigating back, we need to find the "parent" context
|
|
264
|
+
const backPath = this._oRoutingService.getPathToNavigateBack(context.getPath());
|
|
265
|
+
// As we don't call the extension when navigating back to the LR, backPath is never empty so we can safely create a context
|
|
266
|
+
hiddenBinding = context.getModel().bindContext(backPath);
|
|
267
|
+
contextToNavigate = hiddenBinding.getBoundContext();
|
|
268
|
+
}
|
|
269
|
+
const overrideNav = await this.base.getView().getController().routing.onBeforeNavigation({ bindingContext: contextToNavigate });
|
|
270
|
+
hiddenBinding?.destroy();
|
|
257
271
|
if (overrideNav) {
|
|
258
272
|
internalModel.setProperty("/paginatorCurrentContext", context);
|
|
259
273
|
return Promise.resolve(true);
|
|
@@ -797,12 +811,13 @@ class InternalRouting extends ControllerExtension {
|
|
|
797
811
|
sContextPath =
|
|
798
812
|
(oPageComponent && oPageComponent.getContextPath && oPageComponent.getContextPath()) || (sEntitySet && `/${sEntitySet}`),
|
|
799
813
|
oMetaModel = oModel.getMetaModel(),
|
|
814
|
+
isCollaborationDraftSupported = ModelHelper.isCollaborationDraftSupported(oMetaModel),
|
|
800
815
|
mParameters: BindContextParameters = {
|
|
801
816
|
$$groupId: "$auto.Heroes",
|
|
802
817
|
$$updateGroupId: "$auto",
|
|
803
818
|
$$patchWithoutSideEffects: true
|
|
804
819
|
};
|
|
805
|
-
if (this.base.
|
|
820
|
+
if (this.base.inlineEditFlow.isInlineEditPossible()) {
|
|
806
821
|
// if inline edit is enabled on the page and this is the active entity, we need to update the group id to inline
|
|
807
822
|
mParameters.$$updateGroupId = sPath.includes("IsActiveEntity=true") ? CommonUtils.INLINEEDIT_UPDATEGROUPID : "$auto";
|
|
808
823
|
}
|
|
@@ -855,6 +870,10 @@ class InternalRouting extends ControllerExtension {
|
|
|
855
870
|
}
|
|
856
871
|
propertiesToSelect.push(...alternateAndSecondaryKeys);
|
|
857
872
|
|
|
873
|
+
if (isCollaborationDraftSupported && oDraftRoot) {
|
|
874
|
+
propertiesToSelect.push("DraftAdministrativeData/DraftAdministrativeUser");
|
|
875
|
+
}
|
|
876
|
+
|
|
858
877
|
if (propertiesToSelect.length) {
|
|
859
878
|
mParameters.$select = propertiesToSelect.join(",");
|
|
860
879
|
}
|
|
@@ -874,7 +893,11 @@ class InternalRouting extends ControllerExtension {
|
|
|
874
893
|
this.base.messageHandler.holdMessagesForControl(this._oView);
|
|
875
894
|
});
|
|
876
895
|
oHiddenBinding.attachEventOnce("dataReceived", this.onDataReceived.bind(this));
|
|
877
|
-
|
|
896
|
+
const boundContext = oHiddenBinding.getBoundContext();
|
|
897
|
+
if (isCollaborationDraftSupported && sPath.includes("IsActiveEntity=false")) {
|
|
898
|
+
addSelf(oMetaModel, sContextPath!, oModel, boundContext);
|
|
899
|
+
}
|
|
900
|
+
return boundContext;
|
|
878
901
|
}
|
|
879
902
|
}
|
|
880
903
|
|
|
@@ -1127,9 +1150,9 @@ class InternalRouting extends ControllerExtension {
|
|
|
1127
1150
|
const oViewData = this._oView.getViewData();
|
|
1128
1151
|
const oContext = this._oView.getBindingContext();
|
|
1129
1152
|
const oMetaModel = oContext.getModel().getMetaModel();
|
|
1130
|
-
const navigationParameters = {
|
|
1153
|
+
const navigationParameters: RoutingNavigationParameters = {
|
|
1131
1154
|
noPreservationCache: true,
|
|
1132
|
-
|
|
1155
|
+
layout: this._oView.getModel("fclhelper").getProperty("/actionButtonsInfo/closeColumn")
|
|
1133
1156
|
};
|
|
1134
1157
|
|
|
1135
1158
|
const isDocumentModified =
|
|
@@ -1147,6 +1170,8 @@ class InternalRouting extends ControllerExtension {
|
|
|
1147
1170
|
} else if (oViewData?.viewLevel === 1 && ModelHelper.isDraftSupported(oMetaModel, oContext.getPath())) {
|
|
1148
1171
|
draft.processDataLossOrDraftDiscardConfirmation(
|
|
1149
1172
|
() => {
|
|
1173
|
+
// We don't have callExtension=true in this case, as there's a user validation with the dataloss dialog
|
|
1174
|
+
// and it wouldn't make sense to cancel the navigation after this confirmation
|
|
1150
1175
|
this.navigateBackFromContext(oContext, navigationParameters);
|
|
1151
1176
|
},
|
|
1152
1177
|
Function.prototype,
|
|
@@ -1156,6 +1181,7 @@ class InternalRouting extends ControllerExtension {
|
|
|
1156
1181
|
draft.NavigationType.BackNavigation
|
|
1157
1182
|
);
|
|
1158
1183
|
} else {
|
|
1184
|
+
navigationParameters.callExtension = true;
|
|
1159
1185
|
this.navigateBackFromContext(oContext, navigationParameters);
|
|
1160
1186
|
}
|
|
1161
1187
|
// Removes transition message for the specified context
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/fe/core/formatters/ValueFormatter", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (Log, Localization, ClassSupport, valueFormatters, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, Sorter, JSONModel) {
|
|
6
6
|
"use strict";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution"], function (Log, deepEqual, uid, ClassSupport, CommonUtils, messageHandling, Library, Messaging, MessageType, ControllerExtension, OverrideExecution) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _class, _class2;
|
|
9
9
|
var publicExtension = ClassSupport.publicExtension;
|
|
10
10
|
var privateExtension = ClassSupport.privateExtension;
|
|
11
11
|
var finalExtension = ClassSupport.finalExtension;
|
|
@@ -14,6 +14,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
14
14
|
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
15
15
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
16
16
|
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* Defines the message detail relevant for the MessageButton building block to display a popover.
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
17
22
|
/**
|
|
18
23
|
* A controller extension offering message handling.
|
|
19
24
|
* @hideconstructor
|
|
@@ -21,7 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
21
26
|
* @experimental As of version 1.90.0
|
|
22
27
|
* @since 1.90.0
|
|
23
28
|
*/
|
|
24
|
-
let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = privateExtension(), _dec3 = extensible(OverrideExecution.Instead), _dec4 = publicExtension(), _dec5 =
|
|
29
|
+
let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = privateExtension(), _dec3 = extensible(OverrideExecution.Instead), _dec4 = publicExtension(), _dec5 = extensible("AfterAsync"), _dec6 = publicExtension(), _dec7 = finalExtension(), _dec8 = publicExtension(), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
25
30
|
function MessageHandler() {
|
|
26
31
|
var _this;
|
|
27
32
|
_this = _ControllerExtension.call(this) || this;
|
|
@@ -78,6 +83,29 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
78
83
|
return true;
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Allows consumer of a message button BB to decide which bound messages should be shown and how.
|
|
88
|
+
*
|
|
89
|
+
* This hook is called when the message button BB detects a change in the message model.
|
|
90
|
+
* The hooks allows to define behaviour for messages in the message button BB.
|
|
91
|
+
*
|
|
92
|
+
* Consumers will be able to do the following with this hook.
|
|
93
|
+
*
|
|
94
|
+
* 1. Filter out messages so that they are not shown on the message button.
|
|
95
|
+
* 2. group the messages based on their UI.
|
|
96
|
+
* 3. provide a presser handler incase the message should show as a link.
|
|
97
|
+
* @param _messageDetails Object containing the details related to the message.
|
|
98
|
+
* @param _messageDetails.message The message from the message model.Ideally, it must not be modified directly.
|
|
99
|
+
* @param _messageDetails.groupName The group name associated with the current message.
|
|
100
|
+
* @param _messageDetails.activeTitleHandler Function to handle the click event on a message in the MessageButton building block.
|
|
101
|
+
* @returns A promise that must be returned by the overridden method.
|
|
102
|
+
* @public
|
|
103
|
+
* @experimental
|
|
104
|
+
*/;
|
|
105
|
+
_proto.beforeShowMessageButton = async function beforeShowMessageButton(_messageDetails) {
|
|
106
|
+
return Promise.resolve();
|
|
107
|
+
}
|
|
108
|
+
|
|
81
109
|
/**
|
|
82
110
|
* Register to hold messages unitl a process is complete.
|
|
83
111
|
*
|
|
@@ -368,8 +396,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
368
396
|
_proto.releaseHoldByControl = async function releaseHoldByControl(control) {
|
|
369
397
|
const identifier = control?.getId();
|
|
370
398
|
this.removeHoldKey(identifier);
|
|
399
|
+
this.uiElementIsAvailable = this.uiElementIsAvailable.then(async function () {
|
|
400
|
+
return this.showMessagesWithCondtions();
|
|
401
|
+
}.bind(this));
|
|
371
402
|
await this.uiElementIsAvailable;
|
|
372
|
-
await this.showMessagesWithCondtions();
|
|
373
403
|
}
|
|
374
404
|
|
|
375
405
|
/**
|
|
@@ -405,7 +435,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
405
435
|
}
|
|
406
436
|
};
|
|
407
437
|
return MessageHandler;
|
|
408
|
-
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "
|
|
438
|
+
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "beforeShowMessageButton", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "beforeShowMessageButton"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessageDialog", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeTransitionMessages", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "removeTransitionMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessages"), _class2.prototype), _class2)) || _class);
|
|
409
439
|
return MessageHandler;
|
|
410
440
|
}, false);
|
|
411
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWMzIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWM0IiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzUiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbGxlckV4dGVuc2lvbiIsIl90aGlzIiwiY2FsbCIsInN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImhvbGRLZXlzIiwiaG9sZE1zZ3NUb1Nob3ciLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJhZGRXYXJuaW5nTWVzc2FnZXNUb01lc3NhZ2VIYW5kbGVyIiwiYU1lc3NhZ2VzIiwiY29uY2F0IiwiaXNTdHJpY3RXYXJuaW5nTWVzc2FnZSIsIm9NZXNzYWdlIiwiZmluZCIsIm1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0TWVzc2FnZSIsImdldFR5cGUiLCJnZXREZXNjcmlwdGlvblVybCIsImRlZXBFcXVhbCIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwidW5kZWZpbmVkIiwiY2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJmaWx0ZXJFcnJvck1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmaWx0ZXIiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2ciLCJyZWdpc3RlclRvSG9sZE1lc3NhZ2VzIiwia2V5IiwidW5pcXVlS2V5IiwidWlkIiwiaW5jbHVkZXMiLCJwdXNoIiwicmVzZXRIb2xkS2V5cyIsInNob3dNZXNzYWdlRGlhbG9nIiwibVBhcmFtZXRlcnMiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJ2aWV3VHlwZSIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImlzT3BlcmF0aW9uRGlhbG9nT3BlbiIsInNldFByb3BlcnR5IiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwiY29udGV4dCIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwcm9jZXNzQW5kU2hvd01lc3NhZ2VzIiwiYmluZCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nQ29udGV4dCIsInNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInN1Y2Nlc3MiLCJmYWlsdXJlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiY29udHJvbCIsInNBY3Rpb25OYW1lIiwib25CZWZvcmVTaG93TWVzc2FnZSIsInVuSG9sZEtleSIsImZvcmNlU2hvd1VJRWxlbWVudCIsIm92ZXJyaWRlVUlEZWNpc2lvbiIsInNob3dCb3VuZFN0YXRlTWVzc2FnZXMiLCJuZXdVSURlY2lzaW9ucyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldFVJRGVjaXNpb25zIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwidWlEZWNpc2lvbnMiLCJzaG93TWVzc2FnZXNJblVJIiwicmV0IiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJpbmZvIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwia2VlcEJvdW5kTWVzc2FnZSIsImtlZXBVbmJvdW5kTWVzc2FnZSIsInNQYXRoVG9CZVJlbW92ZWQiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJfY2hlY2tOYXZpZ2F0aW9uVG9FcnJvclBhZ2UiLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYUN1c3RvbU1lc3NhZ2VzIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJDb21tb25VdGlscyIsImlzU3RpY2t5RWRpdE1vZGUiLCJtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzIiwiaXNEYXRhUmVjZWl2ZWRFcnJvciIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJuYXZpZ2F0ZUJhY2tUb09yaWdpbiIsImVycm9yVHlwZSIsImlzSW5pdGlhbExvYWQ1MDNFcnJvciIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJfZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzIiwidGVjaG5pY2FsRGV0YWlscyIsIm1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsInNlY29uZHNCZWZvcmVSZXRyeSIsInJldHJ5QWZ0ZXIiLCJfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIiLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiZFJldHJ5QWZ0ZXIiLCJkQ3VycmVudERhdGVUaW1lIiwiRGF0ZSIsImlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyIsImdldFRpbWUiLCJpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJpU2Vjb25kc0JlZm9yZVJldHJ5Iiwib2xkVUlEZWNpc2lvbnMiLCJhbGxNZXNzYWdlc1RvU2hvdyIsIm1lcmdlZFVJRGVjaXNpb24iLCJtZXNzYWdlc1RvU2hvdyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImVsZW1lbnRzIiwidWlFbGVtZW50VG9Vc2UiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiaW5LZXkiLCJzcGxpY2UiLCJpbmRleE9mIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsImlkZW50aWZpZXIiLCJyZWxlYXNlSG9sZEJ5Q29udHJvbCIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwiaGFuZGxlU2hlbGxCYWNrIiwic2hlbGxCYWNrIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJnZXRUZXh0IiwidGhlbiIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyxcblx0TWVzc2FnZVVJRGVjaXNpb25zLFxuXHRTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFN1cHBvcnRlZFVJRWxlbWVudFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCB1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHQvLyBXZSBhd2FpdCBzaG93TWVzc2FnZURpYWxvZyB1bnRpbCB0aGUgVUkgZWxlbWVudCBpcyBhdmFpbGFibGUuXG5cdHByaXZhdGUgdWlFbGVtZW50SXNBdmFpbGFibGUgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKiBAcGFyYW0gYU1lc3NhZ2VzIFRoZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyB0byBiZSBhZGRlZFxuXHQgKi9cblx0YWRkV2FybmluZ01lc3NhZ2VzVG9NZXNzYWdlSGFuZGxlcihhTWVzc2FnZXM6IE1lc3NhZ2VbXSk6IHZvaWQge1xuXHRcdHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzID0gdGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuY29uY2F0KGFNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIG1lc3NhZ2UgaXMgYSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlIHRoYXQgd2FzIHJlY2VpdmVkIHByZXZpb3VzbHkuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZVxuXHQgKi9cblx0aXNTdHJpY3RXYXJuaW5nTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcy5maW5kKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRDb2RlKCkgPT09IG9NZXNzYWdlLmdldENvZGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0TWVzc2FnZSgpID09PSBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gb01lc3NhZ2UuZ2V0VHlwZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXREZXNjcmlwdGlvblVybCgpID09PSBvTWVzc2FnZS5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRcdFx0ZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLCBvTWVzc2FnZS5nZXRUYXJnZXRzKCkpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IG9NZXNzYWdlLmdldFBlcnNpc3RlbnQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSkgIT09IHVuZGVmaW5lZFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGFsbCBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIGhhbmRsZXIuXG5cdCAqL1xuXHRjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IFtdO1xuXHR9XG5cblx0ZmlsdGVyRXJyb3JNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0XHRyZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIGRpYWxvZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIHRvIHRoZSB1c2VyIHdpdGggYSBkaWZmZXJlbnQgY29udHJvbCBsaWtlIHRoZSAoVE9ETzpMaW5rKSBNZXNzYWdlQnV0dG9uXG5cdCAqIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBvdmVycmlkZGVuLlxuXHQgKiBAcmV0dXJucyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyByZW1vdmUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCBiZWZvcmUgc2hvd2luZyB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRhd2FpdCB0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0dGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKGZvcmNlU2hvd1VJRWxlbWVudCwgc3VjY2VzcywgZmFpbHVyZSk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBNZXNzYWdlcyBpbiB0aGUgVUkgYmFzZWQgb24gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIGZvcmNlU2hvd1VJRWxlbWVudFxuXHQgKiBAcGFyYW0gc3VjY2Vzc1xuXHQgKiBAcGFyYW0gZmFpbHVyZVxuXHQgKi9cblx0YXN5bmMgc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhcblx0XHRmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRzdWNjZXNzPzogKHJldD86IHVua25vd24pID0+IHZvaWQsXG5cdFx0ZmFpbHVyZT86IChlcnI/OiB1bmtub3duKSA9PiB2b2lkXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNob3dVSUVsZW1lbnQgPSBmb3JjZVNob3dVSUVsZW1lbnQgfHwgdGhpcy5jaGVja1RvU2hvd1VJRWxlbWVudCgpO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIHRoaXMudWlEZWNpc2lvbnMpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMudWlFbGVtZW50SXNBdmFpbGFibGUgPSBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VzSW5VSSh0aGlzLnVpRGVjaXNpb25zKTtcblx0XHRcdFx0Y29uc3QgcmV0ID0gYXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0XHRcdFx0c3VjY2Vzcz8uKHJldCk7XG5cdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IFY0IDogTWVzc2FnZUhhbmRsZXIgOiBFcnJvciBvbiB0cnlpbmcgdG8gc2hvdyBVSSBlbGVtZW50OiAke2Vycn1gKTtcblx0XHRcdFx0dGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudWlEZWNpc2lvbnMgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5pbmZvKFwiRkUgOiBWNCA6IE1lc3NhZ2VIYW5kbGVyIDogSG9sZGluZyBtZXNzYWdlcyB1bnRpbCBhIHJlZ2lzdGVyZWQgcHJvY2VzcyBcIik7XG5cdFx0XHRzdWNjZXNzPy4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogWW91IGNhbiByZW1vdmUgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIHdpdGggdGhpcyBtZXRob2QuXG5cdCAqIFdpdGggZXZlcnkgdXNlciBpbnRlcmFjdGlvbiB0aGF0IGNhdXNlcyBzZXJ2ZXIgY29tbXVuaWNhdGlvbiAobGlrZSBjbGlja2luZyBvbiBhbiBhY3Rpb24sIGNoYW5naW5nIGRhdGEpLFxuXHQgKiB0aGlzIG1ldGhvZCByZW1vdmVzIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2VzIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIEBwYXJhbSBba2VlcEJvdW5kTWVzc2FnZV0gQ2hlY2tzIGlmIHRoZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSBub3QgdG8gYmUgcmVtb3ZlZFxuXHQgKiBAcGFyYW0ga2VlcFVuYm91bmRNZXNzYWdlXG5cdCAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGtlZXBCb3VuZE1lc3NhZ2U/OiBib29sZWFuLCBrZWVwVW5ib3VuZE1lc3NhZ2U/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKCFrZWVwQm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdFx0fVxuXHRcdGlmICgha2VlcFVuYm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFsbCB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gaGFuZGxlIHRoZSBuYXZpZ2F0aW9uIHRvIHRoZSBlcnJvciBwYWdlLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IGZvciB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZVxuXHQgKi9cblx0X2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKG1QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyKTogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhVW5ib3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2coKTtcblx0XHRjb25zdCBhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSBiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID8gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpIDogW107XG5cdFx0Y29uc3QgYUN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IFtdO1xuXHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZSh0aGlzLmJhc2UuZ2V0VmlldygpKTtcblx0XHRsZXQgbU1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gVE9ETzogU3RpY2sgbW9kZSBjaGVjayBpcyBva2F5IGFzIGxvbmcgYXMgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGlzIHVzZWQgd2l0aCBzYXAuZmUuY29yZSBhbmQgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LlxuXHRcdC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBwcm92aWRlIGFuIGV4dGVuc2lvbiB0byB0aGUgY29uc3VtZXIgb2YgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIHByb3ZpZGUgdGhpcyB2YWx1ZS5cblxuXHRcdC8vIFRoZSBtZXNzYWdlIHBhZ2UgY2FuIG9ubHkgc2hvdyAxIG1lc3NhZ2UgdG9kYXksIHNvIHdlIG5hdmlnYXRlIHRvIGl0IHdoZW4gOlxuXHRcdC8vIDEuIFRoZXJlIGFyZSBubyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIHRvIHNob3csXG5cdFx0Ly8gMi4gVGhlcmUgYXJlIG5vIGN1c3RvbSBtZXNzYWdlcyB0byBzaG93LCAmXG5cdFx0Ly8gMy4gVGhlcmUgaXMgZXhhY3RseSAxIHVuYm91bmQgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHN0YXR1c0NvZGU9NTAzIGFuZCByZXRyeS1BZnRlciBhdmFpbGFibGVcblx0XHQvLyA0LiByZXRyeUFmdGVyIGlzIGdyZWF0ZXIgdGhhbiAxMjAgc2Vjb25kc1xuXHRcdC8vXG5cdFx0Ly8gSW4gQWRkaXRpb24sIG5hdmlnYXRpbmcgYXdheSBmcm9tIGEgc3RpY2t5IHNlc3Npb24gd2lsbCBkZXN0cm95IHRoZSBzZXNzaW9uIHNvIHdlIGRvIG5vdCBuYXZpZ2F0ZSB0byBtZXNzYWdlIHBhZ2UgZm9yIG5vdy5cblx0XHQvLyBUT0RPOiBjaGVjayBpZiBuYXZpZ2F0aW9uIHNob3VsZCBiZSBkb25lIGluIHN0aWNreSBlZGl0IG1vZGUuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlKSB7XG5cdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHR0aXRsZTogbVBhcmFtZXRlcnMudGl0bGUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdFx0bmF2aWdhdGVCYWNrVG9PcmlnaW46IHRydWUsXG5cdFx0XHRcdGVycm9yVHlwZTogXCJQYWdlTm90Rm91bmRcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0IWJJc1N0aWNreUVkaXRNb2RlICYmXG5cdFx0XHQhYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAmJlxuXHRcdFx0IWFDdXN0b21NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSB8fCBtUGFyYW1ldGVycz8uaXNJbml0aWFsTG9hZDUwM0Vycm9yID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAob1RlY2huaWNhbERldGFpbHM/Lmh0dHBTdGF0dXMgPT09IDUwMykge1xuXHRcdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0gdGhpcy5fZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzKG9NZXNzYWdlLCBvVGVjaG5pY2FsRGV0YWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzO1xuXHR9XG5cblx0X2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhtZXNzYWdlOiBNZXNzYWdlLCB0ZWNobmljYWxEZXRhaWxzOiBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3Qgc2Vjb25kc0JlZm9yZVJldHJ5ID1cblx0XHRcdHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5fZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIodGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmRzQmVmb3JlUmV0cnkgPT09IHVuZGVmaW5lZCB8fCBzZWNvbmRzQmVmb3JlUmV0cnkgPiAxMjApIHtcblx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmV0cnlBZnRlck1lc3NhZ2UgPyBgJHtyZXRyeUFmdGVyTWVzc2FnZX0gJHttZXNzYWdlLmdldE1lc3NhZ2UoKX1gIDogbWVzc2FnZS5nZXRNZXNzYWdlKCksXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiVW5hYmxlVG9Mb2FkXCJcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlcihkUmV0cnlBZnRlcjogRGF0ZSk6IG51bWJlciB7XG5cdFx0Y29uc3QgZEN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCksXG5cdFx0XHRpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkQ3VycmVudERhdGVUaW1lLmdldFRpbWUoKSxcblx0XHRcdGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyA9IGRSZXRyeUFmdGVyLmdldFRpbWUoKSxcblx0XHRcdGlTZWNvbmRzQmVmb3JlUmV0cnkgPSAoaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIC0gaUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzKSAvIDEwMDA7XG5cdFx0cmV0dXJuIGlTZWNvbmRzQmVmb3JlUmV0cnk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBleGlzdGluZyBVSSBkZWNpc2lvbnMgd2l0aCB0aGUgbmV3IG9uZXMuXG5cdCAqIEBwYXJhbSBuZXdVSURlY2lzaW9ucyBJbiBjb21taW5nIFVJIGRlY2lzaW9ucy5cblx0ICogQHBhcmFtIG92ZXJyaWRlVUlEZWNpc2lvbiBPdmVycmlkZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb24gdG8gc2hvdyBtZXNzYWdlcyB3aXRoIHRoZSBuZXcgb25lLlxuXHQgKlxuXHQgKiAnb3ZlcnJpZGVVSURlY2lzaW9uJywgVGhpcyB3b3VsZCBiZSBuZWVkZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBwYWdlIGNvbnRleHQgYW5kIHRoZSBwYXJhbXRlcnMgdG8gY3JlYXRlIHRoZSBuZXcgVUkgZGVjaXNpb24gYXJlIGRpZmZlcmVudC5cblx0ICovXG5cdHVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSB0aGlzLnVpRGVjaXNpb25zO1xuXHRcdGxldCBhbGxNZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdID0gW107XG5cdFx0bGV0IG1lcmdlZFVJRGVjaXNpb247XG5cdFx0aWYgKG9sZFVJRGVjaXNpb25zICYmIG92ZXJyaWRlVUlEZWNpc2lvbiA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd1swXS5nZXRDb2RlKCkgPT09IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCIgJiZcblx0XHRcdFx0bmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgYm90aCBhcmUgZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2VzLCB0aGVuIHdlIHNob3cgb25seSBvbmUgbWVzc2FnZS5cblx0XHRcdFx0YWxsTWVzc2FnZXNUb1Nob3cgPSBvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5vbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdywgLi4ubmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3ddKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IFtvbGRVSURlY2lzaW9ucy51aUVsZW1lbnRUb1VzZSwgbmV3VUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2VdO1xuXHRcdFx0Ly8gRGVmYXVsdCB3ZSBzaG93IGRpYWxvZ1xuXHRcdFx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBhbGxNZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwID8gXCJEaWFsb2dcIiA6IFwiTm9uZVwiO1xuXG5cdFx0XHRpZiAoYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFNpbmdsZSBtZXNzYWdlLCB3ZSBjaGVjayBmb3Igc3BlY2lmaWMgVUkgRWxlbWVudCB0byB1c2UuXG5cdFx0XHRcdGlmIChlbGVtZW50cy5pbmNsdWRlcyhcIlRvYXN0XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJCb3hcIikpIHtcblx0XHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bWVyZ2VkVUlEZWNpc2lvbiA9IHtcblx0XHRcdFx0bWVzc2FnZXNUb1Nob3c6IGFsbE1lc3NhZ2VzVG9TaG93LFxuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IG9sZFVJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoLFxuXHRcdFx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogb2xkVUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gfHwgbmV3VUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSBuZXdVSURlY2lzaW9ucztcblx0XHR9XG5cblx0XHR0aGlzLnVpRGVjaXNpb25zID0gbWVyZ2VkVUlEZWNpc2lvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgaGVsZCBrZXkuXG5cdCAqIEBwYXJhbSBpbktleSBLZXkgdG8gcmVtb3ZlLlxuXHQgKi9cblx0cmVtb3ZlSG9sZEtleShpbktleT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChpbktleSAmJiB0aGlzLmhvbGRLZXlzLmluY2x1ZGVzKGluS2V5KSkge1xuXHRcdFx0dGhpcy5ob2xkS2V5cy5zcGxpY2UodGhpcy5ob2xkS2V5cy5pbmRleE9mKGluS2V5KSwgMSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIEVsZW1lbnQgd2l0aCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd24uXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdGNoZWNrVG9TaG93VUlFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhvbGRNc2dzVG9TaG93ICYmICh0aGlzLmhvbGRLZXlzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvbGQgbWVzc2FnZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0aG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHR0aGlzLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoaWRlbnRpZmllcik7XG5cdH1cblxuXHQvKipcblx0ICogUmVsZWFzZSBtZXNzYWdlIGhvbGQgYnkgYSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0YXN5bmMgcmVsZWFzZUhvbGRCeUNvbnRyb2woY29udHJvbD86IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpZGVudGlmaWVyID0gY29udHJvbD8uZ2V0SWQoKTtcblx0XHR0aGlzLnJlbW92ZUhvbGRLZXkoaWRlbnRpZmllcik7XG5cdFx0YXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0XHRhd2FpdCB0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQW9FaEVDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0E4Q3JDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBNkloQkgsZUFBZSxDQUFDLENBQUMsRUFBQUksS0FBQSxHQStLakJKLGVBQWUsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFYLElBQUEsQ0FBQWUsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxvQkFBQTtJQWxhakIsU0FBQWxCLGVBQUEsRUFBYztNQUFBLElBQUFtQixLQUFBO01BQ2JBLEtBQUEsR0FBQUQsb0JBQUEsQ0FBQUUsSUFBQSxLQUFNLENBQUM7TUFBQ0QsS0FBQSxDQWRE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
|
|
441
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWMzIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWM0IiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiX3RoaXMiLCJjYWxsIiwic3RyaWN0V2FybmluZ01lc3NhZ2VzIiwiaG9sZEtleXMiLCJob2xkTXNnc1RvU2hvdyIsInVpRWxlbWVudElzQXZhaWxhYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJ1bmRlZmluZWQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwibWVzc2FnZXNJbk1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZXMiLCJjdXN0b21NZXNzYWdlcyIsIm9PUEludGVybmFsQmluZGluZ0NvbnRleHQiLCJiYXNlIiwiZ2V0VmlldyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld1R5cGUiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJpc09wZXJhdGlvbkRpYWxvZ09wZW4iLCJzZXRQcm9wZXJ0eSIsImJTaG93Qm91bmRNZXNzYWdlcyIsIm9CaW5kaW5nQ29udGV4dCIsImNvbnRleHQiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0FuZFNob3dNZXNzYWdlcyIsImJpbmQiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ0NvbnRleHQiLCJzaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzdWNjZXNzIiwiZmFpbHVyZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImNvbnRyb2wiLCJzQWN0aW9uTmFtZSIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJ1bkhvbGRLZXkiLCJmb3JjZVNob3dVSUVsZW1lbnQiLCJvdmVycmlkZVVJRGVjaXNpb24iLCJzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzIiwibmV3VUlEZWNpc2lvbnMiLCJtZXNzYWdlSGFuZGxpbmciLCJnZXRVSURlY2lzaW9ucyIsInVwZGF0ZVVJRGVjaXNpb25zIiwicmVtb3ZlSG9sZEtleSIsImdldElkIiwic2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNob3dVSUVsZW1lbnQiLCJjaGVja1RvU2hvd1VJRWxlbWVudCIsInVpRGVjaXNpb25zIiwic2hvd01lc3NhZ2VzSW5VSSIsInJldCIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJ0aGVuIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJoYW5kbGVTaGVsbEJhY2siLCJzaGVsbEJhY2siLCJvUmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9NZXNzYWdlUGFnZSIsImdldFRleHQiLCJjYXRjaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbnR5cGUgT2JqZWN0V2l0aENvbnZlcnRlclR5cGUgPSBvYmplY3QgJiB7XG5cdGNvbnZlcnRlclR5cGU6IHN0cmluZztcbn07XG50eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGlzRGF0YVJlY2VpdmVkRXJyb3I/OiBib29sZWFuO1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0ID0ge1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGVycm9yVHlwZT86IHN0cmluZztcblx0bmF2aWdhdGVCYWNrVG9PcmlnaW4/OiBib29sZWFuO1xuXHRoYW5kbGVTaGVsbEJhY2s/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEN1c3RvbU1lc3NhZ2UgPSB7XG5cdGNvZGU6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRwZXJzaXN0ZW50OiBib29sZWFuO1xuXHR0eXBlOiBNZXNzYWdlVHlwZTtcbn07XG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGlzT3BlcmF0aW9uRGlhbG9nT3Blbj86IGJvb2xlYW47XG5cdGNvbnRleHQ/OiBDb250ZXh0O1xuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuO1xuXHRjb250cm9sPzogQ29udHJvbDtcblx0c0FjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGFTZWxlY3RlZENvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXSB8IG51bGw7XG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0dW5Ib2xkS2V5Pzogc3RyaW5nO1xuXHRvdmVycmlkZVVJRGVjaXNpb24/OiBib29sZWFuO1xuXHRzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbjtcblx0Ym91bmRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzID0gU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIgJiB7XG5cdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cdHNoZWxsQmFjaz86IEZ1bmN0aW9uIHwgYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4vKipcbiAqXG4gKiBEZWZpbmVzIHRoZSBtZXNzYWdlIGRldGFpbCByZWxldmFudCBmb3IgdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2sgdG8gZGlzcGxheSBhIHBvcG92ZXIuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VEZXRhaWwgPSB7XG5cdG1lc3NhZ2U6IE1lc3NhZ2U7XG5cdGdyb3VwTmFtZT86IHN0cmluZztcblx0YWN0aXZlVGl0bGVIYW5kbGVyPzogRnVuY3Rpb247XG59O1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgbWVzc2FnZSBoYW5kbGluZy5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuTWVzc2FnZUhhbmRsZXJcIilcbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgc3RyaWN0V2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBob2xkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgdWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cblx0Ly8gV2UgYXdhaXQgc2hvd01lc3NhZ2VEaWFsb2cgdW50aWwgdGhlIFVJIGVsZW1lbnQgaXMgYXZhaWxhYmxlLlxuXHRwcml2YXRlIHVpRWxlbWVudElzQXZhaWxhYmxlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgY29uc3VtZXIgb2YgYSBtZXNzYWdlIGJ1dHRvbiBCQiB0byBkZWNpZGUgd2hpY2ggYm91bmQgbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duIGFuZCBob3cuXG5cdCAqXG5cdCAqIFRoaXMgaG9vayBpcyBjYWxsZWQgd2hlbiB0aGUgbWVzc2FnZSBidXR0b24gQkIgZGV0ZWN0cyBhIGNoYW5nZSBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogVGhlIGhvb2tzIGFsbG93cyB0byBkZWZpbmUgYmVoYXZpb3VyIGZvciBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBidXR0b24gQkIuXG5cdCAqXG5cdCAqIENvbnN1bWVycyB3aWxsIGJlIGFibGUgdG8gZG8gdGhlIGZvbGxvd2luZyB3aXRoIHRoaXMgaG9vay5cblx0ICpcblx0ICogMS4gRmlsdGVyIG91dCBtZXNzYWdlcyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBzaG93biBvbiB0aGUgbWVzc2FnZSBidXR0b24uXG5cdCAqIDIuIGdyb3VwIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGVpciBVSS5cblx0ICogMy4gcHJvdmlkZSBhIHByZXNzZXIgaGFuZGxlciBpbmNhc2UgdGhlIG1lc3NhZ2Ugc2hvdWxkIHNob3cgYXMgYSBsaW5rLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzIE9iamVjdCBjb250YWluaW5nIHRoZSBkZXRhaWxzIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMubWVzc2FnZSBUaGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLklkZWFsbHksIGl0IG11c3Qgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLmdyb3VwTmFtZSBUaGUgZ3JvdXAgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbWVzc2FnZS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5hY3RpdmVUaXRsZUhhbmRsZXIgRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjbGljayBldmVudCBvbiBhIG1lc3NhZ2UgaW4gdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2suXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IG11c3QgYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLlxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWxcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0YXN5bmMgYmVmb3JlU2hvd01lc3NhZ2VCdXR0b24oX21lc3NhZ2VEZXRhaWxzOiBNZXNzYWdlRGV0YWlsW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgdG8gaG9sZCBtZXNzYWdlcyB1bml0bCBhIHByb2Nlc3MgaXMgY29tcGxldGUuXG5cdCAqXG5cdCAqIFRoZSBjYWxsZXIgY2FuIHJlZ2lzdGVyIHRvIGhvbGQgdGhlIG1lc3NhZ2UgaGFuZGxlciBmcm9tIHNob3dpbmcgbWVzc2FnZXMgdW50aWwgdGhlIGNhbGxlcidzIHByb2Nlc3NlcyBhcmUgY29tcGxldGVkLlxuXHQgKiBPbiByZWdpc3RlcmluZyB0aGUgY2FsbGVyIGlzIHJldHVybmVkIGEgdW5pcXVlIGtleS5cblx0ICogVGhlIG1lc3NhZ2VzIHdpbGwgbm90IGJlIHNob3duIGluIHRoZSBVSSB3aXRoIHN1YnNlcXVlbnQgJ3Nob3dNZXNzYWdlRGlhbG9nKCknIGNhbGxzLlxuXHQgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHVzZSAnc2hvd01lc3NhZ2VEaWFsb2coPGtleT4pJyBhdCB0aGUgZW5kIG9mIGFsbCBoaXMgcHJvY2Vzc2VzIHRvIHNob3cgdGhlIG1lc3NhZ2VzIGluIHRoZSBVSS5cblx0ICpcblx0ICogSWYgbXVsdGlwbGUgb3duZXJzIHJlZ2lzdGVyIHNpbXVsdGFuZW91c2x5LCB0aGVuIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgVUkgb25seSBhZnRlciAnc2hvd01lc3NhZ2VEaWFsb2coPHJlc3BlY3RpdmVfa2V5PiknIGlzIGNhbGxlZCBieSBhbGwgdGhlIHByb2Nlc3Nlcycgb3duZXJzLlxuXHQgKiBAcGFyYW0ga2V5IFVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZSwgSWYgbm90IHByb3ZpZGVkLCBhIFVJRCB3b3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIHRvIHJlZ2lzdGVyLlxuXHQgKiBAcmV0dXJucyBVbmlxdWUgS2V5IHRvIGJlIHVzZWQgYnkgdGhlIGNhbGxlciB0byBzaG93IG1lc3NhZ2VzIGF0IGEgbGF0ZXIgcG9pbnQgb2YgdGltZS5cblx0ICovXG5cdHJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoa2V5Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCB1bmlxdWVLZXkgPSBrZXkgPz8gdWlkKCk7XG5cdFx0aWYgKCF0aGlzLmhvbGRLZXlzLmluY2x1ZGVzKHVuaXF1ZUtleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMucHVzaCh1bmlxdWVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5pcXVlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIGFsbCBleGlzdGluZyBoZWxkIGtleXMuXG5cdCAqL1xuXHRyZXNldEhvbGRLZXlzKCk6IHZvaWQge1xuXHRcdHRoaXMuaG9sZEtleXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgZGlhbG9nIHdpdGggdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB0aGVyZSBhcmUgYW55LlxuXHQgKiBUaGUgbWVzc2FnZSBkaWFsb2cgaXMgc2hvd24gYXMgYSBtb2RhbCBkaWFsb2cuIE9uY2UgdGhlIHVzZXIgY29uZmlybXMgdGhlIGRpYWxvZywgYWxsIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0ICogYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtZXNzYWdlLCBhIGxpc3Qgb2YgbWVzc2FnZXMgaXMgc2hvd24uIFRoZSB1c2VyXG5cdCAqIGNhbiBmaWx0ZXIgb24gbWVzc2FnZSB0eXBlcyBhbmQgY2FuIGRpc3BsYXkgZGV0YWlscyBhcyB3ZWxsIGFzIHRoZSBsb25nIHRleHQuIElmIHRoZXJlIGlzIG9uZSBtZXNzYWdlLFxuXHQgKiB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IHNob3dzIHRoZSBkZXRhaWxzIG9mIHRoZSBtZXNzYWdlLiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBzdWNjZXNzIG1lc3NhZ2UsIGEgbWVzc2FnZVxuXHQgKiB0b2FzdCBpcyBzaG93biBpbnN0ZWFkLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSB1c2VyIGNsb3NlcyB0aGUgZGlhbG9nLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqIEBwdWJsaWNcblx0ICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VEaWFsb2cobVBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IHRoaXMudWlFbGVtZW50SXNBdmFpbGFibGU7XG5cblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlID0gbWVzc2FnZXNJbk1vZGVsLmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNTdHJpY3RXYXJuaW5nTWVzc2FnZShtZXNzYWdlKTtcblx0XHR9KTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoZHVwbGljYXRlV2FybmluZ01lc3NhZ2UpO1xuXG5cdFx0Y29uc3QgY3VzdG9tTWVzc2FnZXMgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA/IG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzIDogdW5kZWZpbmVkLFxuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB2aWV3VHlwZSA9ICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0V2l0aENvbnZlcnRlclR5cGUpLmNvbnZlcnRlclR5cGU7XG5cdFx0Ly8gc2V0IGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nIG9wZW4gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gdG8gZGVjaWRlIHdoZXRoZXIgbWVzc2FnZSBkaWFsb2cgc2hvdWxkIG9wZW4gb3Igbm90XG5cdFx0aWYgKG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmlzT3BlcmF0aW9uRGlhbG9nT3BlbiAmJiBvT1BJbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvT1BJbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KFwiaXNPcGVyYXRpb25EaWFsb2dPcGVuXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBiU2hvd0JvdW5kTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gKFxuXHRcdFx0bVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY29udGV4dCA/IG1QYXJhbWV0ZXJzLmNvbnRleHQgOiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpXG5cdFx0KSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL2NvbnN0IGJFdGFnTWVzc2FnZSA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmJIYXNFdGFnTWVzc2FnZTtcblx0XHQvLyByZXNldCAgaXNPcGVyYXRpb25EaWFsb2dPcGVuXG5cdFx0Ly8gY2Fubm90IGRvIHRoaXMgb3BlcmF0aW9ucy5qcyBzaW5jZSBpdCBpcyBub3QgYXdhcmUgb2YgdGhlIHZpZXdcblx0XHRpZiAob09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlciwgcmVzb2x2ZTogKCkgPT4gdm9pZCwgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgdG8gc2V0IGEgdGltZW91dCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgbW9zdCByZWNlbnQgbWVzc2FnZXNcblx0XHRcdFx0c2V0VGltZW91dChcblx0XHRcdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGdyZWF0IEFQSSAtIHdpbGwgYmUgY2hhbmdlZCBsYXRlclxuXHRcdFx0XHRcdFx0dGhpcy5wcm9jZXNzQW5kU2hvd01lc3NhZ2VzKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyA/PyB7fSxcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiU2hvd0JvdW5kTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdGN1c3RvbU1lc3NhZ2VzID8/IFtdLFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdFx0XHRcdHZpZXdUeXBlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LmJpbmQodGhpcylcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIG1lc3NhZ2VzIGFuZCBzaG93IHRoZW0gd2hlbiBleHBlY3RlZC5cblx0ICpcblx0ICogV2UgZmlsdGVyIHRoZSBtZXNzYWdlcyB0byBzaG93IGFuZCBob2xkIHRoZW0gdW50aWwgYWxsIHJlZ2lzdGVyZWQgcHJvY2Vzc2VzIGNhbGwgc2hvd01lc3NhZ2VEaWFsb2cgd2l0aCB0aGVpciByZXNwZWN0aXZlIGhlbGQga2V5cy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBzaG93IG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZCBjb250ZXh0IG9mIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIFNob3VsZCBib3VuZCBtZXNzYWdlcyBiZSBzaG93bi5cblx0ICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG5cdCAqIEBwYXJhbSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG5cdCAqIEBwYXJhbSBmYWlsdXJlIEZhaWx1cmUgY2FsbGJhY2suXG5cdCAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuXHQgKi9cblx0cHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRwYXJhbWV0ZXJzOiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcixcblx0XHRiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0c2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiBib29sZWFuLFxuXHRcdGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10sXG5cdFx0c3VjY2VzczogKCkgPT4gdm9pZCxcblx0XHRmYWlsdXJlOiAoKSA9PiB2b2lkLFxuXHRcdHZpZXdUeXBlPzogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHtcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR1bkhvbGRLZXksXG5cdFx0XHRpc09wZXJhdGlvbkRpYWxvZ09wZW46IGZvcmNlU2hvd1VJRWxlbWVudCA9IGZhbHNlLFxuXHRcdFx0b3ZlcnJpZGVVSURlY2lzaW9uLFxuXHRcdFx0c2hvd0JvdW5kU3RhdGVNZXNzYWdlc1xuXHRcdH0gPSBwYXJhbWV0ZXJzO1xuXHRcdHRoaXMuaG9sZE1zZ3NUb1Nob3cgPSB0cnVlO1xuXG5cdFx0Ly8gQ3JlYXRlIGEgVUkgZGVjaXNpb24uXG5cdFx0Y29uc3QgbmV3VUlEZWNpc2lvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VUlEZWNpc2lvbnMoXG5cdFx0XHRjdXN0b21NZXNzYWdlcyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0c2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRcdFx0Y29uY3VycmVudEVkaXRGbGFnLFxuXHRcdFx0Y29udHJvbCxcblx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZSxcblx0XHRcdHZpZXdUeXBlLFxuXHRcdFx0c2hvd0JvdW5kU3RhdGVNZXNzYWdlcyxcblx0XHRcdHBhcmFtZXRlcnNcblx0XHQpO1xuXHRcdHRoaXMudXBkYXRlVUlEZWNpc2lvbnMobmV3VUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbik7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KHVuSG9sZEtleSA/PyBjb250cm9sPy5nZXRJZCgpKTtcblx0XHR0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoZm9yY2VTaG93VUlFbGVtZW50LCBzdWNjZXNzLCBmYWlsdXJlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IE1lc3NhZ2VzIGluIHRoZSBVSSBiYXNlZCBvbiBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gZm9yY2VTaG93VUlFbGVtZW50XG5cdCAqIEBwYXJhbSBzdWNjZXNzXG5cdCAqIEBwYXJhbSBmYWlsdXJlXG5cdCAqL1xuXHRhc3luYyBzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKFxuXHRcdGZvcmNlU2hvd1VJRWxlbWVudCA9IGZhbHNlLFxuXHRcdHN1Y2Nlc3M/OiAocmV0PzogdW5rbm93bikgPT4gdm9pZCxcblx0XHRmYWlsdXJlPzogKGVycj86IHVua25vd24pID0+IHZvaWRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2hvd1VJRWxlbWVudCA9IGZvcmNlU2hvd1VJRWxlbWVudCB8fCB0aGlzLmNoZWNrVG9TaG93VUlFbGVtZW50KCk7XG5cdFx0aWYgKHNob3dVSUVsZW1lbnQgJiYgdGhpcy51aURlY2lzaW9ucykge1xuXHRcdFx0Ly8gU2hvdyBVSSBlbGVtZW50IGZvciB0aGUgcHJlc2VudCBkZWNpc2lvbiBhbmQgY2xlYXIgdGhlIGRlY2lzaW9uLlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZSA9IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKHRoaXMudWlEZWNpc2lvbnMpO1xuXHRcdFx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdGZhaWx1cmU/LihlcnIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy51aURlY2lzaW9ucyA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTtcblx0XHRcdHRoaXMuaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmluZm8oXCJGRSA6IFY0IDogTWVzc2FnZUhhbmRsZXIgOiBIb2xkaW5nIG1lc3NhZ2VzIHVudGlsIGEgcmVnaXN0ZXJlZCBwcm9jZXNzIFwiKTtcblx0XHRcdHN1Y2Nlc3M/LigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBZb3UgY2FuIHJlbW92ZSB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCB0aGlzIG1ldGhvZC5cblx0ICogV2l0aCBldmVyeSB1c2VyIGludGVyYWN0aW9uIHRoYXQgY2F1c2VzIHNlcnZlciBjb21tdW5pY2F0aW9uIChsaWtlIGNsaWNraW5nIG9uIGFuIGFjdGlvbiwgY2hhbmdpbmcgZGF0YSksXG5cdCAqIHRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIFtrZWVwQm91bmRNZXNzYWdlXSBDaGVja3MgaWYgdGhlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIG5vdCB0byBiZSByZW1vdmVkXG5cdCAqIEBwYXJhbSBrZWVwVW5ib3VuZE1lc3NhZ2Vcblx0ICogQHBhcmFtIHNQYXRoVG9CZVJlbW92ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoa2VlcEJvdW5kTWVzc2FnZT86IGJvb2xlYW4sIGtlZXBVbmJvdW5kTWVzc2FnZT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoIWtlZXBCb3VuZE1lc3NhZ2UpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkKTtcblx0XHR9XG5cdFx0aWYgKCFrZWVwVW5ib3VuZE1lc3NhZ2UpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgYWxsIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBoYW5kbGUgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2UuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVycyBuZWNlc3NhcnkgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHRoZSBlcnJvciBwYWdlXG5cdCAqL1xuXHRfY2hlY2tOYXZpZ2F0aW9uVG9FcnJvclBhZ2UobVBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VQYXJhbWV0ZXIpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFVbmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXMoKTtcblx0XHRjb25zdCBiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IGFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA9IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPyBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkgOiBbXTtcblx0XHRjb25zdCBhQ3VzdG9tTWVzc2FnZXMgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA/IG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzIDogW107XG5cdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5pc1N0aWNreUVkaXRNb2RlKHRoaXMuYmFzZS5nZXRWaWV3KCkpO1xuXHRcdGxldCBtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBUT0RPOiBTdGljayBtb2RlIGNoZWNrIGlzIG9rYXkgYXMgbG9uZyBhcyB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaXMgdXNlZCB3aXRoIHNhcC5mZS5jb3JlIGFuZCBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQuXG5cdFx0Ly8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHByb3ZpZGUgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjb25zdW1lciBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gdG8gcHJvdmlkZSB0aGlzIHZhbHVlLlxuXG5cdFx0Ly8gVGhlIG1lc3NhZ2UgcGFnZSBjYW4gb25seSBzaG93IDEgbWVzc2FnZSB0b2RheSwgc28gd2UgbmF2aWdhdGUgdG8gaXQgd2hlbiA6XG5cdFx0Ly8gMS4gVGhlcmUgYXJlIG5vIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgdG8gc2hvdyxcblx0XHQvLyAyLiBUaGVyZSBhcmUgbm8gY3VzdG9tIG1lc3NhZ2VzIHRvIHNob3csICZcblx0XHQvLyAzLiBUaGVyZSBpcyBleGFjdGx5IDEgdW5ib3VuZCBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIG1vZGVsIHdpdGggc3RhdHVzQ29kZT01MDMgYW5kIHJldHJ5LUFmdGVyIGF2YWlsYWJsZVxuXHRcdC8vIDQuIHJldHJ5QWZ0ZXIgaXMgZ3JlYXRlciB0aGFuIDEyMCBzZWNvbmRzXG5cdFx0Ly9cblx0XHQvLyBJbiBBZGRpdGlvbiwgbmF2aWdhdGluZyBhd2F5IGZyb20gYSBzdGlja3kgc2Vzc2lvbiB3aWxsIGRlc3Ryb3kgdGhlIHNlc3Npb24gc28gd2UgZG8gbm90IG5hdmlnYXRlIHRvIG1lc3NhZ2UgcGFnZSBmb3Igbm93LlxuXHRcdC8vIFRPRE86IGNoZWNrIGlmIG5hdmlnYXRpb24gc2hvdWxkIGJlIGRvbmUgaW4gc3RpY2t5IGVkaXQgbW9kZS5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmlzRGF0YVJlY2VpdmVkRXJyb3IgPT09IHRydWUpIHtcblx0XHRcdG1NZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdHRpdGxlOiBtUGFyYW1ldGVycy50aXRsZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlBhZ2VOb3RGb3VuZFwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQhYklzU3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdCFhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQhYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCAmJlxuXHRcdFx0KGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxIHx8IG1QYXJhbWV0ZXJzPy5pc0luaXRpYWxMb2FkNTAzRXJyb3IgPT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFVbmJvdW5kTWVzc2FnZXNbMF07XG5cdFx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscz8uaHR0cFN0YXR1cyA9PT0gNTAzKSB7XG5cdFx0XHRcdG1NZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB0aGlzLl9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMob01lc3NhZ2UsIG9UZWNobmljYWxEZXRhaWxzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzKG1lc3NhZ2U6IE1lc3NhZ2UsIHRlY2huaWNhbERldGFpbHM6IE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgbWVzc2FnZVBhZ2VQYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBzZWNvbmRzQmVmb3JlUmV0cnkgPVxuXHRcdFx0dGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyICE9PSB1bmRlZmluZWQgPyB0aGlzLl9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlcih0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNlY29uZHNCZWZvcmVSZXRyeSA9PT0gdW5kZWZpbmVkIHx8IHNlY29uZHNCZWZvcmVSZXRyeSA+IDEyMCkge1xuXHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0UmV0cnlBZnRlck1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXRyeUFmdGVyTWVzc2FnZSA/IGAke3JldHJ5QWZ0ZXJNZXNzYWdlfSAke21lc3NhZ2UuZ2V0TWVzc2FnZSgpfWAgOiBtZXNzYWdlLmdldE1lc3NhZ2UoKSxcblx0XHRcdFx0bmF2aWdhdGVCYWNrVG9PcmlnaW46IHRydWUsXG5cdFx0XHRcdGVycm9yVHlwZTogXCJVbmFibGVUb0xvYWRcIlxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWVzc2FnZVBhZ2VQYXJhbWV0ZXJzO1xuXHR9XG5cblx0X2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKGRSZXRyeUFmdGVyOiBEYXRlKTogbnVtYmVyIHtcblx0XHRjb25zdCBkQ3VycmVudERhdGVUaW1lID0gbmV3IERhdGUoKSxcblx0XHRcdGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyA9IGRDdXJyZW50RGF0ZVRpbWUuZ2V0VGltZSgpLFxuXHRcdFx0aVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZFJldHJ5QWZ0ZXIuZ2V0VGltZSgpLFxuXHRcdFx0aVNlY29uZHNCZWZvcmVSZXRyeSA9IChpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgLSBpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMpIC8gMTAwMDtcblx0XHRyZXR1cm4gaVNlY29uZHNCZWZvcmVSZXRyeTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9ucyB3aXRoIHRoZSBuZXcgb25lcy5cblx0ICogQHBhcmFtIG5ld1VJRGVjaXNpb25zIEluIGNvbW1pbmcgVUkgZGVjaXNpb25zLlxuXHQgKiBAcGFyYW0gb3ZlcnJpZGVVSURlY2lzaW9uIE92ZXJyaWRlIHRoZSBleGlzdGluZyBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzIHdpdGggdGhlIG5ldyBvbmUuXG5cdCAqXG5cdCAqICdvdmVycmlkZVVJRGVjaXNpb24nLCBUaGlzIHdvdWxkIGJlIG5lZWRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHBhZ2UgY29udGV4dCBhbmQgdGhlIHBhcmFtdGVycyB0byBjcmVhdGUgdGhlIG5ldyBVSSBkZWNpc2lvbiBhcmUgZGlmZmVyZW50LlxuXHQgKi9cblx0dXBkYXRlVUlEZWNpc2lvbnMobmV3VUlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucywgb3ZlcnJpZGVVSURlY2lzaW9uID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBvbGRVSURlY2lzaW9ucyA9IHRoaXMudWlEZWNpc2lvbnM7XG5cdFx0bGV0IGFsbE1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlW10gPSBbXTtcblx0XHRsZXQgbWVyZ2VkVUlEZWNpc2lvbjtcblx0XHRpZiAob2xkVUlEZWNpc2lvbnMgJiYgb3ZlcnJpZGVVSURlY2lzaW9uID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0bmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd1swXS5nZXRDb2RlKCkgPT09IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBib3RoIGFyZSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZXMsIHRoZW4gd2Ugc2hvdyBvbmx5IG9uZSBtZXNzYWdlLlxuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWxsTWVzc2FnZXNUb1Nob3cgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLm9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93LCAuLi5uZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd10pKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGVsZW1lbnRzID0gW29sZFVJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlLCBuZXdVSURlY2lzaW9ucy51aUVsZW1lbnRUb1VzZV07XG5cdFx0XHQvLyBEZWZhdWx0IHdlIHNob3cgZGlhbG9nXG5cdFx0XHRsZXQgdWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudCA9IGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDAgPyBcIkRpYWxvZ1wiIDogXCJOb25lXCI7XG5cblx0XHRcdGlmIChhbGxNZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gU2luZ2xlIG1lc3NhZ2UsIHdlIGNoZWNrIGZvciBzcGVjaWZpYyBVSSBFbGVtZW50IHRvIHVzZS5cblx0XHRcdFx0aWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiVG9hc3RcIikpIHtcblx0XHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiVG9hc3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50cy5pbmNsdWRlcyhcIkJveFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0ge1xuXHRcdFx0XHRtZXNzYWdlc1RvU2hvdzogYWxsTWVzc2FnZXNUb1Nob3csXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaDogb2xkVUlEZWNpc2lvbnMuY29udGV4dE5lZWRzRXRhZ1JlZnJlc2ggfHwgbmV3VUlEZWNpc2lvbnMuY29udGV4dE5lZWRzRXRhZ1JlZnJlc2gsXG5cdFx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBvbGRVSURlY2lzaW9ucy5jb250YWluc0JvdW5kVHJhbnNpdGlvbiB8fCBuZXdVSURlY2lzaW9ucy5jb250YWluc0JvdW5kVHJhbnNpdGlvblxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVyZ2VkVUlEZWNpc2lvbiA9IG5ld1VJRGVjaXNpb25zO1xuXHRcdH1cblxuXHRcdHRoaXMudWlEZWNpc2lvbnMgPSBtZXJnZWRVSURlY2lzaW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBoZWxkIGtleS5cblx0ICogQHBhcmFtIGluS2V5IEtleSB0byByZW1vdmUuXG5cdCAqL1xuXHRyZW1vdmVIb2xkS2V5KGluS2V5Pzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKGluS2V5ICYmIHRoaXMuaG9sZEtleXMuaW5jbHVkZXMoaW5LZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnNwbGljZSh0aGlzLmhvbGRLZXlzLmluZGV4T2YoaW5LZXkpLCAxKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgVUkgRWxlbWVudCB3aXRoIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93bi5cblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0Y2hlY2tUb1Nob3dVSUVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaG9sZE1zZ3NUb1Nob3cgJiYgKHRoaXMuaG9sZEtleXMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogSG9sZCBtZXNzYWdlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqL1xuXHRob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBpZGVudGlmaWVyID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdHRoaXMucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyhpZGVudGlmaWVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWxlYXNlIG1lc3NhZ2UgaG9sZCBieSBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqL1xuXHRhc3luYyByZWxlYXNlSG9sZEJ5Q29udHJvbChjb250cm9sPzogQ29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sPy5nZXRJZCgpO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleShpZGVudGlmaWVyKTtcblx0XHR0aGlzLnVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZS50aGVuKFxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoKTtcblx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy51aUVsZW1lbnRJc0F2YWlsYWJsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUU1BLGNBQWMsSUFBQUMsSUFBQSxHQURuQkMsY0FBYyxDQUFDLGlEQUFpRCxDQUFDLEVBQUFDLEtBQUEsR0FvRWhFQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDbEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxFQUFBQyxLQUFBLEdBd0JyQ0MsZUFBZSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNqQkwsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFBTSxLQUFBLEdBOEN4QkYsZUFBZSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUNqQkMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQTZJaEJMLGVBQWUsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FtTGpCTixlQUFlLENBQUMsQ0FBQyxFQUFBTyxNQUFBLEdBQ2pCSCxjQUFjLENBQUMsQ0FBQyxFQUFBYixJQUFBLENBQUFpQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBL2JqQixTQUFBcEIsZUFBQSxFQUFjO01BQUEsSUFBQXFCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFB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
|
|
@@ -71,6 +71,17 @@ export type ShowMessagesParameters = ShowMessageDialogParameter & {
|
|
|
71
71
|
title?: string;
|
|
72
72
|
description?: string;
|
|
73
73
|
};
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* Defines the message detail relevant for the MessageButton building block to display a popover.
|
|
77
|
+
* @public
|
|
78
|
+
*/
|
|
79
|
+
export type MessageDetail = {
|
|
80
|
+
message: Message;
|
|
81
|
+
groupName?: string;
|
|
82
|
+
activeTitleHandler?: Function;
|
|
83
|
+
};
|
|
84
|
+
|
|
74
85
|
/**
|
|
75
86
|
* A controller extension offering message handling.
|
|
76
87
|
* @hideconstructor
|
|
@@ -152,6 +163,31 @@ class MessageHandler extends ControllerExtension {
|
|
|
152
163
|
return true;
|
|
153
164
|
}
|
|
154
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Allows consumer of a message button BB to decide which bound messages should be shown and how.
|
|
168
|
+
*
|
|
169
|
+
* This hook is called when the message button BB detects a change in the message model.
|
|
170
|
+
* The hooks allows to define behaviour for messages in the message button BB.
|
|
171
|
+
*
|
|
172
|
+
* Consumers will be able to do the following with this hook.
|
|
173
|
+
*
|
|
174
|
+
* 1. Filter out messages so that they are not shown on the message button.
|
|
175
|
+
* 2. group the messages based on their UI.
|
|
176
|
+
* 3. provide a presser handler incase the message should show as a link.
|
|
177
|
+
* @param _messageDetails Object containing the details related to the message.
|
|
178
|
+
* @param _messageDetails.message The message from the message model.Ideally, it must not be modified directly.
|
|
179
|
+
* @param _messageDetails.groupName The group name associated with the current message.
|
|
180
|
+
* @param _messageDetails.activeTitleHandler Function to handle the click event on a message in the MessageButton building block.
|
|
181
|
+
* @returns A promise that must be returned by the overridden method.
|
|
182
|
+
* @public
|
|
183
|
+
* @experimental
|
|
184
|
+
*/
|
|
185
|
+
@publicExtension()
|
|
186
|
+
@extensible("AfterAsync")
|
|
187
|
+
async beforeShowMessageButton(_messageDetails: MessageDetail[]): Promise<void> {
|
|
188
|
+
return Promise.resolve();
|
|
189
|
+
}
|
|
190
|
+
|
|
155
191
|
/**
|
|
156
192
|
* Register to hold messages unitl a process is complete.
|
|
157
193
|
*
|
|
@@ -500,8 +536,12 @@ class MessageHandler extends ControllerExtension {
|
|
|
500
536
|
async releaseHoldByControl(control?: Control): Promise<void> {
|
|
501
537
|
const identifier = control?.getId();
|
|
502
538
|
this.removeHoldKey(identifier);
|
|
539
|
+
this.uiElementIsAvailable = this.uiElementIsAvailable.then(
|
|
540
|
+
async function (this: MessageHandler): Promise<void> {
|
|
541
|
+
return this.showMessagesWithCondtions();
|
|
542
|
+
}.bind(this)
|
|
543
|
+
);
|
|
503
544
|
await this.uiElementIsAvailable;
|
|
504
|
-
await this.showMessagesWithCondtions();
|
|
505
545
|
}
|
|
506
546
|
|
|
507
547
|
/**
|