@sapui5/sap.fe.core 1.124.2 → 1.126.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 +5 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +4 -4
- package/src/sap/fe/core/AppComponent.js +2 -2
- package/src/sap/fe/core/AppComponent.ts +1 -1
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/AppStateHandler.ts +1 -1
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/BaseController.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +12 -15
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/ExtensionAPI.ts +4 -3
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/PageController.ts +1 -1
- package/src/sap/fe/core/ResourceModel.js +2 -2
- package/src/sap/fe/core/ResourceModel.ts +1 -1
- package/src/sap/fe/core/ReuseComponent.js +172 -0
- package/src/sap/fe/core/ReuseComponent.ts +165 -0
- package/src/sap/fe/core/TemplateComponent.js +2 -2
- package/src/sap/fe/core/TemplateComponent.ts +5 -1
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
- package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
- package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/Share.js +4 -4
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
- package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
- package/src/sap/fe/core/converters/ConverterContext.js +4 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
- package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
- package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
- package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
- package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
- package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
- package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/fpm/Component.js +3 -3
- package/src/sap/fe/core/fpm/Component.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
- package/src/sap/fe/core/helpers/MetaPath.js +9 -3
- package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
- package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
- package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
- package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
- package/src/sap/fe/core/library.js +4 -4
- package/src/sap/fe/core/library.ts +2 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
- package/src/sap/fe/core/messagebundle.properties +8 -57
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +4 -2
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +6 -57
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +3 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +3 -1
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +64 -62
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +3 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper.js +3 -3
- package/src/sap/fe/core/operationsHelper.ts +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +2 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +7 -7
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +1 -1
- package/src/sap/fe/core/type/InputMask.js +124 -0
- package/src/sap/fe/core/type/InputMask.ts +131 -0
- package/ui5.yaml +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
- package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
- package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
- package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
- package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
- package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
- package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
- package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
- package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
- package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
- package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageToast", "sap/m/Text", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../CommonUtils"
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHelper", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageToast", "sap/m/Text", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../CommonUtils"], function (Log, ClassSupport, ResourceModelHelper, Button, Dialog, MessageToast, Text, ControllerExtension, OverrideExecution, CommonUtils) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _dec34, _dec35, _dec36, _dec37, _dec38, _dec39, _dec40, _dec41, _dec42, _dec43, _dec44, _class, _class2;
|
|
9
|
+
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
9
10
|
var publicExtension = ClassSupport.publicExtension;
|
|
10
11
|
var privateExtension = ClassSupport.privateExtension;
|
|
11
12
|
var methodOverride = ClassSupport.methodOverride;
|
|
12
13
|
var finalExtension = ClassSupport.finalExtension;
|
|
13
14
|
var extensible = ClassSupport.extensible;
|
|
14
15
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
15
|
-
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
16
16
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
17
17
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
18
18
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
@@ -20,7 +20,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/m
|
|
|
20
20
|
let SideEffectsControllerExtension = (_dec = defineUI5Class("sap.fe.core.controllerextensions.SideEffects"), _dec2 = methodOverride(), _dec3 = publicExtension(), _dec4 = finalExtension(), _dec5 = publicExtension(), _dec6 = finalExtension(), _dec7 = publicExtension(), _dec8 = finalExtension(), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec13 = publicExtension(), _dec14 = finalExtension(), _dec15 = publicExtension(), _dec16 = finalExtension(), _dec17 = publicExtension(), _dec18 = finalExtension(), _dec19 = publicExtension(), _dec20 = finalExtension(), _dec21 = publicExtension(), _dec22 = finalExtension(), _dec23 = publicExtension(), _dec24 = finalExtension(), _dec25 = publicExtension(), _dec26 = finalExtension(), _dec27 = publicExtension(), _dec28 = extensible(OverrideExecution.Instead), _dec29 = publicExtension(), _dec30 = extensible(OverrideExecution.Instead), _dec31 = publicExtension(), _dec32 = finalExtension(), _dec33 = privateExtension(), _dec34 = finalExtension(), _dec35 = publicExtension(), _dec36 = finalExtension(), _dec37 = publicExtension(), _dec38 = finalExtension(), _dec39 = privateExtension(), _dec40 = finalExtension(), _dec41 = privateExtension(), _dec42 = finalExtension(), _dec43 = publicExtension(), _dec44 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
21
21
|
_inheritsLoose(SideEffectsControllerExtension, _ControllerExtension);
|
|
22
22
|
function SideEffectsControllerExtension() {
|
|
23
|
-
return _ControllerExtension.
|
|
23
|
+
return _ControllerExtension.call(this) || this;
|
|
24
24
|
}
|
|
25
25
|
var _proto = SideEffectsControllerExtension.prototype;
|
|
26
26
|
_proto.onInit = function onInit() {
|
|
@@ -333,13 +333,28 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/m
|
|
|
333
333
|
* Checks if a given context fits to a given path.
|
|
334
334
|
*
|
|
335
335
|
* This is done by checking both the navigation path and the canonical path.
|
|
336
|
+
* We also check dependent property bindings if they follow a navigation path to the given path.
|
|
336
337
|
*
|
|
337
338
|
* @param path The path to be checked
|
|
338
339
|
* @param context The context to be checked
|
|
339
340
|
* @returns True if the context fits to the given path
|
|
340
341
|
*/;
|
|
341
342
|
_proto._contextIsRelevant = function _contextIsRelevant(path, context) {
|
|
342
|
-
|
|
343
|
+
if ((context === null || context === void 0 ? void 0 : context.getPath()) === path || (context === null || context === void 0 ? void 0 : context.getCanonicalPath()) === path) {
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// check if a dependent binding follows a navigation path and fits to this path
|
|
348
|
+
const model = context.getModel();
|
|
349
|
+
const metaModel = model.getMetaModel();
|
|
350
|
+
const dependentBindings = model.getDependentBindings(context);
|
|
351
|
+
for (const binding of dependentBindings) {
|
|
352
|
+
const propertyTarget = metaModel.fetchUpdateData(binding.getPath() ?? "", context).getResult();
|
|
353
|
+
if ((propertyTarget === null || propertyTarget === void 0 ? void 0 : propertyTarget.entityPath) === path || "/" + (propertyTarget === null || propertyTarget === void 0 ? void 0 : propertyTarget.editUrl) === path) {
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return false;
|
|
343
358
|
}
|
|
344
359
|
|
|
345
360
|
/**
|
|
@@ -730,4 +745,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/m
|
|
|
730
745
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getContextForSideEffects", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getContextForSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getFieldSideEffectsMap", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "getFieldSideEffectsMap"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearFieldGroupsValidity", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "clearFieldGroupsValidity"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isFieldGroupValid", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "isFieldGroupValid"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTargetProperty", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "getTargetProperty"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [_dec23, _dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [_dec25, _dec26], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffectsForEvent", [_dec27, _dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffectsForEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getDataRefreshText", [_dec29, _dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "getDataRefreshText"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [_dec31, _dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFailedSideEffects", [_dec33, _dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext", [_dec35, _dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffects", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFieldGroupSideEffects", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup", [_dec43, _dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup"), _class2.prototype)), _class2)) || _class);
|
|
731
746
|
return SideEffectsControllerExtension;
|
|
732
747
|
}, false);
|
|
733
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9zaWRlRWZmZWN0c1NlcnZpY2UiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCIsIl9maWVsZEdyb3VwSW52YWxpZGl0eSIsIl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMiLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJlbnRpdHlUeXBlIiwiY29udHJvbFNpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbCIsImNvbnRyb2xJZCIsImlzQSIsImdldElkIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYmluZGluZ0NvbnRleHQiLCJzaWRlRWZmZWN0RW50aXR5VHlwZSIsImNvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWRzIiwiZ2V0RmllbGRHcm91cElkcyIsInZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJ2aWV3RW50aXR5U2V0IiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5U2V0cyIsImZpbmQiLCJuYW1lIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJmaWVsZFBhdGgiLCJnZXRUYXJnZXRQcm9wZXJ0eSIsImNvbnRleHQiLCJjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzaWRlRWZmZWN0c05hbWUiLCJvQ29udHJvbFNpZGVFZmZlY3RzIiwic291cmNlUHJvcGVydGllcyIsImluY2x1ZGVzIiwiaW1tZWRpYXRlIiwic2lkZUVmZmVjdHMiLCJmaWVsZENvbnRleHQiLCJtU2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWQiLCJfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAiLCJvQ29udGV4dCIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImlzRmllbGRHcm91cFZhbGlkIiwiaWQiLCJfZ2V0RmllbGRHcm91cEluZGV4IiwibGVuZ3RoIiwiZGF0YSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiZmllbGRHcm91cHNTaWRlRWZmZWN0cyIsInJlZHVjZSIsInJlc3VsdHMiLCJjb25jYXQiLCJnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsIl9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzIiwiY2F0Y2giLCJlcnJvciIsImNvbnRleHRQYXRoIiwiTG9nIiwiZGVidWciLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJncm91cElkIiwiZm5HZXRUYXJnZXRzIiwiaWdub3JlVHJpZ2dlckFjdGlvbnMiLCJmblRyaWdnZXJDYWxsYmFja3MiLCJ0cmlnZ2VyQ2FsbGJhY2tzIiwiYmluZCIsInRhcmdldHMiLCJ0cmlnZ2VyQWN0aW9uIiwidGFyZ2V0RW50aXRpZXMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwiaXNDb250cm9sU2lkZUVmZmVjdHMiLCJleGVjdXRlQWN0aW9uIiwidGhlbiIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiX2ZpbmRSZWxldmFudENvbnRleHQiLCJfY29udGV4dElzUmVsZXZhbnQiLCJnZXRDYW5vbmljYWxQYXRoIiwiZGVwZW5kZW50QmluZGluZ3MiLCJnZXREZXBlbmRlbnRCaW5kaW5ncyIsImJpbmRpbmciLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwidGV4dCIsImNvbmZpcm1hdGlvbkRpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJjb250ZW50IiwiVGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsInB1c2giLCJmbnRyaWdnZXJDYWxsYmFja3MiLCJhY3Rpb24iLCJteVNldCIsInByb3BlcnR5IiwiYWRkIiwibmF2aWdhdGlvblByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzIiwiaXNOb3RBbHJlYWR5TGlzdGVkIiwiZXZlcnkiLCJtRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzRnVsbHlRdWFsaWZpZWROYW1lIiwicHJvbWlzZSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsInVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJyZWdpc3RyeUluZGV4Iiwic3RhcnRzV2l0aCIsInNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic2lkZUVmZmVjdFBhdGgiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNUb0V4ZWN1dGUiLCJhZGRTaWRlRWZmZWN0cyIsInZhbHVlcyIsImZhaWxlZFNpZGVFZmZlY3RzIiwiZmFpbGVkU2lkZUVmZmVjdCIsImUiLCJuYXZpZ2F0aW9uIiwibmF2IiwicmVnaXN0ZXJDYWxsQmFjayIsImdldFJlZ2lzdGVyZWRDYWxsYmFjayIsInN1Y2Nlc3MiLCJrZXkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaWRlRWZmZWN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSB7IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vUmFkaW9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuXG50eXBlIEJhc2VTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSAmIHtcblx0Y29udGV4dDogQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZT47XG5cbnR5cGUgRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBTaWRlRWZmZWN0c1R5cGVbXT47XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG59O1xuXG5jb25zdCBJTU1FRElBVEVfUkVRVUVTVCA9IFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCI7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfdmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCE6IFJlY29yZDxzdHJpbmcsIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZT47XG5cblx0cHJpdmF0ZSBfZmllbGRHcm91cEludmFsaWRpdHkhOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG5cblx0cHJpdmF0ZSBfc2lkZUVmZmVjdHNTZXJ2aWNlITogU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXG5cdHByaXZhdGUgX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cyE6IEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXG5cdHByaXZhdGUgaXNDb25maXJtYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwID0ge307XG5cdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHkgPSB7fTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0gY29udHJvbFNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFkZENvbnRyb2xTaWRlRWZmZWN0cyhlbnRpdHlUeXBlOiBzdHJpbmcsIGNvbnRyb2xTaWRlRWZmZWN0czogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoZW50aXR5VHlwZSwgY29udHJvbFNpZGVFZmZlY3RzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIFNpZGVFZmZlY3RzIGNyZWF0ZWQgYnkgYSBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbCBTQVBVSTUgQ29udHJvbFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gY29udHJvbC5pc0E/LihcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIikgJiYgY29udHJvbC5nZXRJZCgpO1xuXG5cdFx0aWYgKGNvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IG9uIHdoaWNoIFNpZGVFZmZlY3RzIGNhbiBiZSByZXF1ZXN0ZWQuXG5cdCAqIFRoZSBjb3JyZWN0IG9uZSBtdXN0IGhhdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVyICQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dCBJbml0aWFsIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdEVudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgc2lkZUVmZmVjdHNcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0LCBzaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRjb250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoY29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGVudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGNvbnRleHRGb3JTaWRlRWZmZWN0cy5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250ZXh0Rm9yU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIG1hcCBmb3IgYSBmaWVsZFxuXHQgKiBUaGVzZSBTaWRlRWZmZWN0cyBhcmVcblx0ICogLSBsaXN0ZWQgaW50byBGaWVsZEdyb3VwSWRzIChjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlKVxuXHQgKiAtIGdlbmVyYXRlZCBieSBhIGNvbnRyb2wgb3IgY29udHJvbHMgYW5kIHRoYXQgY29uZmlndXJlIHRoaXMgZmllbGQgYXMgU291cmNlUHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZDogQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGxldCBzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBmaWVsZC5nZXRGaWVsZEdyb3VwSWRzKCksXG5cdFx0XHR2aWV3RW50aXR5U2V0U2V0TmFtZSA9ICh0aGlzLl92aWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpLmVudGl0eVNldCxcblx0XHRcdHZpZXdFbnRpdHlTZXQgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkuZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVNldC5uYW1lID09PSB2aWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWRcblx0XHQpIGFzIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBjb250cm9sKHMpXG5cdFx0aWYgKHZpZXdFbnRpdHlTZXRTZXROYW1lICYmIHZpZXdFbnRpdHlTZXQpIHtcblx0XHRcdGNvbnN0IHZpZXdFbnRpdHlUeXBlID0gdmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZmllbGRQYXRoID0gdGhpcy5nZXRUYXJnZXRQcm9wZXJ0eShmaWVsZCksXG5cdFx0XHRcdGNvbnRleHQgPSB0aGlzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsIHZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKGZpZWxkUGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKHZpZXdFbnRpdHlUeXBlKTtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSkuZm9yRWFjaCgoc2lkZUVmZmVjdHNOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0cyA9IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGVbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2xTaWRlRWZmZWN0cy5zb3VyY2VQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBgJHtzaWRlRWZmZWN0c05hbWV9Ojoke3ZpZXdFbnRpdHlUeXBlfWA7XG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHNNYXA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2lkZUVmZmVjdHMgbWFwIGZvciBmaWVsZEdyb3Vwcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZHMgRmllbGQgZ3JvdXAgaWRzXG5cdCAqIEBwYXJhbSBmaWVsZENvbnRleHQgRmllbGQgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3Vwcyhcblx0XHRmaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSxcblx0XHRmaWVsZENvbnRleHQ/OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfCBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHtcblx0XHRjb25zdCBtU2lkZUVmZmVjdHNNYXA6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSB7fTtcblx0XHRmaWVsZEdyb3VwSWRzLmZvckVhY2goKGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIHNpZGVFZmZlY3RzLCBzaWRlRWZmZWN0RW50aXR5VHlwZSB9ID0gdGhpcy5fZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gZmllbGRDb250ZXh0ID8gKHRoaXMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGZpZWxkQ29udGV4dCwgc2lkZUVmZmVjdEVudGl0eVR5cGUpIGFzIENvbnRleHQpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzICYmICghZmllbGRDb250ZXh0IHx8IChmaWVsZENvbnRleHQgJiYgb0NvbnRleHQpKSkge1xuXHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbbmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGZpZWxkQ29udGV4dCkge1xuXHRcdFx0XHRcdChtU2lkZUVmZmVjdHNNYXBbbmFtZV0gYXMgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKS5jb250ZXh0ID0gb0NvbnRleHQhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1TaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Y2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgcmVjb3JkZWQgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIEZpZWxkIGdyb3VwIGlkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNGaWVsZEdyb3VwVmFsaWQoZmllbGRHcm91cElkOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChmaWVsZEdyb3VwSWQsIGNvbnRleHQpO1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0gPz8ge30pLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxhdGl2ZSB0YXJnZXQgcHJvcGVydHkgcmVsYXRlZCB0byB0aGUgRmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFJlbGF0aXZlIHRhcmdldCBwcm9wZXJ0eVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFRhcmdldFByb3BlcnR5KGZpZWxkOiBDb250cm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBmaWVsZFBhdGggPSBmaWVsZC5kYXRhKFwic291cmNlUGF0aFwiKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHZpZXdCaW5kaW5nUGF0aCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHZpZXdNZXRhTW9kZWxQYXRoID0gdmlld0JpbmRpbmdQYXRoID8gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKHZpZXdCaW5kaW5nUGF0aCl9L2AgOiBcIlwiO1xuXHRcdHJldHVybiBmaWVsZFBhdGg/LnJlcGxhY2Uodmlld01ldGFNb2RlbFBhdGgsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSBmaWVsZFZhbGlkaXR5XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkIGJlZm9yZSBleGVjdXRpbmcgZGVmZXJyZWQgU2lkZUVmZmVjdHNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCB8IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQsXG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbixcblx0XHRmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBVSTVFdmVudDx7fSwgQ29udHJvbD4pLmdldFNvdXJjZSgpO1xuXHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cblx0XHQvLyByZWdpc3RlciBmaWVsZCBncm91cCBTaWRlRWZmZWN0c1xuXHRcdE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwKVxuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdHNOYW1lKSA9PiBzaWRlRWZmZWN0c01hcFtzaWRlRWZmZWN0c05hbWVdLmltbWVkaWF0ZSAhPT0gdHJ1ZSlcblx0XHRcdC5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0gc2lkZUVmZmVjdHNNYXBbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0dGhpcy5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMsIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkXG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBldmVudCB0aGF0IGNvbWVzIGZyb20gYSBmaWVsZCBjaGFuZ2Vcblx0ICogQHBhcmFtIGZpZWxkVmFsaWRpdHlcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gc2tpcERlZmVycmVkUmVnaXN0cmF0aW9uIElmIHRydWUgdGhlbiBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgYXJlIG5vdCByZWdpc3RlcmVkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSByZWdpc3RyYXRpb24gb2YgZGVmZXJyZWQgc2lkZSBlZmZlY3RzIGFuZCB0cmlnZ2VyaW5nIG5lZWRzIHRvIGJlIGRvbmUgc2VwYXJhdGVseS5cblx0ICogQHJldHVybnMgIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCB8IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQsXG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbixcblx0XHRmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPixcblx0XHRza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24gPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBVSTVFdmVudDx7fSwgQ29udHJvbD4pLmdldFNvdXJjZSgpO1xuXHRcdGlmICghc2tpcERlZmVycmVkUmVnaXN0cmF0aW9uKSB7XG5cdFx0XHR0aGlzLnByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQoZXZlbnQsIGZpZWxkVmFsaWRpdHksIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKGZpZWxkLCBmaWVsZFZhbGlkaXR5KTtcblx0XHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tYW5hZ2VTaWRlRWZmZWN0c0Zyb21GaWVsZChmaWVsZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyBTaWRlRWZmZWN0cyB3aXRoIGEgcmVsYXRlZCAnZm9jdXMgb3V0JyB0byBhIGZpZWxkIGdyb3VwLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgU0FQVUk1IEV2ZW50XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIHRydWUgaWYgdGhlIFNpZGVFZmZlY3RzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgdm9pZFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmllbGRHcm91cElkc1wiKSA/PyBbXSxcblx0XHRcdGZpZWxkR3JvdXBzU2lkZUVmZmVjdHMgPSBmaWVsZEdyb3VwSWRzLnJlZHVjZSgocmVzdWx0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10sIGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cy5jb25jYXQodGhpcy5nZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZCkpO1xuXHRcdFx0fSwgW10pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0ZmllbGRHcm91cHNTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGZpZWxkR3JvdXBTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0fSlcblx0XHQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0cyBvbiBjb250ZXh0ICR7Y29udGV4dFBhdGh9YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBncm91cElkXG5cdCAqIEBwYXJhbSBmbkdldFRhcmdldHMgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZ2l2ZSB1cyB0aGUgdGFyZ2V0cyBhbmQgYWN0aW9ucyBpZiBpdCB3YXMgY29taW5nIHRocm91Z2ggc29tZSBzcGVjaWZpYyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGlnbm9yZVRyaWdnZXJBY3Rpb25zIElmIHRydWUsIHdlIGRvIG5vdCB0cmlnZ2VyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgc2lkZSBlZmZlY3Rcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcmVxdWVzdCBvbiBTQVBVSTUgY29udGV4dFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLFxuXHRcdGNvbnRleHQ6IENvbnRleHQsXG5cdFx0Z3JvdXBJZD86IHN0cmluZyxcblx0XHRmbkdldFRhcmdldHM/OiAoc2lkZUVmZmVjdHNEZWY6IFNpZGVFZmZlY3RzVHlwZSkgPT4geyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcblx0XHRpZ25vcmVUcmlnZ2VyQWN0aW9ucyA9IGZhbHNlXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZuVHJpZ2dlckNhbGxiYWNrcyA9IHRoaXMudHJpZ2dlckNhbGxiYWNrcy5iaW5kKHRoaXMpO1xuXHRcdGNvbnN0IHsgdGFyZ2V0cywgdHJpZ2dlckFjdGlvbiB9ID0gZm5HZXRUYXJnZXRzXG5cdFx0XHQ/IGZuR2V0VGFyZ2V0cyhzaWRlRWZmZWN0cylcblx0XHRcdDoge1xuXHRcdFx0XHRcdHRhcmdldHM6IFsuLi4oc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLCAuLi4oc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSldLFxuXHRcdFx0XHRcdHRyaWdnZXJBY3Rpb246ICF0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuaXNDb250cm9sU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMpID8gc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbiA6IHVuZGVmaW5lZFxuXHRcdFx0ICB9O1xuXHRcdGlmICh0cmlnZ2VyQWN0aW9uICYmICFpZ25vcmVUcmlnZ2VyQWN0aW9ucykge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24odHJpZ2dlckFjdGlvbiwgY29udGV4dCwgZ3JvdXBJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHModGFyZ2V0cywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuVHJpZ2dlckNhbGxiYWNrcyhzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcz8ubWFwKCh0YXJnZXQpID0+IHRhcmdldC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgfHwgW10pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKFtzaWRlRWZmZWN0c10sIGNvbnRleHQpO1xuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIHNpZGVFZmZlY3QgZXZlbnQuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHRvIGV4ZWN1dGUgdGhlIHNpZGUgZWZmZWN0IG9uIHRoZSBwYWdlJ3MgY29udGV4dCwgYnV0IHBhZ2VzIChsaWtlIHRoZSBMUikgbWlnaHQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudE5hbWUgU2lkZUVmZmVjdHMgZXZlbnQgd2hpY2ggd2FzIHRyaWdnZXJlZFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmb3Igd2hpY2ggdGhpcyBldmVudCB3YXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNEYXRhUGF0aFJlbGV2YW50KHBhdGgpKSB7XG5cdFx0XHQvLyB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgU2lkZUVmZmVjdHMgU2VydmljZVxuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuX2ZpbmRSZWxldmFudENvbnRleHQocGF0aCwgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZGF0YSBwYXRoIGlzIHNob3duL3JlbGV2YW50IG9uIHRoZSBwYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgcGF0aCBpcyBzaG93biBvbiB0aGUgVUlcblx0ICovXG5cdGlzRGF0YVBhdGhSZWxldmFudChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gISF0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIGNvbnRleHQgZml0cyB0byBhIGdpdmVuIHBhdGguXG5cdCAqXG5cdCAqIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyBib3RoIHRoZSBuYXZpZ2F0aW9uIHBhdGggYW5kIHRoZSBjYW5vbmljYWwgcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbnRleHQgZml0cyB0byB0aGUgZ2l2ZW4gcGF0aFxuXHQgKi9cblx0X2NvbnRleHRJc1JlbGV2YW50KHBhdGg6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb250ZXh0Py5nZXRQYXRoKCkgPT09IHBhdGggfHwgY29udGV4dD8uZ2V0Q2Fub25pY2FsUGF0aCgpID09PSBwYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgY29udGV4dCBmb3IgYSBnaXZlbiBwYXRoIGJ5IGNoZWNraW5nIGRlcGVuZGVudCBiaW5kaW5ncy5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgcGFyZW50IGNvbnRleHRcblx0ICogQHJldHVybnMgQ29udGV4dCBpZiBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG5cdCAqL1xuXHRfZmluZFJlbGV2YW50Q29udGV4dChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgY29udGV4dCkpIHtcblx0XHRcdHJldHVybiBjb250ZXh0O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRlcGVuZGVudEJpbmRpbmdzID0gY29udGV4dC5nZXRNb2RlbCgpLmdldERlcGVuZGVudEJpbmRpbmdzKGNvbnRleHQpO1xuXHRcdGZvciAoY29uc3QgYmluZGluZyBvZiBkZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0aWYgKGJpbmRpbmcuaXNBPE9EYXRhQ29udGV4dEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIikpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRjb25zdCBsaXN0Q29udGV4dHMgPSBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxpc3RDb250ZXh0IG9mIGxpc3RDb250ZXh0cykge1xuXHRcdFx0XHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBsaXN0Q29udGV4dCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBsaXN0Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRleHQgdG8gYmUgc2hvd24gZm9yIHVzZXIgdG8gaW5kaWNhdGUgZGF0YSByZWZyZXNoLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLiBQYWdlcyAobGlrZSB0aGUgTFIpIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUZXh0IHRvIGJlIHNob3duIHRvIHRoZSB1c2VyIGluIGNhc2Ugb2YgYSBkYXRhIHJlZnJlc2hcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldERhdGFSZWZyZXNoVGV4dCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKTtcblx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19TRVJWRVJfRVZFTlRTX05FV19EQVRBX0lURU1cIik7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IHRoZSB1c2VyIHRoYXQgZGF0YSB3YXMgcmVmcmVzaGVkLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLlxuXHQgKi9cblxuXHRub3RpZnlEYXRhUmVmcmVzaCgpOiB2b2lkIHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5fc2lkZUVmZmVjdHMuZ2V0RGF0YVJlZnJlc2hUZXh0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzayB0aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIG9mIGEgZGF0YSByZWZyZXNoLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgaWYgdGhlIHVzZXIgY29uZmlybXMgYW5kIHJlamVjdHMgaWYgdGhlIHVzZXIgY2FuY2Vscy5cblx0ICovXG5cdGFzeW5jIGNvbmZpcm1EYXRhUmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdGhpcy5nZXREYXRhUmVmcmVzaFRleHQoKTtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRcdGNvbnN0IGNvbmZpcm1hdGlvbkRpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJXQVJOSU5HXCIpLFxuXHRcdFx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0XHRjb250ZW50OiBuZXcgVGV4dCh7IHRleHQ6IHRleHQgfSksXG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0YWZ0ZXJDbG9zZTogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHR0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3BlbiA9IHRydWU7XG5cdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5vcGVuKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBtdWx0aXBsZSBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBtdWx0aVNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgaWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHJlcXVlc3Qgb24gU0FQVUk1IGNvbnRleHRcblx0ICovXG5cdGFzeW5jIHJlcXVlc3RNdWx0aXBsZVNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0LCBncm91cElkPzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0bGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRsZXQgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCBhY3Rpb25zID0gbXVsdGlTaWRlRWZmZWN0cy5yZWR1Y2UoKGFjdGlvbnMsIHNpZGVFZmZlY3RzKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0QWN0aW9uID0gKHNpZGVFZmZlY3RzIGFzIE9EYXRhU2lkZUVmZmVjdHNUeXBlKS50cmlnZ2VyQWN0aW9uO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RBY3Rpb24pIHtcblx0XHRcdFx0YWN0aW9ucy5wdXNoKHNpZGVFZmZlY3RBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFjdGlvbnM7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGZudHJpZ2dlckNhbGxiYWNrcyA9IHRoaXMudHJpZ2dlckNhbGxiYWNrcy5iaW5kKHRoaXMpO1xuXG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCBncm91cElkKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdHByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSkucmVkdWNlKChteVNldCwgcHJvcGVydHkpID0+IG15U2V0LmFkZChwcm9wZXJ0eSksIHByb3BlcnRpZXMpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLnJlZHVjZShcblx0XHRcdFx0KG15U2V0LCBuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG15U2V0LmFkZChuYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShwcm9wZXJ0aWVzKSxcblx0XHRcdFx0XHQuLi5BcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGdyb3VwSWRcblx0XHRcdClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuXHRcdFx0XHRyZXR1cm4gZm50cmlnZ2VyQ2FsbGJhY2tzKEFycmF5LmZyb20obmF2aWdhdGlvblByb3BlcnRpZXMpKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQHJldHVybnMgUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgcmVxdWVzdCBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IGlzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHRcdChtRmFpbGVkU2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBTaWRlRWZmZWN0cyBpbiB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cyBmb3IgYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dCBwYXRoIHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0dW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZSBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAodGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXT8ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0cykgPT4gc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgYSBGaWVsZEdyb3VwXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gZXZlbnQgcmVsYXRlZCB0byB0aGUgZmllbGQgZ3JvdXAgY2hhbmdlIGlzIGZpcmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNQcm9wZXJ0aWVzIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBmdWxsZmlsIGJlZm9yZSBleGVjdXRpbmcgdGhlIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlLCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KHNpZGVFZmZlY3RzUHJvcGVydGllcy5uYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0aWYgKCF0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0pIHtcblx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXSA9IHtcblx0XHRcdFx0cHJvbWlzZTogZmllbGRHcm91cFByZVJlcXVpc2l0ZSA/PyBQcm9taXNlLnJlc29sdmUoKSxcblx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBzaWRlRWZmZWN0c1Byb3BlcnRpZXNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRleHQsIG5hbWUgfSA9IHNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgaW50byB0aGUgcXVldWUgZm9yIGEgZmllbGQgZ3JvdXAgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJ5SW5kZXggb2YgT2JqZWN0LmtleXModGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXApKSB7XG5cdFx0XHRpZiAocmVnaXN0cnlJbmRleC5zdGFydHNXaXRoKGAke2ZpZWxkR3JvdXBJZH1fYCkpIHtcblx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgc3RhdHVzIGluZGV4LlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIFRoZSBmaWVsZCBncm91cCBpZFxuXHQgKiBAcGFyYW0gY29udGV4dCBTQVBVSTUgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBJbmRleFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRHcm91cEluZGV4KGZpZWxkR3JvdXBJZDogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCR7ZmllbGRHcm91cElkfV8ke2NvbnRleHQuZ2V0UGF0aCgpfWA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBzaWRlRWZmZWN0cyBwcm9wZXJ0aWVzIGZyb20gYSBmaWVsZCBncm91cCBpZFxuXHQgKiBUaGUgcHJvcGVydGllcyBhcmU6XG5cdCAqICAtIG5hbWVcblx0ICogIC0gc2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiAgLSBzaWRlRWZmZWN0cyBlbnRpdHkgdHlwZVxuXHQgKiAgLSBpbW1lZGlhdGUgc2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWRcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiB7XG5cdFx0c2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZztcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0aW1tZWRpYXRlOiBib29sZWFuO1xuXHRcdHNpZGVFZmZlY3RzOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblx0fSB7XG5cdFx0LyoqXG5cdFx0ICogc3RyaW5nIFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIgaXMgYWRkZWQgdG8gdGhlIFNpZGVFZmZlY3RzIG5hbWUgZHVyaW5nIHRlbXBsYXRpbmcgdG8ga25vd1xuXHRcdCAqIGlmIHRoaXMgU2lkZUVmZmVjdHMgbXVzdCBiZSBpbW1lZGlhdGVseSBleGVjdXRlZCByZXF1ZXN0ZWQgKG9uIGZpZWxkIGNoYW5nZSkgb3IgbXVzdFxuXHRcdCAqIGJlIGRlZmVycmVkIChvbiBmaWVsZCBncm91cCBmb2N1cyBvdXQpXG5cdFx0ICpcblx0XHQgKi9cblx0XHRjb25zdCBpbW1lZGlhdGUgPSBmaWVsZEdyb3VwSWQuaW5jbHVkZXMoSU1NRURJQVRFX1JFUVVFU1QpLFxuXHRcdFx0bmFtZSA9IGZpZWxkR3JvdXBJZC5yZXBsYWNlKElNTUVESUFURV9SRVFVRVNULCBcIlwiKSxcblx0XHRcdHNpZGVFZmZlY3RQYXJ0cyA9IG5hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0c2lkZUVmZmVjdEVudGl0eVR5cGUgPSBzaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRzaWRlRWZmZWN0UGF0aCA9IGAke3NpZGVFZmZlY3RFbnRpdHlUeXBlfUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHMke1xuXHRcdFx0XHRzaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gYCMke3NpZGVFZmZlY3RQYXJ0c1sxXX1gIDogXCJcIlxuXHRcdFx0fWAsXG5cdFx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPVxuXHRcdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzaWRlRWZmZWN0RW50aXR5VHlwZSk/LltzaWRlRWZmZWN0UGF0aF07XG5cdFx0cmV0dXJuIHsgbmFtZSwgaW1tZWRpYXRlLCBzaWRlRWZmZWN0cywgc2lkZUVmZmVjdEVudGl0eVR5cGUgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgUHJvbWlzZSByZWxhdGVkIHRvIHRoZSByZXF1ZXN0ZWQgaW1tZWRpYXRlIHNpZGVFZmZlY3RzXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9tYW5hZ2VTaWRlRWZmZWN0c0Zyb21GaWVsZChmaWVsZDogQ29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNUb0V4ZWN1dGU6IFJlY29yZDxzdHJpbmcsIHsgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdOyBjb250ZXh0OiBDb250ZXh0IH0+ID0ge307XG5cdFx0XHRjb25zdCBhZGRTaWRlRWZmZWN0cyA9IChjb250ZXh0OiBDb250ZXh0LCBzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGlmIChzaWRlRWZmZWN0c1RvRXhlY3V0ZVtjb250ZXh0UGF0aF0pIHtcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1RvRXhlY3V0ZVtjb250ZXh0UGF0aF0uc2lkZUVmZmVjdHMucHVzaChzaWRlRWZmZWN0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBbc2lkZUVmZmVjdHNdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly9HZXQgSW1tZWRpYXRlIFNpZGVFZmZlY3RzXG5cdFx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzUHJvcGVydGllcyBvZiBPYmplY3QudmFsdWVzKHNpZGVFZmZlY3RzTWFwKS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0c1Byb3BlcnRpZXMpID0+IHNpZGVFZmZlY3RzUHJvcGVydGllcy5pbW1lZGlhdGUgPT09IHRydWVcblx0XHRcdCkpIHtcblx0XHRcdFx0Ly8gaWYgdGhpcyBTaWRlRWZmZWN0cyBpcyByZWNvcmRlZCBhcyBmYWlsZWQgU2lkZUVmZmVjdHMsIG5lZWQgdG8gcmVtb3ZlIGl0LlxuXHRcdFx0XHR0aGlzLnVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0XHRcdGFkZFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0LCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL1JlcGxheSBmYWlsZWQgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byB0aGUgdmlldyBvciBGaWVsZFxuXHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIFtmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpLCB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCldLmZpbHRlcihcblx0XHRcdFx0KGNvbnRleHQpOiBjb250ZXh0IGlzIENvbnRleHQgPT4gISFjb250ZXh0XG5cdFx0XHQpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGZvciAoY29uc3QgZmFpbGVkU2lkZUVmZmVjdCBvZiBmYWlsZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdGFkZFNpZGVFZmZlY3RzKGNvbnRleHQsIGZhaWxlZFNpZGVFZmZlY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c1RvRXhlY3V0ZSkubWFwKGFzeW5jIChzaWRlRWZmZWN0c1Byb3BlcnRpZXMpID0+XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0PyB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHNbMF0sIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHRcdFx0OiB0aGlzLnJlcXVlc3RNdWx0aXBsZVNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cywgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBtYW5hZ2luZyBGaWVsZCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyB0cmlnZ2VyQ2FsbGJhY2tzKG5hdmlnYXRpb246IHN0cmluZ1tdKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdG5hdmlnYXRpb24ubWFwKChuYXYpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVnaXN0ZXJDYWxsQmFjayA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRSZWdpc3RlcmVkQ2FsbGJhY2sobmF2KTtcblx0XHRcdFx0aWYgKHJlZ2lzdGVyQ2FsbEJhY2spIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVnaXN0ZXJDYWxsQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGRHcm91cC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBTaWRlRWZmZWN0cyBGaWVsZCBncm91cCBzaWRlRWZmZWN0cyB3aXRoIGl0cyBwcm9taXNlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIHRydWUgaWYgdGhlIFNpZGVFZmZlY3RzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3JlcXVlc3RGaWVsZEdyb3VwU2lkZUVmZmVjdHMoZmllbGRHcm91cFNpZGVFZmZlY3RzOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoZmllbGRHcm91cFNpZGVFZmZlY3RzLnNpZGVFZmZlY3RQcm9wZXJ0eSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5wcm9taXNlO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzYCwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgeyBzaWRlRWZmZWN0cywgY29udGV4dCwgbmFtZSB9ID0gZmllbGRHcm91cFNpZGVFZmZlY3RzLnNpZGVFZmZlY3RQcm9wZXJ0eTtcblx0XHRcdGlmICh0aGlzLmlzRmllbGRHcm91cFZhbGlkKG5hbWUsIGNvbnRleHQpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIGV4ZWN1dGluZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzYCwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIGEgZmllbGQgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCBjb250cm9sXG5cdCAqIEBwYXJhbSBzdWNjZXNzIFN0YXR1cyBvZiB0aGUgZmllbGQgdmFsaWRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhmaWVsZDogQ29udHJvbCwgc3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkKTtcblx0XHRPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCB7IG5hbWUsIGltbWVkaWF0ZSwgY29udGV4dCB9ID0gc2lkZUVmZmVjdHNNYXBba2V5XTtcblx0XHRcdGlmICghaW1tZWRpYXRlKSB7XG5cdFx0XHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KG5hbWUsIGNvbnRleHQpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcykge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0/LltmaWVsZC5nZXRJZCgpXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0gPSB7XG5cdFx0XHRcdFx0XHQuLi50aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0sXG5cdFx0XHRcdFx0XHQuLi57IFtmaWVsZC5nZXRJZCgpXTogdHJ1ZSB9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGVFZmZlY3Rz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
|
|
748
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9zaWRlRWZmZWN0c1NlcnZpY2UiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCIsIl9maWVsZEdyb3VwSW52YWxpZGl0eSIsIl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMiLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJlbnRpdHlUeXBlIiwiY29udHJvbFNpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbCIsImNvbnRyb2xJZCIsImlzQSIsImdldElkIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYmluZGluZ0NvbnRleHQiLCJzaWRlRWZmZWN0RW50aXR5VHlwZSIsImNvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWRzIiwiZ2V0RmllbGRHcm91cElkcyIsInZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJ2aWV3RW50aXR5U2V0IiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5U2V0cyIsImZpbmQiLCJuYW1lIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJmaWVsZFBhdGgiLCJnZXRUYXJnZXRQcm9wZXJ0eSIsImNvbnRleHQiLCJjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzaWRlRWZmZWN0c05hbWUiLCJvQ29udHJvbFNpZGVFZmZlY3RzIiwic291cmNlUHJvcGVydGllcyIsImluY2x1ZGVzIiwiaW1tZWRpYXRlIiwic2lkZUVmZmVjdHMiLCJmaWVsZENvbnRleHQiLCJtU2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWQiLCJfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAiLCJvQ29udGV4dCIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImlzRmllbGRHcm91cFZhbGlkIiwiaWQiLCJfZ2V0RmllbGRHcm91cEluZGV4IiwibGVuZ3RoIiwiZGF0YSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiZmllbGRHcm91cHNTaWRlRWZmZWN0cyIsInJlZHVjZSIsInJlc3VsdHMiLCJjb25jYXQiLCJnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsIl9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzIiwiY2F0Y2giLCJlcnJvciIsImNvbnRleHRQYXRoIiwiTG9nIiwiZGVidWciLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJncm91cElkIiwiZm5HZXRUYXJnZXRzIiwiaWdub3JlVHJpZ2dlckFjdGlvbnMiLCJmblRyaWdnZXJDYWxsYmFja3MiLCJ0cmlnZ2VyQ2FsbGJhY2tzIiwiYmluZCIsInRhcmdldHMiLCJ0cmlnZ2VyQWN0aW9uIiwidGFyZ2V0RW50aXRpZXMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwiaXNDb250cm9sU2lkZUVmZmVjdHMiLCJleGVjdXRlQWN0aW9uIiwidGhlbiIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiX2ZpbmRSZWxldmFudENvbnRleHQiLCJfY29udGV4dElzUmVsZXZhbnQiLCJnZXRDYW5vbmljYWxQYXRoIiwibW9kZWwiLCJkZXBlbmRlbnRCaW5kaW5ncyIsImdldERlcGVuZGVudEJpbmRpbmdzIiwiYmluZGluZyIsInByb3BlcnR5VGFyZ2V0IiwiZmV0Y2hVcGRhdGVEYXRhIiwiZ2V0UmVzdWx0IiwiZW50aXR5UGF0aCIsImVkaXRVcmwiLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwidGV4dCIsImNvbmZpcm1hdGlvbkRpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJjb250ZW50IiwiVGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsInB1c2giLCJmbnRyaWdnZXJDYWxsYmFja3MiLCJhY3Rpb24iLCJteVNldCIsInByb3BlcnR5IiwiYWRkIiwibmF2aWdhdGlvblByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzIiwiaXNOb3RBbHJlYWR5TGlzdGVkIiwiZXZlcnkiLCJtRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzRnVsbHlRdWFsaWZpZWROYW1lIiwicHJvbWlzZSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsInVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJyZWdpc3RyeUluZGV4Iiwic3RhcnRzV2l0aCIsInNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic2lkZUVmZmVjdFBhdGgiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNUb0V4ZWN1dGUiLCJhZGRTaWRlRWZmZWN0cyIsInZhbHVlcyIsImZhaWxlZFNpZGVFZmZlY3RzIiwiZmFpbGVkU2lkZUVmZmVjdCIsImUiLCJuYXZpZ2F0aW9uIiwibmF2IiwicmVnaXN0ZXJDYWxsQmFjayIsImdldFJlZ2lzdGVyZWRDYWxsYmFjayIsInN1Y2Nlc3MiLCJrZXkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaWRlRWZmZWN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSB7IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vUmFkaW9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxudHlwZSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRpbW1lZGlhdGU/OiBib29sZWFuO1xuXHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0gQmFzZVNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgJiB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlPjtcblxuZXhwb3J0IHR5cGUgTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgQmFzZVNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG50eXBlIEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdHNUeXBlW10+O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUgPSB7XG5cdHByb21pc2U6IFByb21pc2U8dW5rbm93bj47XG5cdHNpZGVFZmZlY3RQcm9wZXJ0eTogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlO1xufTtcblxuY29uc3QgSU1NRURJQVRFX1JFUVVFU1QgPSBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiO1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuU2lkZUVmZmVjdHNcIilcbmNsYXNzIFNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX3ZpZXchOiBGRVZpZXc7XG5cblx0cHJpdmF0ZSBfcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAhOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGU+O1xuXG5cdHByaXZhdGUgX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ITogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+O1xuXG5cdHByaXZhdGUgX3NpZGVFZmZlY3RzU2VydmljZSE6IFNpZGVFZmZlY3RzU2VydmljZTtcblxuXHRwcml2YXRlIF9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMhOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRwcml2YXRlIGlzQ29uZmlybWF0aW9uRGlhbG9nT3Blbj86IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl92aWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldykuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAgPSB7fTtcblx0XHR0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eSA9IHt9O1xuXHRcdHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBTaWRlRWZmZWN0cyBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBOYW1lIG9mIHRoZSBlbnRpdHkgd2hlcmUgdGhlIFNpZGVFZmZlY3RzIGNvbnRyb2wgd2lsbCBiZSByZWdpc3RlcmVkXG5cdCAqIEBwYXJhbSBjb250cm9sU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gcmVnaXN0ZXIuIEVuc3VyZSB0aGUgc291cmNlQ29udHJvbElkIG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgU0FQVUk1IGNvbnRyb2wgSUQuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YWRkQ29udHJvbFNpZGVFZmZlY3RzKGVudGl0eVR5cGU6IHN0cmluZywgY29udHJvbFNpZGVFZmZlY3RzOiBPbWl0PENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsIFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+KTogdm9pZCB7XG5cdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmFkZENvbnRyb2xTaWRlRWZmZWN0cyhlbnRpdHlUeXBlLCBjb250cm9sU2lkZUVmZmVjdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgU2lkZUVmZmVjdHMgY3JlYXRlZCBieSBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250cm9sIFNBUFVJNSBDb250cm9sXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKGNvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sSWQgPSBjb250cm9sLmlzQT8uKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKSAmJiBjb250cm9sLmdldElkKCk7XG5cblx0XHRpZiAoY29udHJvbElkKSB7XG5cdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UucmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKGNvbnRyb2xJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgb24gd2hpY2ggU2lkZUVmZmVjdHMgY2FuIGJlIHJlcXVlc3RlZC5cblx0ICogVGhlIGNvcnJlY3Qgb25lIG11c3QgaGF2ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXIgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEluaXRpYWwgYmluZGluZyBjb250ZXh0XG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0RW50aXR5VHlwZSBFbnRpdHlUeXBlIG9mIHRoZSBzaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dCBvciB1bmRlZmluZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMoYmluZGluZ0NvbnRleHQ6IENvbnRleHQsIHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29udGV4dEZvclNpZGVFZmZlY3RzID0gYmluZGluZ0NvbnRleHQsXG5cdFx0XHRlbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoc2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IGVudGl0eVR5cGUpIHtcblx0XHRcdGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGlmIChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0Y29udGV4dEZvclNpZGVFZmZlY3RzID0gY29udGV4dEZvclNpZGVFZmZlY3RzLmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdFx0XHRpZiAoY29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRcdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRleHRGb3JTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgbWFwIGZvciBhIGZpZWxkXG5cdCAqIFRoZXNlIFNpZGVFZmZlY3RzIGFyZVxuXHQgKiAtIGxpc3RlZCBpbnRvIEZpZWxkR3JvdXBJZHMgKGNvbWluZyBmcm9tIGFuIE9EYXRhIFNlcnZpY2UpXG5cdCAqIC0gZ2VuZXJhdGVkIGJ5IGEgY29udHJvbCBvciBjb250cm9scyBhbmQgdGhhdCBjb25maWd1cmUgdGhpcyBmaWVsZCBhcyBTb3VyY2VQcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGQgRmllbGQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBtYXBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkOiBDb250cm9sKTogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0bGV0IHNpZGVFZmZlY3RzTWFwOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0ge307XG5cdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IGZpZWxkLmdldEZpZWxkR3JvdXBJZHMoKSxcblx0XHRcdHZpZXdFbnRpdHlTZXRTZXROYW1lID0gKHRoaXMuX3ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncykuZW50aXR5U2V0LFxuXHRcdFx0dmlld0VudGl0eVNldCA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKS5lbnRpdHlTZXRzLmZpbmQoKGVudGl0eVNldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZW50aXR5U2V0Lm5hbWUgPT09IHZpZXdFbnRpdHlTZXRTZXROYW1lO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlXG5cdFx0c2lkZUVmZmVjdHNNYXAgPSB0aGlzLmdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0XHRmaWVsZEdyb3VwSWRzLFxuXHRcdFx0ZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZFxuXHRcdCkgYXMgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRcdC8vIFNpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGNvbnRyb2wocylcblx0XHRpZiAodmlld0VudGl0eVNldFNldE5hbWUgJiYgdmlld0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgdmlld0VudGl0eVR5cGUgPSB2aWV3RW50aXR5U2V0LmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRmaWVsZFBhdGggPSB0aGlzLmdldFRhcmdldFByb3BlcnR5KGZpZWxkKSxcblx0XHRcdFx0Y29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCwgdmlld0VudGl0eVR5cGUpO1xuXG5cdFx0XHRpZiAoZmllbGRQYXRoICYmIGNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRDb250cm9sRW50aXR5U2lkZUVmZmVjdHModmlld0VudGl0eVR5cGUpO1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlKS5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvQ29udHJvbFNpZGVFZmZlY3RzID0gY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZVtzaWRlRWZmZWN0c05hbWVdO1xuXHRcdFx0XHRcdGlmIChvQ29udHJvbFNpZGVFZmZlY3RzLnNvdXJjZVByb3BlcnRpZXMuaW5jbHVkZXMoZmllbGRQYXRoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IGAke3NpZGVFZmZlY3RzTmFtZX06OiR7dmlld0VudGl0eVR5cGV9YDtcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzTWFwW25hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvQ29udHJvbFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBjb250ZXh0XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzaWRlRWZmZWN0cyBtYXAgZm9yIGZpZWxkR3JvdXBzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkcyBGaWVsZCBncm91cCBpZHNcblx0ICogQHBhcmFtIGZpZWxkQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdGZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdLFxuXHRcdGZpZWxkQ29udGV4dD86IENvbnRleHQgfCBudWxsXG5cdCk6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGZpZWxkR3JvdXBJZHMuZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRjb25zdCB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH0gPSB0aGlzLl9nZXRTaWRlRWZmZWN0c1Byb3BlcnR5Rm9yRmllbGRHcm91cChmaWVsZEdyb3VwSWQpO1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBmaWVsZENvbnRleHQgPyAodGhpcy5nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMoZmllbGRDb250ZXh0LCBzaWRlRWZmZWN0RW50aXR5VHlwZSkgYXMgQ29udGV4dCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMgJiYgKCFmaWVsZENvbnRleHQgfHwgKGZpZWxkQ29udGV4dCAmJiBvQ29udGV4dCkpKSB7XG5cdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGltbWVkaWF0ZSxcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoZmllbGRDb250ZXh0KSB7XG5cdFx0XHRcdFx0KG1TaWRlRWZmZWN0c01hcFtuYW1lXSBhcyBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpLmNvbnRleHQgPSBvQ29udGV4dCE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTogdm9pZCB7XG5cdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHkgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dCBvciB1bmRlZmluZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRpc0ZpZWxkR3JvdXBWYWxpZChmaWVsZEdyb3VwSWQ6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KGZpZWxkR3JvdXBJZCwgY29udGV4dCk7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5W2lkXSA/PyB7fSkubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGF0aXZlIHRhcmdldCBwcm9wZXJ0eSByZWxhdGVkIHRvIHRoZSBGaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgUmVsYXRpdmUgdGFyZ2V0IHByb3BlcnR5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0VGFyZ2V0UHJvcGVydHkoZmllbGQ6IENvbnRyb2wpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGZpZWxkUGF0aCA9IGZpZWxkLmRhdGEoXCJzb3VyY2VQYXRoXCIpIGFzIHN0cmluZztcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgdmlld0JpbmRpbmdQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgdmlld01ldGFNb2RlbFBhdGggPSB2aWV3QmluZGluZ1BhdGggPyBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgodmlld0JpbmRpbmdQYXRoKX0vYCA6IFwiXCI7XG5cdFx0cmV0dXJuIGZpZWxkUGF0aD8ucmVwbGFjZSh2aWV3TWV0YU1vZGVsUGF0aCwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ2FjaGVzIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBGaWVsZEdyb3VwIGlzIHVuZm9jdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBldmVudCB0aGF0IGNvbWVzIGZyb20gYSBmaWVsZCBjaGFuZ2Vcblx0ICogQHBhcmFtIGZpZWxkVmFsaWRpdHlcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50IHwgTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgUmFkaW9CdXR0b25Hcm91cCRTZWxlY3RFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIFVJNUV2ZW50PHt9LCBDb250cm9sPikuZ2V0U291cmNlKCk7XG5cdFx0dGhpcy5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhmaWVsZCwgZmllbGRWYWxpZGl0eSk7XG5cdFx0aWYgKCFmaWVsZFZhbGlkaXR5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkKTtcblxuXHRcdC8vIHJlZ2lzdGVyIGZpZWxkIGdyb3VwIFNpZGVFZmZlY3RzXG5cdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApXG5cdFx0XHQuZmlsdGVyKChzaWRlRWZmZWN0c05hbWUpID0+IHNpZGVFZmZlY3RzTWFwW3NpZGVFZmZlY3RzTmFtZV0uaW1tZWRpYXRlICE9PSB0cnVlKVxuXHRcdFx0LmZvckVhY2goKHNpZGVFZmZlY3RzTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgPSBzaWRlRWZmZWN0c01hcFtzaWRlRWZmZWN0c05hbWVdO1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllcywgZmllbGRHcm91cFByZVJlcXVpc2l0ZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSB3b3JrZmxvdyBmb3IgU2lkZUVmZmVjdHMgd2l0aCByZWxhdGVkIGNoYW5nZXMgdG8gYSBmaWVsZFxuXHQgKiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhcmUgbWFuYWdlZDpcblx0ICogIC0gUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWRcblx0ICogIC0gRXhlY3V0ZTogdHJpZ2dlcnMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGlmIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZXZlbnQgaXMgZnVsZmlsbGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0gZmllbGRWYWxpZGl0eVxuXHQgKiBAcGFyYW0gZmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24gSWYgdHJ1ZSB0aGVuIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlZ2lzdGVyZWQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHJlZ2lzdHJhdGlvbiBvZiBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgYW5kIHRyaWdnZXJpbmcgbmVlZHMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LlxuXHQgKiBAcmV0dXJucyAgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50IHwgTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgUmFkaW9CdXR0b25Hcm91cCRTZWxlY3RFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+LFxuXHRcdHNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbiA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIFVJNUV2ZW50PHt9LCBDb250cm9sPikuZ2V0U291cmNlKCk7XG5cdFx0aWYgKCFza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24pIHtcblx0XHRcdHRoaXMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChldmVudCwgZmllbGRWYWxpZGl0eSwgZmllbGRHcm91cFByZVJlcXVpc2l0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdFx0aWYgKCFmaWVsZFZhbGlkaXR5KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX21hbmFnZVNpZGVFZmZlY3RzRnJvbUZpZWxkKGZpZWxkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgU2lkZUVmZmVjdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiBQcm9taXNlPHZvaWQgfCB2b2lkW10+IHtcblx0XHRjb25zdCBmaWVsZCA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmllbGRHcm91cElkczogc3RyaW5nW10gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpID8/IFtdLFxuXHRcdFx0ZmllbGRHcm91cHNTaWRlRWZmZWN0cyA9IGZpZWxkR3JvdXBJZHMucmVkdWNlKChyZXN1bHRzOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSwgZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzLmNvbmNhdCh0aGlzLmdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkKSk7XG5cdFx0XHR9LCBbXSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRmaWVsZEdyb3Vwc1NpZGVFZmZlY3RzLm1hcChhc3luYyAoZmllbGRHcm91cFNpZGVFZmZlY3RzKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0cyk7XG5cdFx0XHR9KVxuXHRcdCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgJHtjb250ZXh0UGF0aH1gLCBlcnJvcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWRcblx0ICogQHBhcmFtIGZuR2V0VGFyZ2V0cyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBnaXZlIHVzIHRoZSB0YXJnZXRzIGFuZCBhY3Rpb25zIGlmIGl0IHdhcyBjb21pbmcgdGhyb3VnaCBzb21lIHNwZWNpZmljIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gaWdub3JlVHJpZ2dlckFjdGlvbnMgSWYgdHJ1ZSwgd2UgZG8gbm90IHRyaWdnZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBzaWRlIGVmZmVjdFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGUsXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRncm91cElkPzogc3RyaW5nLFxuXHRcdGZuR2V0VGFyZ2V0cz86IChzaWRlRWZmZWN0c0RlZjogU2lkZUVmZmVjdHNUeXBlKSA9PiB7IHRhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W107IHRyaWdnZXJBY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuXHRcdGlnbm9yZVRyaWdnZXJBY3Rpb25zID0gZmFsc2Vcblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgZm5UcmlnZ2VyQ2FsbGJhY2tzID0gdGhpcy50cmlnZ2VyQ2FsbGJhY2tzLmJpbmQodGhpcyk7XG5cdFx0Y29uc3QgeyB0YXJnZXRzLCB0cmlnZ2VyQWN0aW9uIH0gPSBmbkdldFRhcmdldHNcblx0XHRcdD8gZm5HZXRUYXJnZXRzKHNpZGVFZmZlY3RzKVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0dGFyZ2V0czogWy4uLihzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcyA/PyBbXSksIC4uLihzaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID8/IFtdKV0sXG5cdFx0XHRcdFx0dHJpZ2dlckFjdGlvbjogIXRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5pc0NvbnRyb2xTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cykgPyBzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9uIDogdW5kZWZpbmVkXG5cdFx0XHQgIH07XG5cdFx0aWYgKHRyaWdnZXJBY3Rpb24gJiYgIWlnbm9yZVRyaWdnZXJBY3Rpb25zKSB7XG5cdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbih0cmlnZ2VyQWN0aW9uLCBjb250ZXh0LCBncm91cElkKTtcblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2Vcblx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyh0YXJnZXRzLCBjb250ZXh0LCBncm91cElkKVxuXHRcdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiBhc3luYygpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm5UcmlnZ2VyQ2FsbGJhY2tzKHNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzPy5tYXAoKHRhcmdldCkgPT4gdGFyZ2V0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSB8fCBbXSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RzXSwgY29udGV4dCk7XG5cdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgc2lkZUVmZmVjdCBldmVudC5cblx0ICpcblx0ICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgdG8gZXhlY3V0ZSB0aGUgc2lkZSBlZmZlY3Qgb24gdGhlIHBhZ2UncyBjb250ZXh0LCBidXQgcGFnZXMgKGxpa2UgdGhlIExSKSBtaWdodCBvdmVycmlkZSB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50TmFtZSBTaWRlRWZmZWN0cyBldmVudCB3aGljaCB3YXMgdHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGZvciB3aGljaCB0aGlzIGV2ZW50IHdhcyB0cmlnZ2VyZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0XG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JFdmVudChldmVudE5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRpZiAodGhpcy5pc0RhdGFQYXRoUmVsZXZhbnQocGF0aCkpIHtcblx0XHRcdC8vIHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBTaWRlRWZmZWN0cyBTZXJ2aWNlXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5fZmluZFJlbGV2YW50Q29udGV4dChwYXRoLCB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JFdmVudChldmVudE5hbWUsIGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBnaXZlbiBkYXRhIHBhdGggaXMgc2hvd24vcmVsZXZhbnQgb24gdGhlIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBwYXRoIGlzIHNob3duIG9uIHRoZSBVSVxuXHQgKi9cblx0aXNEYXRhUGF0aFJlbGV2YW50KHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgY29udGV4dCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiAhIXRoaXMuX2ZpbmRSZWxldmFudENvbnRleHQocGF0aCwgY29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgZ2l2ZW4gY29udGV4dCBmaXRzIHRvIGEgZ2l2ZW4gcGF0aC5cblx0ICpcblx0ICogVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIGJvdGggdGhlIG5hdmlnYXRpb24gcGF0aCBhbmQgdGhlIGNhbm9uaWNhbCBwYXRoLlxuXHQgKiBXZSBhbHNvIGNoZWNrIGRlcGVuZGVudCBwcm9wZXJ0eSBiaW5kaW5ncyBpZiB0aGV5IGZvbGxvdyBhIG5hdmlnYXRpb24gcGF0aCB0byB0aGUgZ2l2ZW4gcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbnRleHQgZml0cyB0byB0aGUgZ2l2ZW4gcGF0aFxuXHQgKi9cblx0X2NvbnRleHRJc1JlbGV2YW50KHBhdGg6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb250ZXh0Py5nZXRQYXRoKCkgPT09IHBhdGggfHwgY29udGV4dD8uZ2V0Q2Fub25pY2FsUGF0aCgpID09PSBwYXRoKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBjaGVjayBpZiBhIGRlcGVuZGVudCBiaW5kaW5nIGZvbGxvd3MgYSBuYXZpZ2F0aW9uIHBhdGggYW5kIGZpdHMgdG8gdGhpcyBwYXRoXG5cdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZGVwZW5kZW50QmluZGluZ3MgPSBtb2RlbC5nZXREZXBlbmRlbnRCaW5kaW5ncyhjb250ZXh0KTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgZGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0ID0gbWV0YU1vZGVsLmZldGNoVXBkYXRlRGF0YShiaW5kaW5nLmdldFBhdGgoKSA/PyBcIlwiLCBjb250ZXh0KS5nZXRSZXN1bHQoKTtcblx0XHRcdGlmIChwcm9wZXJ0eVRhcmdldD8uZW50aXR5UGF0aCA9PT0gcGF0aCB8fCBcIi9cIiArIHByb3BlcnR5VGFyZ2V0Py5lZGl0VXJsID09PSBwYXRoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGNvbnRleHQgZm9yIGEgZ2l2ZW4gcGF0aCBieSBjaGVja2luZyBkZXBlbmRlbnQgYmluZGluZ3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIHBhcmVudCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIENvbnRleHQgaWYgZm91bmQsIG90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZFxuXHQgKi9cblx0X2ZpbmRSZWxldmFudENvbnRleHQocGF0aDogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dDtcblx0XHR9XG5cblx0XHRjb25zdCBkZXBlbmRlbnRCaW5kaW5ncyA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXREZXBlbmRlbnRCaW5kaW5ncyhjb250ZXh0KTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgZGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdGlmIChiaW5kaW5nLmlzQTxPRGF0YUNvbnRleHRCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBiaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpKSkge1xuXHRcdFx0XHRcdHJldHVybiBiaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Y29uc3QgbGlzdENvbnRleHRzID0gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBsaXN0Q29udGV4dCBvZiBsaXN0Q29udGV4dHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgbGlzdENvbnRleHQpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGlzdENvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IHRvIGJlIHNob3duIGZvciB1c2VyIHRvIGluZGljYXRlIGRhdGEgcmVmcmVzaC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy4gUGFnZXMgKGxpa2UgdGhlIExSKSBtaWdodCBvdmVycmlkZSB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHJldHVybnMgVGV4dCB0byBiZSBzaG93biB0byB0aGUgdXNlciBpbiBjYXNlIG9mIGEgZGF0YSByZWZyZXNoXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXREYXRhUmVmcmVzaFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfU0VSVkVSX0VWRU5UU19ORVdfREFUQV9JVEVNXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5vdGlmeSB0aGUgdXNlciB0aGF0IGRhdGEgd2FzIHJlZnJlc2hlZC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy5cblx0ICovXG5cblx0bm90aWZ5RGF0YVJlZnJlc2goKTogdm9pZCB7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkuX3NpZGVFZmZlY3RzLmdldERhdGFSZWZyZXNoVGV4dCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc2sgdGhlIHVzZXIgZm9yIGNvbmZpcm1hdGlvbiBvZiBhIGRhdGEgcmVmcmVzaC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGlmIHRoZSB1c2VyIGNvbmZpcm1zIGFuZCByZWplY3RzIGlmIHRoZSB1c2VyIGNhbmNlbHMuXG5cdCAqL1xuXHRhc3luYyBjb25maXJtRGF0YVJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3Blbikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRoaXMuZ2V0RGF0YVJlZnJlc2hUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0XHRjb25zdCBjb25maXJtYXRpb25EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdFx0Y29udGVudDogbmV3IFRleHQoeyB0ZXh0OiB0ZXh0IH0pLFxuXHRcdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGFmdGVyQ2xvc2U6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3BlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRcdFx0dGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4gPSB0cnVlO1xuXHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cub3BlbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgbXVsdGlwbGUgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwIGlkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXSwgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBwcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG11bHRpU2lkZUVmZmVjdHMucmVkdWNlKChhY3Rpb25zLCBzaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdEFjdGlvbiA9IChzaWRlRWZmZWN0cyBhcyBPRGF0YVNpZGVFZmZlY3RzVHlwZSkudHJpZ2dlckFjdGlvbjtcblx0XHRcdGlmIChzaWRlRWZmZWN0QWN0aW9uKSB7XG5cdFx0XHRcdGFjdGlvbnMucHVzaChzaWRlRWZmZWN0QWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25zO1xuXHRcdH0sIFtdIGFzIHN0cmluZ1tdKTtcblx0XHRjb25zdCBmbnRyaWdnZXJDYWxsYmFja3MgPSB0aGlzLnRyaWdnZXJDYWxsYmFja3MuYmluZCh0aGlzKTtcblxuXHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKGFjdGlvbiwgY29udGV4dCwgZ3JvdXBJZCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0cyBvZiBtdWx0aVNpZGVFZmZlY3RzKSB7XG5cdFx0XHRwcm9wZXJ0aWVzID0gKHNpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPz8gW10pLnJlZHVjZSgobXlTZXQsIHByb3BlcnR5KSA9PiBteVNldC5hZGQocHJvcGVydHkpLCBwcm9wZXJ0aWVzKTtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gKHNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzID8/IFtdKS5yZWR1Y2UoXG5cdFx0XHRcdChteVNldCwgbmF2aWdhdGlvblByb3BlcnR5KSA9PiBteVNldC5hZGQobmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC4uLkFycmF5LmZyb20ocHJvcGVydGllcyksXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShuYXZpZ2F0aW9uUHJvcGVydGllcykubWFwKChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHkgfTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRncm91cElkXG5cdFx0XHQpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiBhc3luYygpIHtcblx0XHRcdFx0cmV0dXJuIGZudHJpZ2dlckNhbGxiYWNrcyhBcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMobXVsdGlTaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgcmVxdWVzdHMgdGhhdCBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdHJldHVybiB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0c1xuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJldHJpZ2dlcmVkIG9uIHRoZSBuZXh0IHJlcXVlc3Qgb24gdGhlIHNhbWUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG11bHRpU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXSwgY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0cyBvZiBtdWx0aVNpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBpc05vdEFscmVhZHlMaXN0ZWQgPSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0XHQobUZhaWxlZFNpZGVFZmZlY3RzKSA9PiBzaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWUgIT09IG1GYWlsZWRTaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdCk7XG5cdFx0XHRpZiAoaXNOb3RBbHJlYWR5TGlzdGVkKSB7XG5cdFx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0ucHVzaChzaWRlRWZmZWN0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgaW4gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMgZm9yIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIENvbnRleHQgcGF0aCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0c0ZvckFDb250ZXh0KGNvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWUgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHR1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cFxuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZCB3aGVuIGV2ZW50IHJlbGF0ZWQgdG8gdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBpcyBmaXJlZC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gZnVsbGZpbCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBTaWRlRWZmZWN0c1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXM6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZSwgZmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChzaWRlRWZmZWN0c1Byb3BlcnRpZXMubmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdGlmICghdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0gPSB7XG5cdFx0XHRcdHByb21pc2U6IGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgPz8gUHJvbWlzZS5yZXNvbHZlKCksXG5cdFx0XHRcdHNpZGVFZmZlY3RQcm9wZXJ0eTogc2lkZUVmZmVjdHNQcm9wZXJ0aWVzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiBhIEZpZWxkR3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgU2lkZUVmZmVjdHMgcHJvcGVydGllc1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHR1bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250ZXh0LCBuYW1lIH0gPSBzaWRlRWZmZWN0c1Byb3BlcnRpZXM7XG5cdFx0Y29uc3QgaWQgPSB0aGlzLl9nZXRGaWVsZEdyb3VwSW5kZXgobmFtZSwgY29udGV4dCk7XG5cdFx0ZGVsZXRlIHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWdpc3RlcmVkIFNpZGVFZmZlY3RzIGludG8gdGhlIHF1ZXVlIGZvciBhIGZpZWxkIGdyb3VwIGlkLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIEZpZWxkIGdyb3VwIGlkXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgYW5kIHRoZWlyIHByb21pc2Vcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKTogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzID0gW107XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyeUluZGV4IG9mIE9iamVjdC5rZXlzKHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwKSkge1xuXHRcdFx0aWYgKHJlZ2lzdHJ5SW5kZXguc3RhcnRzV2l0aChgJHtmaWVsZEdyb3VwSWR9X2ApKSB7XG5cdFx0XHRcdHNpZGVFZmZlY3RzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbcmVnaXN0cnlJbmRleF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhIHN0YXR1cyBpbmRleC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZCBUaGUgZmllbGQgZ3JvdXAgaWRcblx0ICogQHBhcmFtIGNvbnRleHQgU0FQVUk1IENvbnRleHRcblx0ICogQHJldHVybnMgSW5kZXhcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkR3JvdXBJbmRleChmaWVsZEdyb3VwSWQ6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAke2ZpZWxkR3JvdXBJZH1fJHtjb250ZXh0LmdldFBhdGgoKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgc2lkZUVmZmVjdHMgcHJvcGVydGllcyBmcm9tIGEgZmllbGQgZ3JvdXAgaWRcblx0ICogVGhlIHByb3BlcnRpZXMgYXJlOlxuXHQgKiAgLSBuYW1lXG5cdCAqICAtIHNpZGVFZmZlY3RzIGRlZmluaXRpb25cblx0ICogIC0gc2lkZUVmZmVjdHMgZW50aXR5IHR5cGVcblx0ICogIC0gaW1tZWRpYXRlIHNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgX2dldFNpZGVFZmZlY3RzUHJvcGVydHlGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKToge1xuXHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGltbWVkaWF0ZTogYm9vbGVhbjtcblx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQ7XG5cdH0ge1xuXHRcdC8qKlxuXHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHQgKiBiZSBkZWZlcnJlZCAob24gZmllbGQgZ3JvdXAgZm9jdXMgb3V0KVxuXHRcdCAqXG5cdFx0ICovXG5cdFx0Y29uc3QgaW1tZWRpYXRlID0gZmllbGRHcm91cElkLmluY2x1ZGVzKElNTUVESUFURV9SRVFVRVNUKSxcblx0XHRcdG5hbWUgPSBmaWVsZEdyb3VwSWQucmVwbGFjZShJTU1FRElBVEVfUkVRVUVTVCwgXCJcIiksXG5cdFx0XHRzaWRlRWZmZWN0UGFydHMgPSBuYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlID0gc2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0c2lkZUVmZmVjdFBhdGggPSBgJHtzaWRlRWZmZWN0RW50aXR5VHlwZX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzJHtcblx0XHRcdFx0c2lkZUVmZmVjdFBhcnRzLmxlbmd0aCA9PT0gMiA/IGAjJHtzaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdH1gLFxuXHRcdFx0c2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoc2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc2lkZUVmZmVjdFBhdGhdO1xuXHRcdHJldHVybiB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH07XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVsYXRlZCB0byB0aGUgcmVxdWVzdGVkIGltbWVkaWF0ZSBzaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQoZmllbGQ6IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzVG9FeGVjdXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXTsgY29udGV4dDogQ29udGV4dCB9PiA9IHt9O1xuXHRcdFx0Y29uc3QgYWRkU2lkZUVmZmVjdHMgPSAoY29udGV4dDogQ29udGV4dCwgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoc2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdLnNpZGVFZmZlY3RzLnB1c2goc2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzVG9FeGVjdXRlW2NvbnRleHRQYXRoXSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogW3NpZGVFZmZlY3RzXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdC8vR2V0IEltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHRcdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgb2YgT2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c01hcCkuZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PiBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuaW1tZWRpYXRlID09PSB0cnVlXG5cdFx0XHQpKSB7XG5cdFx0XHRcdC8vIGlmIHRoaXMgU2lkZUVmZmVjdHMgaXMgcmVjb3JkZWQgYXMgZmFpbGVkIFNpZGVFZmZlY3RzLCBuZWVkIHRvIHJlbW92ZSBpdC5cblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9SZXBsYXkgZmFpbGVkIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhlIHZpZXcgb3IgRmllbGRcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBbZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSwgdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpXS5maWx0ZXIoXG5cdFx0XHRcdChjb250ZXh0KTogY29udGV4dCBpcyBDb250ZXh0ID0+ICEhY29udGV4dFxuXHRcdFx0KSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBmYWlsZWRTaWRlRWZmZWN0cyA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0XHRcdHRoaXMudW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZhaWxlZFNpZGVFZmZlY3Qgb2YgZmFpbGVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhjb250ZXh0LCBmYWlsZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNUb0V4ZWN1dGUpLm1hcChhc3luYyAoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHRcdD8gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzWzBdLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dClcblx0XHRcdFx0XHRcdDogdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgbWFuYWdpbmcgRmllbGQgU2lkZUVmZmVjdHNgLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgdHJpZ2dlckNhbGxiYWNrcyhuYXZpZ2F0aW9uOiBzdHJpbmdbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRuYXZpZ2F0aW9uLm1hcCgobmF2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdGVyQ2FsbEJhY2sgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0UmVnaXN0ZXJlZENhbGxiYWNrKG5hdik7XG5cdFx0XHRcdGlmIChyZWdpc3RlckNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZ2lzdGVyQ2FsbEJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIGZpZWxkR3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwU2lkZUVmZmVjdHMgRmllbGQgZ3JvdXAgc2lkZUVmZmVjdHMgd2l0aCBpdHMgcHJvbWlzZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyB0cnVlIGlmIHRoZSBTaWRlRWZmZWN0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy51bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBmaWVsZEdyb3VwU2lkZUVmZmVjdHMucHJvbWlzZTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgc2lkZUVmZmVjdHMsIGNvbnRleHQsIG5hbWUgfSA9IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRpZiAodGhpcy5pc0ZpZWxkR3JvdXBWYWxpZChuYW1lLCBjb250ZXh0KSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBleGVjdXRpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBhIGZpZWxkIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgY29udHJvbFxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdGF0dXMgb2YgdGhlIGZpZWxkIHZhbGlkYXRpb25cblx0ICovXG5cdHByaXZhdGUgX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQ6IENvbnRyb2wsIHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIGNvbnRleHQgfSA9IHNpZGVFZmZlY3RzTWFwW2tleV07XG5cdFx0XHRpZiAoIWltbWVkaWF0ZSkge1xuXHRcdFx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdPy5bZmllbGQuZ2V0SWQoKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdID0ge1xuXHRcdFx0XHRcdFx0Li4udGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdLFxuXHRcdFx0XHRcdFx0Li4ueyBbZmllbGQuZ2V0SWQoKV06IHRydWUgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQW1EQSxNQUFNQSxpQkFBaUIsR0FBRyxvQkFBb0I7RUFBQyxJQUV6Q0Ms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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
|
+
import { defineUI5Class, extensible, finalExtension, methodOverride, privateExtension, publicExtension } from "sap/fe/base/ClassSupport";
|
|
2
3
|
import type { FEView } from "sap/fe/core/BaseController";
|
|
3
4
|
import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
|
|
4
5
|
import type {
|
|
@@ -26,7 +27,6 @@ import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
|
26
27
|
import CommonUtils from "../CommonUtils";
|
|
27
28
|
import type PageController from "../PageController";
|
|
28
29
|
import type { BaseManifestSettings } from "../converters/ManifestSettings";
|
|
29
|
-
import { defineUI5Class, extensible, finalExtension, methodOverride, privateExtension, publicExtension } from "../helpers/ClassSupport";
|
|
30
30
|
|
|
31
31
|
type BaseSideEffectPropertyType = {
|
|
32
32
|
name: string;
|
|
@@ -66,6 +66,10 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
66
66
|
|
|
67
67
|
private isConfirmationDialogOpen?: boolean;
|
|
68
68
|
|
|
69
|
+
constructor() {
|
|
70
|
+
super();
|
|
71
|
+
}
|
|
72
|
+
|
|
69
73
|
@methodOverride()
|
|
70
74
|
onInit(): void {
|
|
71
75
|
this._view = this.base.getView();
|
|
@@ -429,13 +433,29 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
429
433
|
* Checks if a given context fits to a given path.
|
|
430
434
|
*
|
|
431
435
|
* This is done by checking both the navigation path and the canonical path.
|
|
436
|
+
* We also check dependent property bindings if they follow a navigation path to the given path.
|
|
432
437
|
*
|
|
433
438
|
* @param path The path to be checked
|
|
434
439
|
* @param context The context to be checked
|
|
435
440
|
* @returns True if the context fits to the given path
|
|
436
441
|
*/
|
|
437
442
|
_contextIsRelevant(path: string, context: Context): boolean {
|
|
438
|
-
|
|
443
|
+
if (context?.getPath() === path || context?.getCanonicalPath() === path) {
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// check if a dependent binding follows a navigation path and fits to this path
|
|
448
|
+
const model = context.getModel();
|
|
449
|
+
const metaModel = model.getMetaModel();
|
|
450
|
+
const dependentBindings = model.getDependentBindings(context);
|
|
451
|
+
for (const binding of dependentBindings) {
|
|
452
|
+
const propertyTarget = metaModel.fetchUpdateData(binding.getPath() ?? "", context).getResult();
|
|
453
|
+
if (propertyTarget?.entityPath === path || "/" + propertyTarget?.editUrl === path) {
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
return false;
|
|
439
459
|
}
|
|
440
460
|
|
|
441
461
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/
|
|
5
|
+
sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/controllerextensions/BaseControllerExtension"], function (ClassSupport, BaseControllerExtension) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _class, _class2;
|
|
@@ -28,4 +28,4 @@ sap.ui.define(["sap/fe/core/controllerextensions/BaseControllerExtension", "sap/
|
|
|
28
28
|
_exports = Telemetry;
|
|
29
29
|
return _exports;
|
|
30
30
|
}, false);
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZWxlbWV0cnkiLCJkZWZpbmVVSTVDbGFzcyIsInB1YmxpY0V4dGVuc2lvbiIsInN0b3JlQWN0aW9uIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsIkJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUZWxlbWV0cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFRlbGVtZXRyeUV2ZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5UZWxlbWV0cnlcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeSBleHRlbmRzIEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0YmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgc3RvcmVBY3Rpb24oYWN0aW9uRGVmaW5pdGlvbjogVGVsZW1ldHJ5RXZlbnRzKTogdm9pZCB7XG5cdFx0dGhpcy5iYXNlXG5cdFx0XHQuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRUZWxlbWV0cnlTZXJ2aWNlKClcblx0XHRcdC5zdG9yZUFjdGlvbihhY3Rpb25EZWZpbml0aW9uLCAodGhpcy5iYXNlLmdldFZpZXcoKT8uZ2V0Vmlld0RhdGEoKSBhcyB7IGNvbnZlcnRlclR5cGU6IHN0cmluZyB9KS5jb252ZXJ0ZXJUeXBlIGFzIFRlbXBsYXRlVHlwZSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7TUFPcUJBLFNBQVMsV0FEN0JDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxVQUkzREMsZUFBZSxFQUFFO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUEsT0FDWEMsV0FBVyxHQURsQixxQkFDbUJDLGdCQUFpQyxFQUFRO01BQUE7TUFDM0QsSUFBSSxDQUFDQyxJQUFJLENBQ1BDLGVBQWUsRUFBRSxDQUNqQkMsbUJBQW1CLEVBQUUsQ0FDckJKLFdBQVcsQ0FBQ0MsZ0JBQWdCLEVBQUUsdUJBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUNHLE9BQU8sRUFBRSx1REFBbkIsbUJBQXFCQyxXQUFXLEVBQUUsRUFBK0JDLGFBQWEsQ0FBaUI7SUFDakksQ0FBQztJQUFBO0VBQUEsRUFUcUNDLHVCQUF1QjtFQUFBO0VBQUE7QUFBQSJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { defineUI5Class, publicExtension } from "sap/fe/base/ClassSupport";
|
|
1
2
|
import type PageController from "sap/fe/core/PageController";
|
|
2
3
|
import BaseControllerExtension from "sap/fe/core/controllerextensions/BaseControllerExtension";
|
|
3
4
|
import type { TemplateType } from "sap/fe/core/converters/ManifestSettings";
|
|
4
|
-
import { defineUI5Class, publicExtension } from "sap/fe/core/helpers/ClassSupport";
|
|
5
5
|
import type { TelemetryEvents } from "sap/fe/core/services/TelemetryServiceFactory";
|
|
6
6
|
|
|
7
7
|
@defineUI5Class("sap.fe.core.controllerextensions.Telemetry")
|