@sapui5/sap.fe.core 1.131.0 → 1.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +17 -23
- package/src/sap/fe/core/AppComponent.js +74 -36
- package/src/sap/fe/core/AppComponent.ts +70 -3
- package/src/sap/fe/core/AppStateHandler.js +44 -13
- package/src/sap/fe/core/AppStateHandler.ts +38 -0
- package/src/sap/fe/core/BaseController.js +3 -3
- package/src/sap/fe/core/CommonUtils.js +30 -37
- package/src/sap/fe/core/CommonUtils.ts +15 -13
- package/src/sap/fe/core/ExtensionAPI.js +29 -34
- package/src/sap/fe/core/ExtensionAPI.ts +3 -0
- package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
- package/src/sap/fe/core/PageController.js +40 -31
- package/src/sap/fe/core/PageController.ts +14 -1
- package/src/sap/fe/core/ResourceModel.js +4 -4
- package/src/sap/fe/core/ReuseComponent.js +27 -13
- package/src/sap/fe/core/ReuseComponent.ts +18 -0
- package/src/sap/fe/core/TemplateComponent.js +102 -89
- package/src/sap/fe/core/TemplateComponent.ts +20 -1
- package/src/sap/fe/core/TemplateModel.js +6 -7
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +2 -9
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
- package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
- package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
- package/src/sap/fe/core/controllerextensions/Share.js +19 -28
- package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
- package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
- package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
- package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
- package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
- package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
- package/src/sap/fe/core/converters/ConverterContext.js +17 -18
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
- package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
- package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
- package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
- package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
- package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
- package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
- package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
- package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
- package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
- package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
- package/src/sap/fe/core/definition/FEDefinition.js +104 -44
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
- package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
- package/src/sap/fe/core/fpm/Component.js +12 -14
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
- package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
- package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
- package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
- package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
- package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
- package/src/sap/fe/core/helpers/MetaPath.js +9 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
- package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
- package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
- package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
- package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
- package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
- package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
- package/src/sap/fe/core/helpers/WebSocket.js +4 -4
- package/src/sap/fe/core/library.js +8 -7
- package/src/sap/fe/core/library.ts +2 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
- package/src/sap/fe/core/messagebundle.properties +21 -0
- package/src/sap/fe/core/messagebundle_ar.properties +5 -1
- package/src/sap/fe/core/messagebundle_bg.properties +4 -0
- package/src/sap/fe/core/messagebundle_ca.properties +4 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
- package/src/sap/fe/core/messagebundle_cs.properties +8 -4
- package/src/sap/fe/core/messagebundle_cy.properties +4 -0
- package/src/sap/fe/core/messagebundle_da.properties +4 -0
- package/src/sap/fe/core/messagebundle_de.properties +4 -0
- package/src/sap/fe/core/messagebundle_el.properties +4 -0
- package/src/sap/fe/core/messagebundle_en.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
- package/src/sap/fe/core/messagebundle_es.properties +5 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
- package/src/sap/fe/core/messagebundle_et.properties +4 -0
- package/src/sap/fe/core/messagebundle_fi.properties +4 -0
- package/src/sap/fe/core/messagebundle_fr.properties +6 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
- package/src/sap/fe/core/messagebundle_hi.properties +4 -0
- package/src/sap/fe/core/messagebundle_hr.properties +4 -0
- package/src/sap/fe/core/messagebundle_hu.properties +4 -0
- package/src/sap/fe/core/messagebundle_id.properties +4 -0
- package/src/sap/fe/core/messagebundle_it.properties +4 -0
- package/src/sap/fe/core/messagebundle_iw.properties +4 -0
- package/src/sap/fe/core/messagebundle_ja.properties +4 -0
- package/src/sap/fe/core/messagebundle_kk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ko.properties +4 -0
- package/src/sap/fe/core/messagebundle_lt.properties +4 -0
- package/src/sap/fe/core/messagebundle_lv.properties +4 -0
- package/src/sap/fe/core/messagebundle_mk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ms.properties +4 -0
- package/src/sap/fe/core/messagebundle_nl.properties +4 -0
- package/src/sap/fe/core/messagebundle_no.properties +4 -0
- package/src/sap/fe/core/messagebundle_pl.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
- package/src/sap/fe/core/messagebundle_ro.properties +4 -0
- package/src/sap/fe/core/messagebundle_ru.properties +4 -0
- package/src/sap/fe/core/messagebundle_sh.properties +4 -0
- package/src/sap/fe/core/messagebundle_sk.properties +4 -0
- package/src/sap/fe/core/messagebundle_sl.properties +4 -0
- package/src/sap/fe/core/messagebundle_sr.properties +4 -0
- package/src/sap/fe/core/messagebundle_sv.properties +4 -0
- package/src/sap/fe/core/messagebundle_th.properties +4 -0
- package/src/sap/fe/core/messagebundle_tr.properties +5 -1
- package/src/sap/fe/core/messagebundle_uk.properties +4 -0
- package/src/sap/fe/core/messagebundle_vi.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
- package/src/sap/fe/core/operationsHelper.js +23 -27
- package/src/sap/fe/core/operationsHelper.ts +6 -7
- package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
- package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
- package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
- package/src/sap/fe/core/support/CommonHelper.js +2 -3
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +3 -4
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
- package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
- package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
- package/src/sap/fe/core/templating/UIFormatters.js +57 -78
- package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
- package/src/sap/fe/core/type/Date.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +3 -5
- package/src/sap/fe/core/type/Email.js +17 -6
- package/src/sap/fe/core/type/Email.ts +23 -4
- package/src/sap/fe/core/type/FiscalDate.js +8 -9
- package/src/sap/fe/core/type/InputMask.js +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
|
@@ -1071,7 +1071,9 @@ export const processSelectionFields = function (
|
|
|
1071
1071
|
//add edit
|
|
1072
1072
|
const dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
1073
1073
|
if (ModelHelper.isObjectPathDraftSupported(dataModelObjectPath)) {
|
|
1074
|
-
|
|
1074
|
+
if (showDraftEditStatus(converterContext)) {
|
|
1075
|
+
aFetchedProperties.push(getEditStateFilterPropertyInfo());
|
|
1076
|
+
}
|
|
1075
1077
|
}
|
|
1076
1078
|
// add search
|
|
1077
1079
|
const searchRestrictions = getSearchRestrictions(converterContext);
|
|
@@ -1085,6 +1087,13 @@ export const processSelectionFields = function (
|
|
|
1085
1087
|
return aFetchedProperties;
|
|
1086
1088
|
};
|
|
1087
1089
|
|
|
1090
|
+
export const showDraftEditStatus= function (
|
|
1091
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
1092
|
+
): boolean {
|
|
1093
|
+
const navigationRestrictions = getNavigationRestrictions(converterContext, "DraftAdministrativeData")
|
|
1094
|
+
return navigationRestrictions?.FilterRestrictions?.Filterable === false ? false : true;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1088
1097
|
export const insertCustomManifestElements = function (
|
|
1089
1098
|
filterFields: ManifestFilterField[],
|
|
1090
1099
|
entityType: EntityType,
|
|
@@ -24,30 +24,26 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
24
24
|
* @returns `true` if the measure can be grouped and aggregated
|
|
25
25
|
*/
|
|
26
26
|
const _checkVFAggregation = function (converterContext, chartAnnotation, aggregationHelper) {
|
|
27
|
-
var _chartAnnotation$$tar, _chartAnnotation$$tar8, _chartAnnotation$$tar11, _chartAnnotation$$tar12;
|
|
28
27
|
let sMeasurePath, bGroupable, bAggregatable;
|
|
29
28
|
let sMeasure;
|
|
30
29
|
const customAggregates = aggregationHelper.getCustomAggregateDefinitions();
|
|
31
30
|
let aTransAggregations = aggregationHelper.getTransAggregations();
|
|
32
31
|
let aCustAggMeasure = [];
|
|
33
32
|
// if the chart definition has custom aggregates, then consider them, else fall back to the measures with transformation aggregates
|
|
34
|
-
if (chartAnnotation
|
|
35
|
-
var _chartAnnotation$$tar5, _chartAnnotation$$tar6, _chartAnnotation$$tar7;
|
|
33
|
+
if (chartAnnotation?.$target?.Measures) {
|
|
36
34
|
aCustAggMeasure = customAggregates.filter(function (custAgg) {
|
|
37
|
-
|
|
38
|
-
return custAgg.qualifier === (chartAnnotation === null || chartAnnotation === void 0 ? void 0 : (_chartAnnotation$$tar2 = chartAnnotation.$target) === null || _chartAnnotation$$tar2 === void 0 ? void 0 : (_chartAnnotation$$tar3 = _chartAnnotation$$tar2.Measures) === null || _chartAnnotation$$tar3 === void 0 ? void 0 : (_chartAnnotation$$tar4 = _chartAnnotation$$tar3[0]) === null || _chartAnnotation$$tar4 === void 0 ? void 0 : _chartAnnotation$$tar4.value);
|
|
35
|
+
return custAgg.qualifier === chartAnnotation?.$target?.Measures?.[0]?.value;
|
|
39
36
|
});
|
|
40
|
-
sMeasure = aCustAggMeasure.length > 0 ? aCustAggMeasure[0].qualifier : chartAnnotation
|
|
37
|
+
sMeasure = aCustAggMeasure.length > 0 ? aCustAggMeasure[0].qualifier : chartAnnotation?.$target?.Measures?.[0]?.value;
|
|
41
38
|
}
|
|
42
39
|
// consider dynamic measures only if there are no measures with custom aggregates
|
|
43
|
-
if (!aCustAggMeasure[0] && chartAnnotation
|
|
44
|
-
|
|
45
|
-
sMeasure = (_converterContext$get = converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath((_chartAnnotation$$tar9 = chartAnnotation.$target.DynamicMeasures) === null || _chartAnnotation$$tar9 === void 0 ? void 0 : (_chartAnnotation$$tar10 = _chartAnnotation$$tar9[0]) === null || _chartAnnotation$$tar10 === void 0 ? void 0 : _chartAnnotation$$tar10.value)).getDataModelObjectPath().targetObject) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.Name.toString();
|
|
40
|
+
if (!aCustAggMeasure[0] && chartAnnotation?.$target?.DynamicMeasures) {
|
|
41
|
+
sMeasure = converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(chartAnnotation.$target.DynamicMeasures?.[0]?.value)).getDataModelObjectPath().targetObject?.Name.toString();
|
|
46
42
|
aTransAggregations = aggregationHelper.getAggregatedProperty();
|
|
47
43
|
} else {
|
|
48
44
|
aTransAggregations = aggregationHelper.getAggregatedProperties()[0];
|
|
49
45
|
}
|
|
50
|
-
const sDimension = chartAnnotation
|
|
46
|
+
const sDimension = chartAnnotation?.$target?.Dimensions[0]?.value;
|
|
51
47
|
if (customAggregates.some(function (custAgg) {
|
|
52
48
|
return custAgg.qualifier === sMeasure;
|
|
53
49
|
})) {
|
|
@@ -57,7 +53,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
57
53
|
} else if (aTransAggregations && aTransAggregations[0]) {
|
|
58
54
|
aTransAggregations.some(function (oAggregate) {
|
|
59
55
|
if (oAggregate.Name === sMeasure) {
|
|
60
|
-
sMeasurePath = oAggregate
|
|
56
|
+
sMeasurePath = oAggregate?.AggregatableProperty.value;
|
|
61
57
|
}
|
|
62
58
|
});
|
|
63
59
|
}
|
|
@@ -65,8 +61,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
65
61
|
const aAggregatablePropsFromContainer = aggregationHelper.getAggregatableProperties();
|
|
66
62
|
if (aAggregatablePropsFromContainer && aAggregatablePropsFromContainer.length) {
|
|
67
63
|
for (const aggregatableProp of aAggregatablePropsFromContainer) {
|
|
68
|
-
|
|
69
|
-
if ((aggregatableProp === null || aggregatableProp === void 0 ? void 0 : (_Property = aggregatableProp.Property) === null || _Property === void 0 ? void 0 : _Property.value) === sMeasurePath) {
|
|
64
|
+
if (aggregatableProp?.Property?.value === sMeasurePath) {
|
|
70
65
|
bAggregatable = true;
|
|
71
66
|
}
|
|
72
67
|
}
|
|
@@ -75,7 +70,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
75
70
|
const aGroupablePropsFromContainer = aggregationHelper.getGroupableProperties();
|
|
76
71
|
if (aGroupablePropsFromContainer && aGroupablePropsFromContainer.length) {
|
|
77
72
|
for (const groupableProp of aGroupablePropsFromContainer) {
|
|
78
|
-
if (
|
|
73
|
+
if (groupableProp?.value === sDimension) {
|
|
79
74
|
bGroupable = true;
|
|
80
75
|
}
|
|
81
76
|
}
|
|
@@ -91,22 +86,19 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
91
86
|
* @returns The visual filters
|
|
92
87
|
*/
|
|
93
88
|
function getVisualFilters(entityType, converterContext, sPropertyPath, FilterFields) {
|
|
94
|
-
var _oVisualFilter$visual;
|
|
95
89
|
let visualFilter;
|
|
96
90
|
const oVisualFilter = FilterFields[sPropertyPath];
|
|
97
|
-
if (oVisualFilter
|
|
98
|
-
|
|
99
|
-
const oVFPath = oVisualFilter === null || oVisualFilter === void 0 ? void 0 : (_oVisualFilter$visual2 = oVisualFilter.visualFilter) === null || _oVisualFilter$visual2 === void 0 ? void 0 : _oVisualFilter$visual2.valueList;
|
|
91
|
+
if (oVisualFilter?.visualFilter?.valueList) {
|
|
92
|
+
const oVFPath = oVisualFilter?.visualFilter?.valueList;
|
|
100
93
|
const annotationQualifierSplit = oVFPath.split("#");
|
|
101
94
|
const qualifierVL = annotationQualifierSplit.length > 1 ? `ValueList#${annotationQualifierSplit[1]}` : annotationQualifierSplit[0];
|
|
102
95
|
const property = entityType.resolvePath(sPropertyPath);
|
|
103
|
-
const valueList = property
|
|
104
|
-
const isValueListWithFixedValues =
|
|
96
|
+
const valueList = property?.annotations?.Common?.[qualifierVL];
|
|
97
|
+
const isValueListWithFixedValues = property?.annotations?.Common?.ValueListWithFixedValues?.valueOf() || false;
|
|
105
98
|
if (valueList) {
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const valueListParams = valueList === null || valueList === void 0 ? void 0 : valueList.Parameters;
|
|
99
|
+
const collectionPath = valueList?.CollectionPath.toString();
|
|
100
|
+
const collectionPathConverterContext = converterContext.getConverterContextFor(`/${collectionPath || converterContext.getEntitySet()?.name}`);
|
|
101
|
+
const valueListParams = valueList?.Parameters;
|
|
110
102
|
let outParameter;
|
|
111
103
|
const inParameters = [];
|
|
112
104
|
let aParameters = [];
|
|
@@ -119,13 +111,12 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
119
111
|
}
|
|
120
112
|
if (valueListParams) {
|
|
121
113
|
for (const valueListParam of valueListParams) {
|
|
122
|
-
|
|
123
|
-
const localDataProperty = (_LocalDataProperty = valueListParam.LocalDataProperty) === null || _LocalDataProperty === void 0 ? void 0 : _LocalDataProperty.value;
|
|
114
|
+
const localDataProperty = valueListParam.LocalDataProperty?.value;
|
|
124
115
|
const valueListProperty = valueListParam.ValueListProperty;
|
|
125
|
-
if ((
|
|
116
|
+
if ((valueListParam?.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" || valueListParam?.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterOut") && sPropertyPath === localDataProperty) {
|
|
126
117
|
outParameter = valueListParam;
|
|
127
118
|
}
|
|
128
|
-
if ((
|
|
119
|
+
if ((valueListParam?.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" || valueListParam?.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterIn") && sPropertyPath !== localDataProperty) {
|
|
129
120
|
const bNotFilterable = isPropertyFilterable(collectionPathConverterContext, valueListProperty);
|
|
130
121
|
if (!bNotFilterable) {
|
|
131
122
|
inParameters.push({
|
|
@@ -138,61 +129,57 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
138
129
|
}
|
|
139
130
|
if (inParameters && inParameters.length) {
|
|
140
131
|
inParameters.forEach(function (oInParameter) {
|
|
141
|
-
const mainEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(oInParameter
|
|
142
|
-
const valueListEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(collectionPathConverterContext.getConverterContextFor(collectionPathConverterContext.getAbsoluteAnnotationPath(oInParameter
|
|
132
|
+
const mainEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(oInParameter?.localDataProperty)).getDataModelObjectPath(), ["SingleValue"]));
|
|
133
|
+
const valueListEntitySetInMappingAllowedExpression = compileExpression(checkFilterExpressionRestrictions(collectionPathConverterContext.getConverterContextFor(collectionPathConverterContext.getAbsoluteAnnotationPath(oInParameter?.valueListProperty)).getDataModelObjectPath(), ["SingleValue"]));
|
|
143
134
|
if (valueListEntitySetInMappingAllowedExpression === "true" && mainEntitySetInMappingAllowedExpression === "false") {
|
|
144
135
|
throw new Error(`FilterRestrictions of ${sPropertyPath} in MainEntitySet and ValueListEntitySet are different`);
|
|
145
136
|
}
|
|
146
137
|
});
|
|
147
138
|
}
|
|
148
|
-
const pvQualifier = valueList
|
|
149
|
-
const svQualifier = valueList
|
|
150
|
-
const pvAnnotation = collectionPathConverterContext
|
|
139
|
+
const pvQualifier = valueList?.PresentationVariantQualifier;
|
|
140
|
+
const svQualifier = valueList?.SelectionVariantQualifier;
|
|
141
|
+
const pvAnnotation = collectionPathConverterContext?.getEntityType().annotations.UI?.[`PresentationVariant#${pvQualifier}`];
|
|
151
142
|
const aggregationHelper = new AggregationHelper(collectionPathConverterContext.getEntityType(), collectionPathConverterContext);
|
|
152
143
|
if (!aggregationHelper.isAnalyticsSupported()) {
|
|
153
144
|
return undefined;
|
|
154
145
|
}
|
|
155
146
|
if (pvAnnotation) {
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
const contextPath = `/${valueList === null || valueList === void 0 ? void 0 : valueList.CollectionPath}` || `/${collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : (_collectionPathConver2 = collectionPathConverterContext.getEntitySet()) === null || _collectionPathConver2 === void 0 ? void 0 : _collectionPathConver2.name}`;
|
|
147
|
+
const aVisualizations = pvAnnotation?.Visualizations;
|
|
148
|
+
const contextPath = `/${valueList?.CollectionPath}` || `/${collectionPathConverterContext?.getEntitySet()?.name}`;
|
|
159
149
|
visualFilter = {};
|
|
160
150
|
visualFilter.contextPath = contextPath;
|
|
161
151
|
visualFilter.isValueListWithFixedValues = isValueListWithFixedValues;
|
|
162
152
|
let chartAnnotation;
|
|
163
153
|
for (const visualization of aVisualizations) {
|
|
164
|
-
|
|
165
|
-
if (((_visualization$$targe = visualization.$target) === null || _visualization$$targe === void 0 ? void 0 : _visualization$$targe.term) === "com.sap.vocabularies.UI.v1.Chart") {
|
|
154
|
+
if (visualization.$target?.term === "com.sap.vocabularies.UI.v1.Chart") {
|
|
166
155
|
chartAnnotation = visualization;
|
|
167
156
|
break;
|
|
168
157
|
}
|
|
169
158
|
}
|
|
170
159
|
if (chartAnnotation) {
|
|
171
|
-
var _chartAnnotation, _chartAnnotation$$tar13, _chartAnnotation$$tar14, _chartAnnotation$$tar15, _chartAnnotation$$tar16, _chartAnnotation$$tar17, _chartAnnotation$$tar18, _chartAnnotation2, _chartAnnotation2$$ta, _chartAnnotation2$$ta2, _chartAnnotation2$$ta3, _chartAnnotation2$$ta4, _chartAnnotation2$$ta5, _chartAnnotation2$$ta6;
|
|
172
160
|
const _bgetVFAggregation = _checkVFAggregation(collectionPathConverterContext, chartAnnotation, aggregationHelper);
|
|
173
161
|
if (!_bgetVFAggregation) {
|
|
174
162
|
return;
|
|
175
163
|
}
|
|
176
|
-
const bDimensionHidden =
|
|
177
|
-
const bDimensionHiddenFilter =
|
|
164
|
+
const bDimensionHidden = chartAnnotation?.$target?.Dimensions[0]?.$target?.annotations?.UI?.Hidden?.valueOf();
|
|
165
|
+
const bDimensionHiddenFilter = chartAnnotation?.$target?.Dimensions[0]?.$target?.annotations?.UI?.HiddenFilter?.valueOf();
|
|
178
166
|
if (bDimensionHidden === true || bDimensionHiddenFilter === true) {
|
|
179
167
|
return;
|
|
180
168
|
} else if (aVisualizations && aVisualizations.length) {
|
|
181
|
-
|
|
182
|
-
visualFilter.chartAnnotation = chartAnnotation.$target ? collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : collectionPathConverterContext.getAbsoluteAnnotationPath(`${chartAnnotation.$target.fullyQualifiedName}/$AnnotationPath/`) : undefined;
|
|
169
|
+
visualFilter.chartAnnotation = chartAnnotation.$target ? collectionPathConverterContext?.getAbsoluteAnnotationPath(`${chartAnnotation.$target.fullyQualifiedName}/$AnnotationPath/`) : undefined;
|
|
183
170
|
// This needs to be done to avoid repetitive entity type in case of non-parameterized entity set e.g /SalesOrderManage/com.c_salesordermanage_sd_aggregate.SalesOrderManage
|
|
184
|
-
const entitySetName =
|
|
171
|
+
const entitySetName = collectionPathConverterContext.getEntitySet()?.name;
|
|
185
172
|
let presentationAnnotation;
|
|
186
|
-
const relativeAnnotationPath = collectionPathConverterContext
|
|
173
|
+
const relativeAnnotationPath = collectionPathConverterContext?.getRelativeAnnotationPath(`${pvAnnotation.fullyQualifiedName}/`, collectionPathConverterContext.getEntityType());
|
|
187
174
|
if (parameterEntityType) {
|
|
188
175
|
presentationAnnotation = collectionPathConverterContext.getContextPath() + "/" + relativeAnnotationPath;
|
|
189
176
|
} else {
|
|
190
177
|
presentationAnnotation = "/" + entitySetName + "/" + relativeAnnotationPath;
|
|
191
178
|
}
|
|
192
179
|
visualFilter.presentationAnnotation = pvAnnotation ? presentationAnnotation : undefined;
|
|
193
|
-
visualFilter.outParameter =
|
|
180
|
+
visualFilter.outParameter = outParameter?.LocalDataProperty?.value;
|
|
194
181
|
visualFilter.inParameters = inParameters;
|
|
195
|
-
visualFilter.valuelistProperty =
|
|
182
|
+
visualFilter.valuelistProperty = outParameter?.ValueListProperty;
|
|
196
183
|
const bIsRange = checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(sPropertyPath)).getDataModelObjectPath(), ["SingleRange", "MultiRange"]);
|
|
197
184
|
if (compileExpression(bIsRange) === "true") {
|
|
198
185
|
converterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MALFORMED_VISUALFILTERS.VALUELIST);
|
|
@@ -203,10 +190,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
203
190
|
visualFilter.required = getIsRequired(converterContext, sPropertyPath);
|
|
204
191
|
let svAnnotation;
|
|
205
192
|
if (svQualifier) {
|
|
206
|
-
|
|
207
|
-
svAnnotation = collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : (_collectionPathConver4 = collectionPathConverterContext.getEntityTypeAnnotation(`@UI.SelectionVariant#${svQualifier}`)) === null || _collectionPathConver4 === void 0 ? void 0 : _collectionPathConver4.annotation;
|
|
193
|
+
svAnnotation = collectionPathConverterContext?.getEntityTypeAnnotation(`@UI.SelectionVariant#${svQualifier}`)?.annotation;
|
|
208
194
|
let selectionVariantAnnotation;
|
|
209
|
-
const relativeSelectionVariantPath = collectionPathConverterContext
|
|
195
|
+
const relativeSelectionVariantPath = collectionPathConverterContext?.getRelativeAnnotationPath(`${svAnnotation?.fullyQualifiedName}/`, collectionPathConverterContext.getEntityType());
|
|
210
196
|
if (parameterEntityType) {
|
|
211
197
|
selectionVariantAnnotation = collectionPathConverterContext.getContextPath() + "/" + relativeSelectionVariantPath;
|
|
212
198
|
} else {
|
|
@@ -216,27 +202,24 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
216
202
|
}
|
|
217
203
|
let requiredProperties = [];
|
|
218
204
|
if (parameterEntityType) {
|
|
219
|
-
var _oEntitySetConverterC, _oEntitySetConverterC2, _oEntitySetConverterC3, _oEntitySetConverterC4, _oRestrictedProperty$;
|
|
220
205
|
const sEntitySet = collectionPath.split("/")[0];
|
|
221
206
|
const sNavigationProperty = collectionPath.split("/")[1];
|
|
222
207
|
const oEntitySetConverterContext = converterContext.getConverterContextFor(`/${sEntitySet}`);
|
|
223
|
-
const aRestrictedProperties = oEntitySetConverterContext
|
|
224
|
-
const oRestrictedProperty = aRestrictedProperties
|
|
225
|
-
|
|
226
|
-
if (((_restrictedNavProp$Na = restrictedNavProp.NavigationProperty) === null || _restrictedNavProp$Na === void 0 ? void 0 : _restrictedNavProp$Na.type) === "NavigationPropertyPath") {
|
|
208
|
+
const aRestrictedProperties = oEntitySetConverterContext?.getDataModelObjectPath().startingEntitySet?.annotations?.Capabilities?.NavigationRestrictions?.RestrictedProperties;
|
|
209
|
+
const oRestrictedProperty = aRestrictedProperties?.find(restrictedNavProp => {
|
|
210
|
+
if (restrictedNavProp.NavigationProperty?.type === "NavigationPropertyPath") {
|
|
227
211
|
return restrictedNavProp.NavigationProperty.value === sNavigationProperty;
|
|
228
212
|
}
|
|
229
213
|
});
|
|
230
|
-
requiredProperties =
|
|
214
|
+
requiredProperties = oRestrictedProperty?.FilterRestrictions?.RequiredProperties ?? [];
|
|
231
215
|
} else {
|
|
232
|
-
const entitySetOrSingleton = collectionPathConverterContext
|
|
216
|
+
const entitySetOrSingleton = collectionPathConverterContext?.getEntitySet();
|
|
233
217
|
if (isEntitySet(entitySetOrSingleton)) {
|
|
234
|
-
|
|
235
|
-
requiredProperties = ((_entitySetOrSingleton = entitySetOrSingleton.annotations.Capabilities) === null || _entitySetOrSingleton === void 0 ? void 0 : (_entitySetOrSingleton2 = _entitySetOrSingleton.FilterRestrictions) === null || _entitySetOrSingleton2 === void 0 ? void 0 : _entitySetOrSingleton2.RequiredProperties) ?? [];
|
|
218
|
+
requiredProperties = entitySetOrSingleton.annotations.Capabilities?.FilterRestrictions?.RequiredProperties ?? [];
|
|
236
219
|
}
|
|
237
220
|
}
|
|
238
221
|
let requiredPropertyPaths = [];
|
|
239
|
-
if (
|
|
222
|
+
if (requiredProperties?.length) {
|
|
240
223
|
requiredProperties.forEach(function (oRequireProperty) {
|
|
241
224
|
requiredPropertyPaths.push(oRequireProperty.value);
|
|
242
225
|
});
|
|
@@ -247,20 +230,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
247
230
|
// if context Path for both visual filter and filter bar are same, consider required Properties as well along with in Parameters
|
|
248
231
|
_addInParameters(inParameters, requiredProperties, false);
|
|
249
232
|
}
|
|
250
|
-
if (
|
|
233
|
+
if (visualFilter.requiredProperties?.length) {
|
|
251
234
|
if (!visualFilter.inParameters || !visualFilter.inParameters.length) {
|
|
252
235
|
if (!visualFilter.selectionVariantAnnotation) {
|
|
253
236
|
visualFilter.showOverlayInitially = true;
|
|
254
237
|
} else {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
var _oSelectOption$Proper;
|
|
258
|
-
return (_oSelectOption$Proper = oSelectOption.PropertyName) === null || _oSelectOption$Proper === void 0 ? void 0 : _oSelectOption$Proper.value;
|
|
259
|
-
})) || [];
|
|
260
|
-
const parameterOptions = ((_svAnnotation3 = svAnnotation) === null || _svAnnotation3 === void 0 ? void 0 : (_svAnnotation3$Parame = _svAnnotation3.Parameters) === null || _svAnnotation3$Parame === void 0 ? void 0 : _svAnnotation3$Parame.map(oParameterOption => {
|
|
261
|
-
var _PropertyName;
|
|
262
|
-
return (_PropertyName = oParameterOption.PropertyName) === null || _PropertyName === void 0 ? void 0 : _PropertyName.value;
|
|
263
|
-
})) || [];
|
|
238
|
+
let selectOptions = svAnnotation?.SelectOptions?.map(oSelectOption => oSelectOption.PropertyName?.value) || [];
|
|
239
|
+
const parameterOptions = svAnnotation?.Parameters?.map(oParameterOption => oParameterOption.PropertyName?.value) || [];
|
|
264
240
|
selectOptions = selectOptions.concat(parameterOptions);
|
|
265
241
|
requiredPropertyPaths = requiredPropertyPaths.sort();
|
|
266
242
|
selectOptions = selectOptions.sort();
|
|
@@ -274,8 +250,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
274
250
|
} else {
|
|
275
251
|
visualFilter.showOverlayInitially = false;
|
|
276
252
|
}
|
|
277
|
-
const sDimensionType =
|
|
278
|
-
visualFilter.renderLineChart = sDimensionType === "Edm.DateTimeOffset" || sDimensionType === "Edm.Date" || sDimensionType === "Edm.TimeOfDay" ||
|
|
253
|
+
const sDimensionType = chartAnnotation?.$target?.Dimensions[0]?.$target?.type;
|
|
254
|
+
visualFilter.renderLineChart = sDimensionType === "Edm.DateTimeOffset" || sDimensionType === "Edm.Date" || sDimensionType === "Edm.TimeOfDay" || chartAnnotation.$target?.ChartType !== "UI.ChartType/Line";
|
|
279
255
|
}
|
|
280
256
|
} else {
|
|
281
257
|
converterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MALFORMED_VISUALFILTERS.CHART);
|
|
@@ -312,4 +288,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
312
288
|
_exports._addInParameters = _addInParameters;
|
|
313
289
|
return _exports;
|
|
314
290
|
}, false);
|
|
315
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyOCIsIl9jaGFydEFubm90YXRpb24kJHRhcjExIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTIiLCJzTWVhc3VyZVBhdGgiLCJiR3JvdXBhYmxlIiwiYkFnZ3JlZ2F0YWJsZSIsInNNZWFzdXJlIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdEFnZ01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI1IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjciLCJmaWx0ZXIiLCJjdXN0QWdnIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMiIsIl9jaGFydEFubm90YXRpb24kJHRhcjMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI0IiwicXVhbGlmaWVyIiwidmFsdWUiLCJsZW5ndGgiLCJEeW5hbWljTWVhc3VyZXMiLCJfY29udmVydGVyQ29udGV4dCRnZXQiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI5IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTAiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJOYW1lIiwidG9TdHJpbmciLCJnZXRBZ2dyZWdhdGVkUHJvcGVydHkiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydGllcyIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwic29tZSIsIm9BZ2dyZWdhdGUiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRhYmxlUHJvcCIsIl9Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJncm91cGFibGVQcm9wIiwiZ2V0VmlzdWFsRmlsdGVycyIsImVudGl0eVR5cGUiLCJzUHJvcGVydHlQYXRoIiwiRmlsdGVyRmllbGRzIiwiX29WaXN1YWxGaWx0ZXIkdmlzdWFsIiwidmlzdWFsRmlsdGVyIiwib1Zpc3VhbEZpbHRlciIsInZhbHVlTGlzdCIsIl9vVmlzdWFsRmlsdGVyJHZpc3VhbDIiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsInZhbHVlT2YiLCJfY29udmVydGVyQ29udGV4dCRnZXQyIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJnZXRDb250ZXh0UGF0aCIsIl9hZGRJblBhcmFtZXRlcnMiLCJ2YWx1ZUxpc3RQYXJhbSIsIl9Mb2NhbERhdGFQcm9wZXJ0eSIsImxvY2FsRGF0YVByb3BlcnR5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwicHVzaCIsImZvckVhY2giLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsInZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiRXJyb3IiLCJwdlF1YWxpZmllciIsIlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJzdlF1YWxpZmllciIsIlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJwdkFubm90YXRpb24iLCJnZXRFbnRpdHlUeXBlIiwiVUkiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyMiIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwiX3Zpc3VhbGl6YXRpb24kJHRhcmdlIiwidGVybSIsIl9jaGFydEFubm90YXRpb24iLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxMyIsIl9jaGFydEFubm90YXRpb24kJHRhcjE0IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTUiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjE3IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTgiLCJfY2hhcnRBbm5vdGF0aW9uMiIsIl9jaGFydEFubm90YXRpb24yJCR0YSIsIl9jaGFydEFubm90YXRpb24yJCR0YTIiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGEzIiwiX2NoYXJ0QW5ub3RhdGlvbjIkJHRhNCIsIl9jaGFydEFubm90YXRpb24yJCR0YTUiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGE2IiwiX2JnZXRWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkhpZGRlbiIsImJEaW1lbnNpb25IaWRkZW5GaWx0ZXIiLCJIaWRkZW5GaWx0ZXIiLCJfY29sbGVjdGlvblBhdGhDb252ZXIzIiwiX291dFBhcmFtZXRlciIsIl9vdXRQYXJhbWV0ZXIkTG9jYWxEYSIsIl9vdXRQYXJhbWV0ZXIyIiwiX3JlcXVpcmVkUHJvcGVydGllcyIsIl92aXN1YWxGaWx0ZXIkcmVxdWlyZSIsIl9jaGFydEFubm90YXRpb24zIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhMiIsIl9jaGFydEFubm90YXRpb24zJCR0YTMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxOSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldE5hbWUiLCJwcmVzZW50YXRpb25Bbm5vdGF0aW9uIiwicmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZWxpc3RQcm9wZXJ0eSIsImJJc1JhbmdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIlZBTFVFTElTVCIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJub3QiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJfY29sbGVjdGlvblBhdGhDb252ZXI0IiwiX3N2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsIl9vRW50aXR5U2V0Q29udmVydGVyQyIsIl9vRW50aXR5U2V0Q29udmVydGVyQzIiLCJfb0VudGl0eVNldENvbnZlcnRlckMzIiwiX29FbnRpdHlTZXRDb252ZXJ0ZXJDNCIsIl9vUmVzdHJpY3RlZFByb3BlcnR5JCIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJfcmVzdHJpY3RlZE5hdlByb3AkTmEiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbiIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbjIiLCJyZXF1aXJlZFByb3BlcnR5UGF0aHMiLCJvUmVxdWlyZVByb3BlcnR5IiwiY29uY2F0Iiwic2hvd092ZXJsYXlJbml0aWFsbHkiLCJfc3ZBbm5vdGF0aW9uMiIsIl9zdkFubm90YXRpb24yJFNlbGVjdCIsIl9zdkFubm90YXRpb24zIiwiX3N2QW5ub3RhdGlvbjMkUGFyYW1lIiwic2VsZWN0T3B0aW9ucyIsIlNlbGVjdE9wdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwiX29TZWxlY3RPcHRpb24kUHJvcGVyIiwiUHJvcGVydHlOYW1lIiwicGFyYW1ldGVyT3B0aW9ucyIsIm9QYXJhbWV0ZXJPcHRpb24iLCJfUHJvcGVydHlOYW1lIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiX2V4cG9ydHMiLCJpblBhcmFtcyIsInByb3BlcnRpZXMiLCJpc1BhcmFtIiwiZWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3QsXG5cdFZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBQYXJhbWV0ZXJUeXBlcywgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0SXNSZXF1aXJlZCwgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0dmFsdWVsaXN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0Ly8gQ3VzdG9tIGFnZ3JlZ2F0ZSBtYXRjaCBmb3VuZFxuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbiAob0FnZ3JlZ2F0ZSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKCFiQWdncmVnYXRhYmxlKSB7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdFx0aWYgKChhZ2dyZWdhdGFibGVQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVHlwZSA9IHtcblx0bG9jYWxEYXRhUHJvcGVydHk6IHN0cmluZztcblx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCB0aGUgdmlzdWFsIGZpbHRlcnMgb2JqZWN0IGZvciBhIHByb3BlcnR5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHBhcmFtIEZpbHRlckZpZWxkcyBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsIGZpbHRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGxldCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXN1YWxGaWx0ZXI6IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gRmlsdGVyRmllbGRzW3NQcm9wZXJ0eVBhdGhdO1xuXHRpZiAob1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3QpIHtcblx0XHRjb25zdCBvVkZQYXRoID0gb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0ID0gb1ZGUGF0aC5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyVkwgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQubGVuZ3RoID4gMSA/IGBWYWx1ZUxpc3QjJHthbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV19YCA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCkgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LltxdWFsaWZpZXJWTCBhcyBrZXlvZiBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl0gYXMgVmFsdWVMaXN0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSBhcyBib29sZWFuKSB8fCBmYWxzZTtcblx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGgudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRgLyR7Y29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IFBhcmFtZXRlclR5cGVbXSA9IFtdO1xuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdFx0XHRhUGFyYW1ldGVycyA9IHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIGFQYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBWYWx1ZUxpc3RQYXJhbWV0ZXJJbikuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW0uVmFsdWVMaXN0UHJvcGVydHkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9JblBhcmFtZXRlcikge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZpbHRlclJlc3RyaWN0aW9ucyBvZiAke3NQcm9wZXJ0eVBhdGh9IGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5VST8uW2BQcmVzZW50YXRpb25WYXJpYW50IyR7cHZRdWFsaWZpZXJ9YF07XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGh9YCB8fCBgLyR7Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIgPSB7fTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5pc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzO1xuXHRcdFx0XHRsZXQgY2hhcnRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uUGF0aDxDaGFydD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb24gYXMgQW5ub3RhdGlvblBhdGg8Q2hhcnQ+O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjaGFydEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBfYmdldFZGQWdncmVnYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBfY2hlY2tWRkFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICghX2JnZXRWRkFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb24uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRcdGAke2NoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJEFubm90YXRpb25QYXRoL2Bcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkb25lIHRvIGF2b2lkIHJlcGV0aXRpdmUgZW50aXR5IHR5cGUgaW4gY2FzZSBvZiBub24tcGFyYW1ldGVyaXplZCBlbnRpdHkgc2V0IGUuZyAvU2FsZXNPcmRlck1hbmFnZS9jb20uY19zYWxlc29yZGVybWFuYWdlX3NkX2FnZ3JlZ2F0ZS5TYWxlc09yZGVyTWFuYWdlXG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHRcdFx0bGV0IHByZXNlbnRhdGlvbkFubm90YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCByZWxhdGl2ZUFubm90YXRpb25QYXRoID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRgJHtwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfS9gLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZUFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IFwiL1wiICsgZW50aXR5U2V0TmFtZSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uID8gcHJlc2VudGF0aW9uQW5ub3RhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5vdXRQYXJhbWV0ZXIgPSBvdXRQYXJhbWV0ZXI/LkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgPSBpblBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIudmFsdWVsaXN0UHJvcGVydHkgPSBvdXRQYXJhbWV0ZXI/LlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVFeHByZXNzaW9uKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlRXhwcmVzc2lvbihub3QoYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbikpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ZRdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25WYXJpYW50Pihcblx0XHRcdFx0XHRcdFx0XHRgQFVJLlNlbGVjdGlvblZhcmlhbnQjJHtzdlF1YWxpZmllcn1gXG5cdFx0XHRcdFx0XHRcdCk/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGxldCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRgJHtzdkFubm90YXRpb24/LmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uID8gc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0Py5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc3RyaWN0ZWRQcm9wZXJ0eSA9IGFSZXN0cmljdGVkUHJvcGVydGllcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHQocmVzdHJpY3RlZE5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHk/LnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBvUmVzdHJpY3RlZFByb3BlcnR5Py5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldE9yU2luZ2xldG9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldE9yU2luZ2xldG9uKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXRPclNpbmdsZXRvbi5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVxdWlyZVByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnB1c2gob1JlcXVpcmVQcm9wZXJ0eS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLmNvbmNhdChhUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgY29udGV4dCBQYXRoIGZvciBib3RoIHZpc3VhbCBmaWx0ZXIgYW5kIGZpbHRlciBiYXIgYXJlIHNhbWUsIGNvbnNpZGVyIHJlcXVpcmVkIFByb3BlcnRpZXMgYXMgd2VsbCBhbG9uZyB3aXRoIGluIFBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIHJlcXVpcmVkUHJvcGVydGllcywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgfHwgIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBzZWxlY3RPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5TZWxlY3RPcHRpb25zPy5tYXAoKG9TZWxlY3RPcHRpb24pID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG9QYXJhbWV0ZXJPcHRpb24pID0+IChvUGFyYW1ldGVyT3B0aW9uIGFzIFBhcmFtZXRlclR5cGVzKS5Qcm9wZXJ0eU5hbWU/LnZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24gKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhc2VsZWN0T3B0aW9ucy5pbmNsdWRlcyhzUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVuZGVyTGluZUNoYXJ0ID1cblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIgfHxcblx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQ/LkNoYXJ0VHlwZSAhPT0gXCJVSS5DaGFydFR5cGUvTGluZVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuUFJFU0VOVEFUSU9OVkFSSUFOVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdH1cblx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYWRkIGlucGFyYW1ldGVycyBmcm9tIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gaW5QYXJhbXMgQW4gYXJyYXkgY29udGFpbmluZyBleGlzdGluZyBpbnBhcmFtc1xuICogQHBhcmFtIHByb3BlcnRpZXMgQW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgcmVxdWlyZWRwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc1BhcmFtIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBwYXNzZWQgcHJvcGVydGllcyBhcmUgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gX2FkZEluUGFyYW1ldGVycyhpblBhcmFtczogUGFyYW1ldGVyVHlwZVtdLCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSB8IHN0cmluZ1tdLCBpc1BhcmFtOiBib29sZWFuKTogdm9pZCB7XG5cdHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gaXNQYXJhbSA/IGVsZW1lbnQgOiAoZWxlbWVudCBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlO1xuXHRcdGluUGFyYW1zLnB1c2goe1xuXHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZyxcblx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmdcblx0XHR9KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJDQTtB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
|
|
291
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwic01lYXN1cmVQYXRoIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJzTWVhc3VyZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RBZ2dNZWFzdXJlIiwiJHRhcmdldCIsIk1lYXN1cmVzIiwiZmlsdGVyIiwiY3VzdEFnZyIsInF1YWxpZmllciIsInZhbHVlIiwibGVuZ3RoIiwiRHluYW1pY01lYXN1cmVzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiTmFtZSIsInRvU3RyaW5nIiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5IiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJzRGltZW5zaW9uIiwiRGltZW5zaW9ucyIsInNvbWUiLCJvQWdncmVnYXRlIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwiZ3JvdXBhYmxlUHJvcCIsImdldFZpc3VhbEZpbHRlcnMiLCJlbnRpdHlUeXBlIiwic1Byb3BlcnR5UGF0aCIsIkZpbHRlckZpZWxkcyIsInZpc3VhbEZpbHRlciIsIm9WaXN1YWxGaWx0ZXIiLCJ2YWx1ZUxpc3QiLCJvVkZQYXRoIiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Iiwic3BsaXQiLCJxdWFsaWZpZXJWTCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwidmFsdWVPZiIsImNvbGxlY3Rpb25QYXRoIiwiQ29sbGVjdGlvblBhdGgiLCJjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQiLCJnZXRFbnRpdHlTZXQiLCJuYW1lIiwidmFsdWVMaXN0UGFyYW1zIiwiUGFyYW1ldGVycyIsIm91dFBhcmFtZXRlciIsImluUGFyYW1ldGVycyIsImFQYXJhbWV0ZXJzIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJrZXlzIiwibWFwIiwia2V5IiwiZ2V0Q29udGV4dFBhdGgiLCJfYWRkSW5QYXJhbWV0ZXJzIiwidmFsdWVMaXN0UGFyYW0iLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsIiRUeXBlIiwiYk5vdEZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInB1c2giLCJmb3JFYWNoIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZSIsIlVJIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJIaWRkZW4iLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5U2V0TmFtZSIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJyZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInZhbHVlbGlzdFByb3BlcnR5IiwiYklzUmFuZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTIiwiVkFMVUVMSVNUIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsIm5vdCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiX2V4cG9ydHMiLCJpblBhcmFtcyIsInByb3BlcnRpZXMiLCJpc1BhcmFtIiwiZWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3QsXG5cdFZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBQYXJhbWV0ZXJUeXBlcywgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0SXNSZXF1aXJlZCwgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0dmFsdWVsaXN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0Ly8gQ3VzdG9tIGFnZ3JlZ2F0ZSBtYXRjaCBmb3VuZFxuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbiAob0FnZ3JlZ2F0ZSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKCFiQWdncmVnYXRhYmxlKSB7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdFx0aWYgKChhZ2dyZWdhdGFibGVQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVHlwZSA9IHtcblx0bG9jYWxEYXRhUHJvcGVydHk6IHN0cmluZztcblx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCB0aGUgdmlzdWFsIGZpbHRlcnMgb2JqZWN0IGZvciBhIHByb3BlcnR5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHBhcmFtIEZpbHRlckZpZWxkcyBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsIGZpbHRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGxldCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXN1YWxGaWx0ZXI6IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gRmlsdGVyRmllbGRzW3NQcm9wZXJ0eVBhdGhdO1xuXHRpZiAob1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3QpIHtcblx0XHRjb25zdCBvVkZQYXRoID0gb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0ID0gb1ZGUGF0aC5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyVkwgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQubGVuZ3RoID4gMSA/IGBWYWx1ZUxpc3QjJHthbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV19YCA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCkgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LltxdWFsaWZpZXJWTCBhcyBrZXlvZiBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl0gYXMgVmFsdWVMaXN0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSBhcyBib29sZWFuKSB8fCBmYWxzZTtcblx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGgudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRgLyR7Y29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IFBhcmFtZXRlclR5cGVbXSA9IFtdO1xuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdFx0XHRhUGFyYW1ldGVycyA9IHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIGFQYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBWYWx1ZUxpc3RQYXJhbWV0ZXJJbikuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW0uVmFsdWVMaXN0UHJvcGVydHkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9JblBhcmFtZXRlcikge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZpbHRlclJlc3RyaWN0aW9ucyBvZiAke3NQcm9wZXJ0eVBhdGh9IGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5VST8uW2BQcmVzZW50YXRpb25WYXJpYW50IyR7cHZRdWFsaWZpZXJ9YF07XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGh9YCB8fCBgLyR7Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIgPSB7fTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5pc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzO1xuXHRcdFx0XHRsZXQgY2hhcnRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uUGF0aDxDaGFydD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb24gYXMgQW5ub3RhdGlvblBhdGg8Q2hhcnQ+O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjaGFydEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBfYmdldFZGQWdncmVnYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBfY2hlY2tWRkFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICghX2JnZXRWRkFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb24uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRcdGAke2NoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJEFubm90YXRpb25QYXRoL2Bcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkb25lIHRvIGF2b2lkIHJlcGV0aXRpdmUgZW50aXR5IHR5cGUgaW4gY2FzZSBvZiBub24tcGFyYW1ldGVyaXplZCBlbnRpdHkgc2V0IGUuZyAvU2FsZXNPcmRlck1hbmFnZS9jb20uY19zYWxlc29yZGVybWFuYWdlX3NkX2FnZ3JlZ2F0ZS5TYWxlc09yZGVyTWFuYWdlXG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHRcdFx0bGV0IHByZXNlbnRhdGlvbkFubm90YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCByZWxhdGl2ZUFubm90YXRpb25QYXRoID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRgJHtwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfS9gLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZUFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IFwiL1wiICsgZW50aXR5U2V0TmFtZSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uID8gcHJlc2VudGF0aW9uQW5ub3RhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5vdXRQYXJhbWV0ZXIgPSBvdXRQYXJhbWV0ZXI/LkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgPSBpblBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIudmFsdWVsaXN0UHJvcGVydHkgPSBvdXRQYXJhbWV0ZXI/LlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVFeHByZXNzaW9uKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlRXhwcmVzc2lvbihub3QoYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbikpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ZRdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25WYXJpYW50Pihcblx0XHRcdFx0XHRcdFx0XHRgQFVJLlNlbGVjdGlvblZhcmlhbnQjJHtzdlF1YWxpZmllcn1gXG5cdFx0XHRcdFx0XHRcdCk/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGxldCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRgJHtzdkFubm90YXRpb24/LmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uID8gc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0Py5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc3RyaWN0ZWRQcm9wZXJ0eSA9IGFSZXN0cmljdGVkUHJvcGVydGllcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHQocmVzdHJpY3RlZE5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHk/LnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBvUmVzdHJpY3RlZFByb3BlcnR5Py5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldE9yU2luZ2xldG9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldE9yU2luZ2xldG9uKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXRPclNpbmdsZXRvbi5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVxdWlyZVByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnB1c2gob1JlcXVpcmVQcm9wZXJ0eS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLmNvbmNhdChhUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgY29udGV4dCBQYXRoIGZvciBib3RoIHZpc3VhbCBmaWx0ZXIgYW5kIGZpbHRlciBiYXIgYXJlIHNhbWUsIGNvbnNpZGVyIHJlcXVpcmVkIFByb3BlcnRpZXMgYXMgd2VsbCBhbG9uZyB3aXRoIGluIFBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIHJlcXVpcmVkUHJvcGVydGllcywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgfHwgIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBzZWxlY3RPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5TZWxlY3RPcHRpb25zPy5tYXAoKG9TZWxlY3RPcHRpb24pID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG9QYXJhbWV0ZXJPcHRpb24pID0+IChvUGFyYW1ldGVyT3B0aW9uIGFzIFBhcmFtZXRlclR5cGVzKS5Qcm9wZXJ0eU5hbWU/LnZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24gKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhc2VsZWN0T3B0aW9ucy5pbmNsdWRlcyhzUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVuZGVyTGluZUNoYXJ0ID1cblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIgfHxcblx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQ/LkNoYXJ0VHlwZSAhPT0gXCJVSS5DaGFydFR5cGUvTGluZVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuUFJFU0VOVEFUSU9OVkFSSUFOVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdH1cblx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYWRkIGlucGFyYW1ldGVycyBmcm9tIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gaW5QYXJhbXMgQW4gYXJyYXkgY29udGFpbmluZyBleGlzdGluZyBpbnBhcmFtc1xuICogQHBhcmFtIHByb3BlcnRpZXMgQW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgcmVxdWlyZWRwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc1BhcmFtIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBwYXNzZWQgcHJvcGVydGllcyBhcmUgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gX2FkZEluUGFyYW1ldGVycyhpblBhcmFtczogUGFyYW1ldGVyVHlwZVtdLCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSB8IHN0cmluZ1tdLCBpc1BhcmFtOiBib29sZWFuKTogdm9pZCB7XG5cdHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gaXNQYXJhbSA/IGVsZW1lbnQgOiAoZWxlbWVudCBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlO1xuXHRcdGluUGFyYW1zLnB1c2goe1xuXHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZyxcblx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmdcblx0XHR9KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLG1CQUFtQixHQUFHLFNBQUFBLENBQzNCQyxnQkFBeUQsRUFDekRDLGVBQXNDLEVBQ3RDQyxpQkFBb0MsRUFDZDtJQUN0QixJQUFJQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsYUFBYTtJQUMzQyxJQUFJQyxRQUE0QjtJQUNoQyxNQUFNQyxnQkFBZ0IsR0FBR0wsaUJBQWlCLENBQUNNLDZCQUE2QixDQUFDLENBQUM7SUFDMUUsSUFBSUMsa0JBQWtCLEdBQUdQLGlCQUFpQixDQUFDUSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2pFLElBQUlDLGVBQWUsR0FBRyxFQUE0QjtJQUNsRDtJQUNBLElBQUlWLGVBQWUsRUFBRVcsT0FBTyxFQUFFQyxRQUFRLEVBQUU7TUFDdkNGLGVBQWUsR0FBR0osZ0JBQWdCLENBQUNPLE1BQU0sQ0FBQyxVQUFVQyxPQUF3QixFQUFFO1FBQzdFLE9BQU9BLE9BQU8sQ0FBQ0MsU0FBUyxLQUFLZixlQUFlLEVBQUVXLE9BQU8sRUFBRUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFSSxLQUFLO01BQzVFLENBQUMsQ0FBQztNQUNGWCxRQUFRLEdBQUdLLGVBQWUsQ0FBQ08sTUFBTSxHQUFHLENBQUMsR0FBR1AsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDSyxTQUFTLEdBQUdmLGVBQWUsRUFBRVcsT0FBTyxFQUFFQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUVJLEtBQUs7SUFDdEg7SUFDQTtJQUNBLElBQUksQ0FBQ04sZUFBZSxD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
|