@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
|
@@ -54,7 +54,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
54
54
|
}
|
|
55
55
|
const visualizations = presentation.Visualizations;
|
|
56
56
|
const pushFirstVizOfType = function (allowedTerms) {
|
|
57
|
-
const firstViz = visualizations
|
|
57
|
+
const firstViz = visualizations?.find(viz => viz.$target !== undefined && allowedTerms.includes(viz.$target.term));
|
|
58
58
|
if (firstViz) {
|
|
59
59
|
visualizationAnnotations.push({
|
|
60
60
|
visualization: firstViz.$target,
|
|
@@ -87,8 +87,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
87
87
|
throw new Error("Annotation Path for the SPV mentioned in the manifest is not found, Please add the SPV in the annotation");
|
|
88
88
|
}
|
|
89
89
|
} else {
|
|
90
|
-
|
|
91
|
-
return (_entityType$annotatio = entityType.annotations) === null || _entityType$annotatio === void 0 ? void 0 : (_entityType$annotatio2 = _entityType$annotatio.UI) === null || _entityType$annotatio2 === void 0 ? void 0 : _entityType$annotatio2.SelectionPresentationVariant;
|
|
90
|
+
return entityType.annotations?.UI?.SelectionPresentationVariant;
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
_exports.getSelectionPresentationVariant = getSelectionPresentationVariant;
|
|
@@ -106,40 +105,35 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
106
105
|
let hasTable = false,
|
|
107
106
|
hasChart = false;
|
|
108
107
|
if (isALP) {
|
|
109
|
-
if (presentationVariant
|
|
108
|
+
if (presentationVariant?.Visualizations) {
|
|
110
109
|
const visualizations = presentationVariant.Visualizations;
|
|
111
110
|
visualizations.forEach(visualization => {
|
|
112
|
-
|
|
113
|
-
if (((_visualization$$targe = visualization.$target) === null || _visualization$$targe === void 0 ? void 0 : _visualization$$targe.term) === "com.sap.vocabularies.UI.v1.LineItem") {
|
|
111
|
+
if (visualization.$target?.term === "com.sap.vocabularies.UI.v1.LineItem") {
|
|
114
112
|
hasTable = true;
|
|
115
113
|
}
|
|
116
|
-
if (
|
|
114
|
+
if (visualization.$target?.term === "com.sap.vocabularies.UI.v1.Chart") {
|
|
117
115
|
hasChart = true;
|
|
118
116
|
}
|
|
119
117
|
});
|
|
120
118
|
}
|
|
121
119
|
return hasChart && hasTable;
|
|
122
120
|
} else {
|
|
123
|
-
return
|
|
124
|
-
|
|
125
|
-
return ((_visualization$$targe3 = visualization.$target) === null || _visualization$$targe3 === void 0 ? void 0 : _visualization$$targe3.term) === "com.sap.vocabularies.UI.v1.LineItem" || ((_visualization$$targe4 = visualization.$target) === null || _visualization$$targe4 === void 0 ? void 0 : _visualization$$targe4.term) === "com.sap.vocabularies.UI.v1.Chart";
|
|
121
|
+
return presentationVariant?.Visualizations && !!presentationVariant.Visualizations.find(visualization => {
|
|
122
|
+
return visualization.$target?.term === "com.sap.vocabularies.UI.v1.LineItem" || visualization.$target?.term === "com.sap.vocabularies.UI.v1.Chart";
|
|
126
123
|
});
|
|
127
124
|
}
|
|
128
125
|
}
|
|
129
126
|
_exports.isPresentationCompliant = isPresentationCompliant;
|
|
130
127
|
function getDefaultLineItem(entityType) {
|
|
131
|
-
|
|
132
|
-
return (_entityType$annotatio3 = entityType.annotations.UI) === null || _entityType$annotatio3 === void 0 ? void 0 : _entityType$annotatio3.LineItem;
|
|
128
|
+
return entityType.annotations.UI?.LineItem;
|
|
133
129
|
}
|
|
134
130
|
_exports.getDefaultLineItem = getDefaultLineItem;
|
|
135
131
|
function getDefaultChart(entityType) {
|
|
136
|
-
|
|
137
|
-
return (_entityType$annotatio4 = entityType.annotations.UI) === null || _entityType$annotatio4 === void 0 ? void 0 : _entityType$annotatio4.Chart;
|
|
132
|
+
return entityType.annotations.UI?.Chart;
|
|
138
133
|
}
|
|
139
134
|
_exports.getDefaultChart = getDefaultChart;
|
|
140
135
|
function getDefaultSelectionVariant(entityType) {
|
|
141
|
-
|
|
142
|
-
return (_entityType$annotatio5 = entityType.annotations) === null || _entityType$annotatio5 === void 0 ? void 0 : (_entityType$annotatio6 = _entityType$annotatio5.UI) === null || _entityType$annotatio6 === void 0 ? void 0 : _entityType$annotatio6.SelectionVariant;
|
|
136
|
+
return entityType.annotations?.UI?.SelectionVariant;
|
|
143
137
|
}
|
|
144
138
|
_exports.getDefaultSelectionVariant = getDefaultSelectionVariant;
|
|
145
139
|
function getSelectionVariant(entityType, converterContext) {
|
|
@@ -170,7 +164,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
170
164
|
annotation,
|
|
171
165
|
converterContext
|
|
172
166
|
} = resolvedTarget;
|
|
173
|
-
const term = annotation
|
|
167
|
+
const term = annotation?.term;
|
|
174
168
|
let visualizationAnnotations = [];
|
|
175
169
|
if (term) {
|
|
176
170
|
switch (term) {
|
|
@@ -239,7 +233,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
239
233
|
};
|
|
240
234
|
const resolvedVisualization = resolvedTarget.annotation;
|
|
241
235
|
let chartVisualization, tableVisualization;
|
|
242
|
-
const term = resolvedVisualization
|
|
236
|
+
const term = resolvedVisualization?.term;
|
|
243
237
|
for (const visualizationAndPath of getVisualizationsAndPaths(resolvedTarget, visualizationPath, isMacroOrMultipleView)) {
|
|
244
238
|
const {
|
|
245
239
|
visualization,
|
|
@@ -273,13 +267,13 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
273
267
|
}
|
|
274
268
|
return {
|
|
275
269
|
visualizations: [chartVisualization, tableVisualization].filter(isVisualization),
|
|
276
|
-
annotationPath: inConverterContext.getEntitySetBasedAnnotationPath(
|
|
270
|
+
annotationPath: inConverterContext.getEntitySetBasedAnnotationPath(resolvedVisualization?.fullyQualifiedName ?? "/"),
|
|
277
271
|
associatedSelectionVariantPath: params.associatedSelectionVariant ? inConverterContext.getEntitySetBasedAnnotationPath(params.associatedSelectionVariant.fullyQualifiedName) : undefined
|
|
278
272
|
};
|
|
279
273
|
}
|
|
280
274
|
_exports.getDataVisualizationConfiguration = getDataVisualizationConfiguration;
|
|
281
275
|
function isVisualization(visualization) {
|
|
282
|
-
return [VisualizationType.Table, VisualizationType.Chart].includes(visualization
|
|
276
|
+
return [VisualizationType.Table, VisualizationType.Chart].includes(visualization?.type);
|
|
283
277
|
}
|
|
284
278
|
function validatePresentationMetaPath(metaPath, objectTerm) {
|
|
285
279
|
// perform validation only if annotation set (to avoid backwards compatibility issues for test without annotations)
|
|
@@ -329,8 +323,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
329
323
|
}
|
|
330
324
|
_exports.getUiControl = getUiControl;
|
|
331
325
|
const annotationExistsInPresentationVariant = function (presentationVariantAnnotation, annotationTerm) {
|
|
332
|
-
|
|
333
|
-
return ((_presentationVariantA = presentationVariantAnnotation.Visualizations) === null || _presentationVariantA === void 0 ? void 0 : _presentationVariantA.some(visualization => visualization.value.includes(annotationTerm))) ?? false;
|
|
326
|
+
return presentationVariantAnnotation.Visualizations?.some(visualization => visualization.value.includes(annotationTerm)) ?? false;
|
|
334
327
|
};
|
|
335
328
|
_exports.annotationExistsInPresentationVariant = annotationExistsInPresentationVariant;
|
|
336
329
|
const prepareDefaultVisualization = function (visualizationType, baseVisualizationPath, converterContext) {
|
|
@@ -351,4 +344,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/convert
|
|
|
351
344
|
_exports.isAlpAnnotation = isAlpAnnotation;
|
|
352
345
|
return _exports;
|
|
353
346
|
}, false);
|
|
354
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInZpc3VhbGl6YXRpb25QYXRoIiwiY29udmVydGVyQ29udGV4dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInByZXNlbnRhdGlvbiIsInNlbGVjdGlvblZhcmlhbnQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJ1bmRlZmluZWQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyIsImlzQUxQIiwiaXNBbHBBbm5vdGF0aW9uIiwiZmluYWxTZWxlY3Rpb25WYXJpYW50IiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsImJhc2VWaXN1YWxpemF0aW9uUGF0aCIsInNwbGl0IiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJhbm5vdGF0aW9uRXhpc3RzSW5QcmVzZW50YXRpb25WYXJpYW50IiwiZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiIsInByZXBhcmVEZWZhdWx0VmlzdWFsaXphdGlvbiIsInB1c2giLCJkZWZhdWx0Q2hhcnRBbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsInB1c2hGaXJzdFZpek9mVHlwZSIsImFsbG93ZWRUZXJtcyIsImZpcnN0Vml6IiwiZmluZCIsInZpeiIsIiR0YXJnZXQiLCJpbmNsdWRlcyIsInRlcm0iLCJ2aXN1YWxpemF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsIl9leHBvcnRzIiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImVudGl0eVR5cGUiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvMiIsImFubm90YXRpb25zIiwiVUkiLCJTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiaGFzVGFibGUiLCJoYXNDaGFydCIsImZvckVhY2giLCJfdmlzdWFsaXphdGlvbiQkdGFyZ2UiLCJfdmlzdWFsaXphdGlvbiQkdGFyZ2UyIiwiX3Zpc3VhbGl6YXRpb24kJHRhcmdlMyIsIl92aXN1YWxpemF0aW9uJCR0YXJnZTQiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJfZW50aXR5VHlwZSRhbm5vdGF0aW8zIiwiTGluZUl0ZW0iLCJnZXREZWZhdWx0Q2hhcnQiLCJfZW50aXR5VHlwZSRhbm5vdGF0aW80IiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudCIsIl9lbnRpdHlUeXBlJGFubm90YXRpbzUiLCJfZW50aXR5VHlwZSRhbm5vdGF0aW82IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwiZ2V0VmlzdWFsaXphdGlvbnNBbmRQYXRocyIsImNvbmNhdCIsImdldERhdGFWaXN1YWxpemF0aW9uUHJlc2VudGF0aW9uIiwiaW5Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwicGFyYW1zIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsImFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50Iiwic2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb24iLCJyZXNvbHZlZFZpc3VhbGl6YXRpb24iLCJjaGFydFZpc3VhbGl6YXRpb24iLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJ2aXN1YWxpemF0aW9uQW5kUGF0aCIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmciLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24iLCJUYWJsZSIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwic2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24iLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlVHlwZSIsIk1JU1NJTkdfTElORUlURU0iLCJjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiIsIk1JU1NJTkdfQ0hBUlQiLCJmaWx0ZXIiLCJpc1Zpc3VhbGl6YXRpb24iLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnRQYXRoIiwiVmlzdWFsaXphdGlvblR5cGUiLCJ0eXBlIiwidmFsaWRhdGVQcmVzZW50YXRpb25NZXRhUGF0aCIsIm1ldGFQYXRoIiwib2JqZWN0VGVybSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJzb21lIiwic2VhcmNoIiwiUmVnRXhwIiwiZ2V0VWlDb250cm9sIiwicHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnRyb2xQYXRoIiwiZ2V0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IiwibW9kZWwiLCJnZXRNb2RlbCIsIkFycmF5IiwiaXNBcnJheSIsImdldE1ldGFDb250ZXh0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvblRlcm0iLCJfcHJlc2VudGF0aW9uVmFyaWFudEEiLCJ2aXN1YWxpemF0aW9uVHlwZSIsImdldEVudGl0eVR5cGUiLCJkZWZhdWx0QW5ub3RhdGlvbiIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiQW5hbHl0aWNhbExpc3RQYWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhVmlzdWFsaXphdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkQW5ub3RhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL0NoYXJ0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiwgY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uLCBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIH0gZnJvbSBcIi4vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcIi4vVGFibGVcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5leHBvcnQgdHlwZSBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zID0gTGluZUl0ZW0gfCBDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcbmV4cG9ydCB0eXBlIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQ7XG5leHBvcnQgdHlwZSBQcmVzZW50YXRpb25WaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgPSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0O1xuZXhwb3J0IHR5cGUgVmlzdWFsaXphdGlvbkFuZFBhdGggPSB7XG5cdHZpc3VhbGl6YXRpb246IEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudD86IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD47XG59O1xuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0ge1xuXHR2aXN1YWxpemF0aW9uczogKFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbilbXTtcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZztcblx0aW5NdWx0aVZpZXc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24gPSBmdW5jdGlvbiAoXG5cdGFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc01hY3JvT3JNdWx0aXBsZVZpZXc/OiBib29sZWFuXG4pOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdIHtcblx0Y29uc3QgeyBwcmVzZW50YXRpb24sIHNlbGVjdGlvblZhcmlhbnQgfSA9IGlzQW5ub3RhdGlvbk9mVHlwZTxQcmVzZW50YXRpb25WYXJpYW50VHlwZT4oXG5cdFx0YW5ub3RhdGlvbixcblx0XHRVSUFubm90YXRpb25UeXBlcy5QcmVzZW50YXRpb25WYXJpYW50VHlwZVxuXHQpXG5cdFx0PyB7IHByZXNlbnRhdGlvbjogYW5ub3RhdGlvbiwgc2VsZWN0aW9uVmFyaWFudDogdW5kZWZpbmVkIH1cblx0XHQ6IHsgcHJlc2VudGF0aW9uOiBhbm5vdGF0aW9uLlByZXNlbnRhdGlvblZhcmlhbnQsIHNlbGVjdGlvblZhcmlhbnQ6IGFubm90YXRpb24uU2VsZWN0aW9uVmFyaWFudCB9O1xuXHRjb25zdCB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblx0Y29uc3QgaXNBTFAgPSBpc0FscEFubm90YXRpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGZpbmFsU2VsZWN0aW9uVmFyaWFudCA9XG5cdFx0IWlzQUxQICYmIC8vIERvbid0IGFkZCB0aGUgU2VsZWN0aW9uVmFyaWFudCBvbiBBTFAgLT4gd2lsbCBiZSBtYW5hZ2VkIGJ5IEZJT1JJVEVDSFAxLTI2MjM3XG5cdFx0IShjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJiAhaXNNYWNyb09yTXVsdGlwbGVWaWV3KSAvL09uIExpc3RSZXBvcnQgd2l0aCBzaW5nbGUgdmlldyB0aGUgU2VsZWN0aW9uVmFyaWFudCBpcyBtYW5hZ2VkIGJ5IEZpbHRlckJhclxuXHRcdFx0PyBzZWxlY3Rpb25WYXJpYW50XG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYmFzZVZpc3VhbGl6YXRpb25QYXRoID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpWzBdO1xuXHRpZiAoKGlzTWFjcm9Pck11bHRpcGxlVmlldyA9PT0gdHJ1ZSB8fCBpc0FMUCkgJiYgIWlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvbiwgaXNBTFApKSB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uRXhpc3RzSW5QcmVzZW50YXRpb25WYXJpYW50KHByZXNlbnRhdGlvbiwgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0pKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uID0gcHJlcGFyZURlZmF1bHRWaXN1YWxpemF0aW9uKFxuXHRcdFx0XHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0XHRcdFx0YmFzZVZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGRlZmF1bHRMaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zLnB1c2goeyAuLi5kZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uLCAuLi57IHNlbGVjdGlvblZhcmlhbnQ6IGZpbmFsU2VsZWN0aW9uVmFyaWFudCB9IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWFubm90YXRpb25FeGlzdHNJblByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uLCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRDaGFydEFubm90YXRpb24gPSBwcmVwYXJlRGVmYXVsdFZpc3VhbGl6YXRpb24oVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQsIGJhc2VWaXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoZGVmYXVsdENoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaChkZWZhdWx0Q2hhcnRBbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb24uVmlzdWFsaXphdGlvbnM7XG5cdGNvbnN0IHB1c2hGaXJzdFZpek9mVHlwZSA9IGZ1bmN0aW9uIChhbGxvd2VkVGVybXM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3RWaXogPSB2aXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB2aXouJHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIGFsbG93ZWRUZXJtcy5pbmNsdWRlcyh2aXouJHRhcmdldC50ZXJtKSk7XG5cdFx0aWYgKGZpcnN0Vml6KSB7XG5cdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb246IGZpcnN0Vml6LiR0YXJnZXQgYXMgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7YmFzZVZpc3VhbGl6YXRpb25QYXRofSR7Zmlyc3RWaXoudmFsdWV9YCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogZmluYWxTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChpc0FMUCkge1xuXHRcdC8vIEluIGNhc2Ugb2YgQUxQLCB3ZSB1c2UgdGhlIGZpcnN0IExpbmVJdGVtIGFuZCB0aGUgZmlyc3QgQ2hhcnRcblx0XHRwdXNoRmlyc3RWaXpPZlR5cGUoW1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtXSk7XG5cdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5DaGFydF0pO1xuXHR9IGVsc2Uge1xuXHRcdC8vIE90aGVyd2lzZSwgd2UgdXNlIHRoZSBmaXJzdCB2aXogb25seSAoQ2hhcnQgb3IgTGluZUl0ZW0pXG5cdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSwgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRdKTtcblx0fVxuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZCwgUGxlYXNlIGFkZCB0aGUgU1BWIGluIHRoZSBhbm5vdGF0aW9uXCIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDogU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0aXNBTFA6IGJvb2xlYW5cbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0cmV0dXJuIGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgcHJlc2VudCBpbiB0aGUgU1BWIGFubm90YXRpb25cIik7XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSwgaXNBTFAgPSBmYWxzZSk6IGJvb2xlYW4ge1xuXHRsZXQgaGFzVGFibGUgPSBmYWxzZSxcblx0XHRoYXNDaGFydCA9IGZhbHNlO1xuXHRpZiAoaXNBTFApIHtcblx0XHRpZiAocHJlc2VudGF0aW9uVmFyaWFudD8uVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gcHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucztcblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0pIHtcblx0XHRcdFx0XHRoYXNUYWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQpIHtcblx0XHRcdFx0XHRoYXNDaGFydCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gaGFzQ2hhcnQgJiYgaGFzVGFibGU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnQ/LlZpc3VhbGl6YXRpb25zICYmXG5cdFx0XHQhIXByZXNlbnRhdGlvblZhcmlhbnQuVmlzdWFsaXphdGlvbnMuZmluZCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHwgdmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5MaW5lSXRlbTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IENoYXJ0IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkNoYXJ0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25WYXJpYW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnQoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgc2VsZWN0aW9uVmFyaWFudDtcblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRzZWxlY3Rpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5TZWxlY3Rpb25WYXJpYW50IGFzIFNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZWxlY3Rpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB2aXN1YWxpemF0aW9ucyByZWxhdGVkIHRvIGFuIGFubm90YXRpb24uXG4gKiBAcGFyYW0gcmVzb2x2ZWRUYXJnZXQgVGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gaXNNYWNyb09yTXVsdGlwbGVWaWV3IFRydWUgaWYgaXQncyBmb3IgYSBidWlsZGluZyBibG9jayBvciBhIG11bHRpcGxlIHZpZXdzIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFRoZSB2aXN1YWxpemF0aW9ucyB3aXRoIHRoZWlyIGNvbmZpZ3VyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvbnNBbmRQYXRocyhcblx0cmVzb2x2ZWRUYXJnZXQ6IFJlc29sdmVkQW5ub3RhdGlvbkNvbnRleHQ8RGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucz4sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGlzTWFjcm9Pck11bHRpcGxlVmlldz86IGJvb2xlYW5cbik6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10ge1xuXHRjb25zdCB7IGFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQgfSA9IHJlc29sdmVkVGFyZ2V0O1xuXHRjb25zdCB0ZXJtID0gYW5ub3RhdGlvbj8udGVybTtcblx0bGV0IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uczogVmlzdWFsaXphdGlvbkFuZFBhdGhbXSA9IFtdO1xuXHRpZiAodGVybSkge1xuXHRcdHN3aXRjaCAodGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uOiBhbm5vdGF0aW9uIGFzIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogdmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0Z2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihhbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgaXNNYWNyb09yTXVsdGlwbGVWaWV3KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgdmlzdWFsaXphdGlvbnMgcmVsYXRlZCB0byBhIHZpc3VhbGl6YXRpb25QYXRoLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBpbkNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YVZpc3VhbGl6YXRpb25QcmVzZW50YXRpb24oXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGluQ29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCB7XG5cdGlmICh2aXN1YWxpemF0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBhbm5vdGF0aW9uID0gaW5Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0cmV0dXJuIGFubm90YXRpb24uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgdmlzdWFsaXphdGlvbnMgcmVsYXRlZCB0byBhIHZpc3VhbGl6YXRpb25QYXRoLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBpbkNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLmlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgVHJ1ZSBpZiBpdCdzIGZvciBhIGNvbmRlbnNlZCBsYXlvdXRcbiAqIEBwYXJhbSBwYXJhbXMudmlld0NvbmZpZ3VyYXRpb24gVGhlIHZpZXcgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHBhcmFtcy5kb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQgVHJ1ZSBpZiB0aGUgY2hlY2sgdG8gXCJBcHBseVN1cHBvcnRlZFwiIGlzIHNraXBwZWRcbiAqIEBwYXJhbSBwYXJhbXMuYXNzb2NpYXRlZFByZXNlbnRhdGlvblZhcmlhbnRQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcmVzZW50YXRpb24gdG8gYXBwbHlcbiAqIEBwYXJhbSBwYXJhbXMuaXNNYWNyb09yTXVsdGlwbGVWaWV3IFRydWUgaWYgaXQncyBmb3IgYSBidWlsZGluZyBibG9jayBvciBhIG11bHRpcGxlIHZpZXdzIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBwYXJhbXMuc2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb24gVHJ1ZSBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSBjaGFydCB2aXN1YWxpemF0aW9uIGZvciB0ZW1wbGF0aW5nXG4gKiBAcmV0dXJucyBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSB2aXN1YWxpemF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRpbkNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGFyYW1zOiBQYXJ0aWFsPHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBib29sZWFuO1xuXHRcdGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZDogYm9vbGVhbjtcblx0XHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGU7XG5cdFx0aXNNYWNyb09yTXVsdGlwbGVWaWV3OiBib29sZWFuO1xuXHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiBib29sZWFuO1xuXHR9PlxuKTogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHtcblx0Y29uc3Qge1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkLFxuXHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdGlzTWFjcm9Pck11bHRpcGxlVmlldyxcblx0XHRzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvblxuXHR9ID0gcGFyYW1zO1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9XG5cdFx0dmlzdWFsaXphdGlvblBhdGggIT09IFwiXCJcblx0XHRcdD8gaW5Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uPERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM+KHZpc3VhbGl6YXRpb25QYXRoKVxuXHRcdFx0OiB7IGFubm90YXRpb246IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogaW5Db252ZXJ0ZXJDb250ZXh0IH07XG5cdGNvbnN0IHJlc29sdmVkVmlzdWFsaXphdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblxuXHRsZXQgY2hhcnRWaXN1YWxpemF0aW9uLCB0YWJsZVZpc3VhbGl6YXRpb247XG5cdGNvbnN0IHRlcm0gPSByZXNvbHZlZFZpc3VhbGl6YXRpb24/LnRlcm07XG5cdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbkFuZFBhdGggb2YgZ2V0VmlzdWFsaXphdGlvbnNBbmRQYXRocyhyZXNvbHZlZFRhcmdldCwgdmlzdWFsaXphdGlvblBhdGgsIGlzTWFjcm9Pck11bHRpcGxlVmlldykpIHtcblx0XHRjb25zdCB7IHZpc3VhbGl6YXRpb24sIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50IH0gPSB2aXN1YWxpemF0aW9uQW5kUGF0aDtcblx0XHRzd2l0Y2ggKHZpc3VhbGl6YXRpb24udGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uID0gc2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb25cblx0XHRcdFx0XHQ/IGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmcoY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgsIHZpc3VhbGl6YXRpb24pXG5cdFx0XHRcdFx0OiBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0XHRcdHZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQsXG5cdFx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pihcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZFZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdD8gdmlzdWFsaXphdGlvblBhdGhcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdCAgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uID0gVGFibGUuY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKHZpc3VhbGl6YXRpb24sIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB7XG5cdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IGdldERhdGFWaXN1YWxpemF0aW9uUHJlc2VudGF0aW9uKHZpc3VhbGl6YXRpb25QYXRoLCBpbkNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCA/PyBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGluQ29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdGNvbnN0IGlzQUxQID0gaXNBbHBBbm5vdGF0aW9uKGluQ29udmVydGVyQ29udGV4dCk7XG5cdGlmICghdGVybSB8fCAoaXNBTFAgJiYgdGFibGVWaXN1YWxpemF0aW9uID09PSB1bmRlZmluZWQpKSB7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uID0gVGFibGUuY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbihpbkNvbnZlcnRlckNvbnRleHQsIGlzTWFjcm9Pck11bHRpcGxlVmlldyAhPT0gdHJ1ZSk7XG5cdFx0aW5Db252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLk1JU1NJTkdfTElORUlURU0pO1xuXHR9XG5cdGlmIChpc0FMUCAmJiBjaGFydFZpc3VhbGl6YXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0VmlzdWFsaXphdGlvbiA9IGNyZWF0ZUJsYW5rQ2hhcnRWaXN1YWxpemF0aW9uKGluQ29udmVydGVyQ29udGV4dCk7XG5cdFx0aW5Db252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLk1JU1NJTkdfQ0hBUlQpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR2aXN1YWxpemF0aW9uczogW2NoYXJ0VmlzdWFsaXphdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uXS5maWx0ZXIoaXNWaXN1YWxpemF0aW9uKSxcblx0XHRhbm5vdGF0aW9uUGF0aDogaW5Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocmVzb2x2ZWRWaXN1YWxpemF0aW9uPy5mdWxseVF1YWxpZmllZE5hbWUgPz8gXCIvXCIpLFxuXHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aDogcGFyYW1zLmFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHQ/IGluQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHBhcmFtcy5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUpXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5mdW5jdGlvbiBpc1Zpc3VhbGl6YXRpb24odmlzdWFsaXphdGlvbjogdW5rbm93bik6IHZpc3VhbGl6YXRpb24gaXMgQ2hhcnRWaXN1YWxpemF0aW9uIHwgVGFibGVWaXN1YWxpemF0aW9uIHtcblx0cmV0dXJuIFtWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnRdLmluY2x1ZGVzKCh2aXN1YWxpemF0aW9uIGFzIENoYXJ0VmlzdWFsaXphdGlvbiB8IFRhYmxlVmlzdWFsaXphdGlvbik/LnR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmVzZW50YXRpb25NZXRhUGF0aChtZXRhUGF0aDogc3RyaW5nLCBvYmplY3RUZXJtOiBzdHJpbmcpOiB2b2lkIHtcblx0Ly8gcGVyZm9ybSB2YWxpZGF0aW9uIG9ubHkgaWYgYW5ub3RhdGlvbiBzZXQgKHRvIGF2b2lkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzc3VlcyBmb3IgdGVzdCB3aXRob3V0IGFubm90YXRpb25zKVxuXHRpZiAobWV0YVBhdGguaW5jbHVkZXMob2JqZWN0VGVybS5zbGljZSgwLCBvYmplY3RUZXJtLmxhc3RJbmRleE9mKFwiLlwiKSkpKSB7XG5cdFx0Y29uc3QgYWxsb3dlZFRlcm1zID0gW1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIG9iamVjdFRlcm1dO1xuXHRcdGlmIChcblx0XHRcdCFhbGxvd2VkVGVybXMuc29tZSgodGVybSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWV0YVBhdGguc2VhcmNoKG5ldyBSZWdFeHAoYCR7dGVybX0oI3wvfCQpYCkpID4gLTE7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbm5vdGF0aW9uIFBhdGggJHttZXRhUGF0aH0gbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgdmFsaWQgZm9yICR7b2JqZWN0VGVybX1gKTtcblx0XHR9XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgVUkgY29udHJvbHMgKGVpdGhlciBhIFVJLkxpbmVJdGVtLCBvciBhIFVJLkNoYXJ0KS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25Db250ZXh0IE9iamVjdCBvZiB0aGUgcHJlc2VudGF0aW9uIGNvbnRleHQgKGVpdGhlciBhIHByZXNlbnRhdGlvbiB2YXJpYW50LCBvciBhIFVJLkxpbmVJdGVtLCBvciBhIFVJLkNoYXJ0KVxuICogQHBhcmFtIGNvbnRyb2xQYXRoIENvbnRyb2wgcGF0aFxuICogQHJldHVybnMgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRyb2wgKGVpdGhlciBhIFVJLkxpbmVJdGVtLCBvciBhIFVJLkNoYXJ0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlDb250cm9sKHByZXNlbnRhdGlvbkNvbnRleHQ6IENvbnRleHQsIGNvbnRyb2xQYXRoOiBzdHJpbmcpOiBDb250ZXh0IHtcblx0dmFsaWRhdGVQcmVzZW50YXRpb25NZXRhUGF0aChwcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKSwgY29udHJvbFBhdGgpO1xuXHRjb25zdCBwcmVzZW50YXRpb24gPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQocHJlc2VudGF0aW9uQ29udGV4dCksXG5cdFx0bW9kZWwgPSBwcmVzZW50YXRpb25Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGlmIChwcmVzZW50YXRpb24pIHtcblx0XHRpZiAoXG5cdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4ocHJlc2VudGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxQcmVzZW50YXRpb25WYXJpYW50PihwcmVzZW50YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlKVxuXHRcdCkge1xuXHRcdFx0bGV0IHZpc3VhbGl6YXRpb25zO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4ocHJlc2VudGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkgJiZcblx0XHRcdFx0cHJlc2VudGF0aW9uLlByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdCkge1xuXHRcdFx0XHR2aXN1YWxpemF0aW9ucyA9IHByZXNlbnRhdGlvbi5QcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Fubm90YXRpb25PZlR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4ocHJlc2VudGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5QcmVzZW50YXRpb25WYXJpYW50VHlwZSkpIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb24uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2aXN1YWxpemF0aW9ucykpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIHZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0dmlzdWFsaXphdGlvbi50eXBlID09IFwiQW5ub3RhdGlvblBhdGhcIiAmJlxuXHRcdFx0XHRcdFx0dmlzdWFsaXphdGlvbi52YWx1ZS5pbmNsdWRlcyhjb250cm9sUGF0aCkgJiZcblx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIG9iamVjdCBleGlzdHMgZm9yIFByZXNlbnRhdGlvblZhcmlhbnQgdmlzdWFsaXphdGlvblxuXHRcdFx0XHRcdFx0ISFtb2RlbC5nZXRNZXRhQ29udGV4dChwcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIkBcIilbMF0gKyB2aXN1YWxpemF0aW9uLnZhbHVlKS5nZXRPYmplY3QoKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbFBhdGggPSB2aXN1YWxpemF0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25Db250ZXh0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbW9kZWwuZ2V0TWV0YUNvbnRleHQocHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCJAXCIpWzBdICsgY29udHJvbFBhdGgpO1xufVxuZXhwb3J0IGNvbnN0IGFubm90YXRpb25FeGlzdHNJblByZXNlbnRhdGlvblZhcmlhbnQgPSBmdW5jdGlvbiAoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0YW5ub3RhdGlvblRlcm06IFByZXNlbnRhdGlvblZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uc1xuKTogYm9vbGVhbiB7XG5cdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5WaXN1YWxpemF0aW9ucz8uc29tZSgodmlzdWFsaXphdGlvbikgPT4gdmlzdWFsaXphdGlvbi52YWx1ZS5pbmNsdWRlcyhhbm5vdGF0aW9uVGVybSkpID8/IGZhbHNlO1xufTtcbmNvbnN0IHByZXBhcmVEZWZhdWx0VmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChcblx0dmlzdWFsaXphdGlvblR5cGU6IFByZXNlbnRhdGlvblZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyxcblx0YmFzZVZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogVmlzdWFsaXphdGlvbkFuZFBhdGggfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGRlZmF1bHRBbm5vdGF0aW9uID1cblx0XHR2aXN1YWxpemF0aW9uVHlwZSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gPyBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSkgOiBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdGlmIChkZWZhdWx0QW5ub3RhdGlvbikge1xuXHRcdHJldHVybiB7XG5cdFx0XHR2aXN1YWxpemF0aW9uOiBkZWZhdWx0QW5ub3RhdGlvbixcblx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtiYXNlVmlzdWFsaXphdGlvblBhdGh9JHtjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdGRlZmF1bHRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0KX1gLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5leHBvcnQgY29uc3QgaXNBbHBBbm5vdGF0aW9uID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5Q08sTUFBTUEsK0JBQStCLEdBQUcsU0FBQUEsQ0FDOUNDLFVBQWtFLEVBQ2xFQyxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUN6REMscUJBQStCLEVBQ047SUFDekIsTUFBTTtNQUFFQyxZQUFZO01BQUVDO0lBQWlCLENBQUMsR0FBR0Msa0JBQWtCLENBQzVETixVQUFVLHNEQUVYLENBQUMsR0FDRTtNQUFFSSxZQUFZLEVBQUVKLFVBQVU7TUFBRUssZ0JBQWdCLEVBQUVFO0lBQVUsQ0FBQyxHQUN6RDtNQUFFSCxZQUFZLEVBQUVKLFVBQVUsQ0FBQ1EsbUJBQW1CO01BQUVILGdCQUFnQixFQUFFTCxVQUFVLENBQUNTO0lBQWlCLENBQUM7SUFDbEcsTUFBTUMsd0JBQWdELEdBQUcsRUFBRTtJQUMzRCxNQUFNQyxLQUFLLEdBQUdDLGVBQWUsQ0FBQ1YsZ0JBQWdCLENBQUM7SUFDL0MsTUFBTVcscUJBQXFCLEdBQzFCLENBQUNGLEtBQUs7SUFBSTtJQUNWLEVBQUVULGdCQUFnQixDQUFDWSxlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNDLFVBQVUsSUFBSSxDQUFDYixxQkFBcUIsQ0FBQyxDQUFDO0lBQUEsRUFDekZFLGdCQUFnQixHQUNoQkUsU0FBUztJQUNiLE1BQU1VLHFCQUFxQixHQUFHaEIsaUJBQWlCLENBQUNpQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQ2YscUJBQXFCLEtBQUssSUFBSSxJQUFJUSxLQUFLLEtBQUssQ0FBQ1EsdUJBQXVCLENBQUNmLFlBQVksRUFBRU8sS0FBSyxDQUFDLEVBQUU7TUFDL0YsSUFBSSxDQUFDUyxxQ0FBcUMsQ0FBQ2hCLFlBQVksdUNBQTRCLENBQUMsRUFBRTtRQUNyRixNQUFNaUIseUJBQXlCLEdBQUdDLDJCQUEyQix3Q0FFNURMLHFCQUFxQixFQUNyQmYsZ0JBQ0QsQ0FBQztRQUNELElBQUltQix5QkFBeUIsRUFBRTtVQUM5Qlgsd0JBQXdCLENBQUNhLElBQUksQ0FBQztZQUFFLEdBQUdGLHlCQUF5QjtZQUFFLEdBQUc7Y0FBRWhCLGdCQUFnQixFQUFFUTtZQUFzQjtVQUFFLENBQUMsQ0FBQztRQUNoSDtNQUNEO01BQ0EsSUFBSSxDQUFDTyxxQ0FBcUMsQ0FBQ2hCLFlBQVksb0NBQXlCLENBQUMsRUFBRTtRQUNsRixNQUFNb0Isc0JBQXNCLEdBQUdGLDJCQUEyQixxQ0FBMEJMLHFCQUFxQixFQUFFZixnQkFBZ0IsQ0FBQztRQUM1SCxJQUFJc0Isc0JBQXNCLEVBQUU7VUFDM0JkLHdCQUF3QixDQUFDYSxJQUFJLENBQUNDLHNCQUFzQixDQUFDO1FBQ3REO01BQ0Q7SUFDRDtJQUNBLE1BQU1DLGNBQWMsR0FBR3JCLFlBQVksQ0FBQ3NCLGNBQWM7SUFDbEQsTUFBTUMsa0JBQWtCLEdBQUcsU0FBQUEsQ0FBVUMsWUFBc0IsRUFBUTtNQUNsRSxNQUFNQyxRQUFRLEdBQUdKLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFSyxJQUFJLENBQUVDLEdBQUcsSUFBS0EsR0FBRyxDQUFDQyxPQUFPLEtBQUt6QixTQUFTLElBQUlxQixZQUFZLENBQUNLLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDQyxPQUFPLENBQUNFLElBQUksQ0FBQyxDQUFDO01BQ3BILElBQUlMLFFBQVEsRUFBRTtRQUNibkIsd0JBQXdCLENBQUNhLElBQUksQ0FBQztVQUM3QlksYUFBYSxFQUFFTixRQUFRLENBQUNHLE9BQXlDO1VBQ2pFSSxjQUFjLEVBQUUsR0FBR25CLHFCQUFxQixHQUFHWSxRQUFRLENBQUNRLEtBQUssRUFBRTtVQUMzRG5DLGdCQUFnQixFQUFFQSxnQkFBZ0I7VUFDbENHLGdCQUFnQixFQUFFUTtRQUNuQixDQUFDLENBQUM7TUFDSDtJQUNELENBQUM7SUFDRCxJQUFJRixLQUFLLEVBQUU7TUFDVjtNQUNBZ0Isa0JBQWtCLENBQUMsdUNBQTRCLENBQUM7TUFDaERBLGtCQUFrQixDQUFDLG9DQUF5QixDQUFDO0lBQzlDLENBQUMsTUFBTTtNQUNOO01BQ0FBLGtCQUFrQixDQUFDLDJFQUFxRCxDQUFDO0lBQzFFO0lBQ0EsT0FBT2pCLHdCQUF3QjtFQUNoQyxDQUFDO0VBQUM0QixRQUFBLENBQUF2QywrQkFBQSxHQUFBQSwrQkFBQTtFQUNLLFNBQVN3QywrQkFBK0JBLENBQzlDQyxVQUFzQixFQUN0QkosY0FBa0MsRUFDbENsQyxnQkFBeUQsRUFDZDtJQUMzQyxJQUFJa0MsY0FBYyxFQUFFO01BQ25CLE1BQU1LLGNBQWMsR0FBR3ZDLGdCQUFnQixDQUFDd0MsdUJBQXVCLENBQUNOLGNBQWMsQ0FBQztNQUMvRSxNQUFNTyw0QkFBNEIsR0FBR0YsY0FBYyxDQUFDekMsVUFBMEM7TUFDOUYsSUFBSTJDLDRCQUE0QixFQUFFO1FBQ2pDLElBQUlBLDRCQUE0QixDQUFDVCxJQUFJLDhEQUFtRCxFQUFFO1VBQ3pGLE9BQU9TLDRCQUE0QjtRQUNwQztNQUNELENBQUMsTUFBTTtRQUNOLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDBHQUEwRyxDQUFDO01BQzVIO0lBQ0QsQ0FBQyxNQUFNO01BQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7TUFDTixRQUFBRCxxQkFBQSxHQUFPTCxVQUFVLENBQUNPLFdBQVcsY0FBQUYscUJBQUEsd0JBQUFDLHNCQUFBLEdBQXRCRCxxQkFBQSxDQUF3QkcsRUFBRSxjQUFBRixzQkFBQSx1QkFBMUJBLHNCQUFBLENBQTRCRyw0QkFBNEI7SUFDaEU7RUFDRDtFQUFDWCxRQUFBLENBQUFDLCtCQUFBLEdBQUFBLCtCQUFBO0VBQ00sU0FBU1csZ0NBQWdDQSxDQUMvQ1AsNEJBQTBELEVBQzFEaEMsS0FBYyxFQUNRO0lBQ3RCLE1BQU13QyxtQkFBbUIsR0FBR1IsNEJBQTRCLElBQUlBLDRCQUE0QixDQUFDbkMsbUJBQW1CO0lBQzVHLElBQUkyQyxtQkFBbUIsRUFBRTtNQUN4QixPQUFPaEMsdUJBQXVCLENBQUNnQyxtQkFBbUIsRUFBRXhDLEtBQUssQ0FBQztJQUMzRCxDQUFDLE1BQU07TUFDTixNQUFNLElBQUlpQyxLQUFLLENBQUMsMkRBQTJELENBQUM7SUFDN0U7RUFDRDtFQUFDTixRQUFBLENBQUFZLGdDQUFBLEdBQUFBLGdDQUFBO0VBQ00sU0FBUy9CLHVCQUF1QkEsQ0FBQ2dDLG1CQUE0QyxFQUEwQjtJQUFBLElBQXhCeEMsS0FBSyxHQUFBeUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQTdDLFNBQUEsR0FBQTZDLFNBQUEsTUFBRyxLQUFLO0lBQ2xHLElBQUlFLFFBQVEsR0FBRyxLQUFLO01BQ25CQyxRQUFRLEdBQUcsS0FBSztJQUNqQixJQUFJNUMsS0FBSyxFQUFFO01BQ1YsSUFBSXdDLG1CQUFtQixhQUFuQkEsbUJBQW1CLGVBQW5CQSxtQkFBbUIsQ0FBRXpCLGNBQWMsRUFBRTtRQUN4QyxNQUFNRCxjQUFjLEdBQUcwQixtQkFBbUIsQ0FBQ3pCLGNBQWM7UUFDekRELGNBQWMsQ0FBQytCLE9BQU8sQ0FBRXJCLGFBQWEsSUFBSztVQUFBLElBQUFzQixxQkFBQSxFQUFBQyxzQkFBQTtVQUN6QyxJQUFJLEVBQUFELHFCQUFBLEdBQUF0QixhQUFhLENBQUNILE9BQU8sY0FBQXlCLHFCQUFBLHVCQUFyQkEscUJBQUEsQ0FBdUJ2QixJQUFJLDJDQUErQixFQUFFO1lBQy9Eb0IsUUFBUSxHQUFHLElBQUk7VUFDaEI7VUFDQSxJQUFJLEVBQUFJLHNCQUFBLEdBQUF2QixhQUFhLENBQUNILE9BQU8sY0FBQTBCLHNCQUFBLHVCQUFyQkEsc0JBQUEsQ0FBdUJ4QixJQUFJLHdDQUE0QixFQUFFO1lBQzVEcUIsUUFBUSxHQUFHLElBQUk7VUFDaEI7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9BLFFBQVEsSUFBSUQsUUFBUTtJQUM1QixDQUFDLE1BQU07TUFDTixPQUNDLENBQUFILG1CQUFtQixhQUFuQkEsbUJBQW1CLHVCQUFuQkEsbUJBQW1CLENBQUV6QixjQUFjLEtBQ25DLENBQUMsQ0FBQ3lCLG1CQUFtQixDQUFDekIsY0FBYyxDQUFDSSxJQUFJLENBQUVLLGFBQWEsSUFBSztRQUFBLElBQUF3QixzQkFBQSxFQUFBQyxzQkFBQTtRQUM1RCxPQUNDLEVBQUFELHNCQUFBLEdBQUF4QixhQUFhLENBQUNILE9BQU8sY0FBQTJCLHNCQUFBLHVCQUFyQkEsc0JBQUEsQ0FBdUJ6QixJQUFJLDJDQUErQixJQUFJLEVBQUEwQixzQkFBQSxHQUFBekIsYUFBYSxDQUFDSCxPQUFPLGNBQUE0QixzQkFBQSx1QkFBckJBLHNCQUFBLENBQXVCMUIsSUFBSSx3Q0FBNEI7TUFFdkgsQ0FBQyxDQUFDO0lBRUo7RUFDRDtFQUFDSSxRQUFBLENBQUFuQix1QkFBQSxHQUFBQSx1QkFBQTtFQUNNLFNBQVMwQyxrQkFBa0JBLENBQUNyQixVQUFzQixFQUF3QjtJQUFBLElBQUFzQixzQkFBQTtJQUNoRixRQUFBQSxzQkFBQSxHQUFPdEIsVUFBVSxDQUFDTyxXQUFXLENBQUNDLEVBQUUsY0FBQWMsc0JBQUEsdUJBQXpCQSxzQkFBQSxDQUEyQkMsUUFBUTtFQUMzQztFQUFDekIsUUFBQSxDQUFBdUIsa0JBQUEsR0FBQUEsa0JBQUE7RUFDTSxTQUFTRyxlQUFlQSxDQUFDeEIsVUFBc0IsRUFBcUI7SUFBQSxJQUFBeUIsc0JBQUE7SUFDMUUsUUFBQUEsc0JBQUEsR0FBT3pCLFVBQVUsQ0FBQ08sV0FBVyxDQUFDQyxFQUFFLGNBQUFpQixzQkFBQSx1QkFBekJBLHNCQUFBLENBQTJCQyxLQUFLO0VBQ3hDO0VBQUM1QixRQUFBLENBQUEwQixlQUFBLEdBQUFBLGVBQUE7RUFDTSxTQUFTRywwQkFBMEJBLENBQUMzQixVQUFzQixFQUFnQztJQUFBLElBQUE0QixzQkFBQSxFQUFBQyxzQkFBQTtJQUNoRyxRQUFBRCxzQkFBQSxHQUFPNUIsVUFBVSxDQUFDTyxXQUFXLGNBQUFxQixzQkFBQSx3QkFBQUMsc0JBQUEsR0FBdEJELHNCQUFBLENBQXdCcEIsRUFBRSxjQUFBcUIsc0JBQUEsdUJBQTFCQSxzQkFBQSxDQUE0QjVELGdCQUFnQjtFQUNwRDtFQUFDNkIsUUFBQSxDQUFBNkIsMEJBQUEsR0FBQUEsMEJBQUE7RUFDTSxTQUFTRyxtQkFBbUJBLENBQ2xDOUIsVUFBc0IsRUFDdEJ0QyxnQkFBeUQsRUFDdEI7SUFDbkMsTUFBTWtDLGNBQWMsR0FBR2xDLGdCQUFnQixDQUFDcUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQy9GLE1BQU03Qiw0QkFBNEIsR0FBR0osK0JBQStCLENBQUNDLFVBQVUsRUFBRUosY0FBYyxFQUFFbEMsZ0JBQWdCLENBQUM7SUFDbEgsSUFBSUcsZ0JBQWdCO0lBQ3BCLElBQUlzQyw0QkFBNEIsRUFBRTtNQUNqQ3RDLGdCQUFnQixHQUFHc0MsNEJBQTRCLENBQUNsQyxnQkFBb0M7TUFDcEYsSUFBSUosZ0JBQWdCLEVBQUU7UUFDckIsT0FBT0EsZ0JBQWdCO01BQ3hCO0lBQ0QsQ0FBQyxNQUFNO01BQ05BLGdCQUFnQixHQUFHOEQsMEJBQTBCLENBQUMzQixVQUFVLENBQUM7TUFDekQsT0FBT25DLGdCQUFnQjtJQUN4QjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFpQyxRQUFBLENBQUFnQyxtQkFBQSxHQUFBQSxtQkFBQTtFQU9BLFNBQVNHLHlCQUF5QkEsQ0FDakNoQyxjQUF1RSxFQUN2RXhDLGlCQUF5QixFQUN6QkUscUJBQStCLEVBQ047SUFDekIsTUFBTTtNQUFFSCxVQUFVO01BQUVFO0lBQWlCLENBQUMsR0FBR3VDLGNBQWM7SUFDdkQsTUFBTVAsSUFBSSxHQUFHbEMsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVrQyxJQUFJO0lBQzdCLElBQUl4Qix3QkFBZ0QsR0FBRyxFQUFFO0lBQ3pELElBQUl3QixJQUFJLEVBQUU7TUFDVCxRQUFRQSxJQUFJO1FBQ1g7UUFDQTtVQUNDeEIsd0JBQXdCLENBQUNhLElBQUksQ0FBQztZQUM3QlksYUFBYSxFQUFFbkMsVUFBNEM7WUFDM0RvQyxjQUFjLEVBQUVuQyxpQkFBaUI7WUFDakNDLGdCQUFnQixFQUFFQTtVQUNuQixDQUFDLENBQUM7VUFDRjtRQUNEO1FBQ0E7VUFDQ1Esd0JBQXdCLEdBQUdBLHdCQUF3QixDQUFDZ0UsTUFBTSxDQUN6RDNFLCtCQUErQixDQUFDQyxVQUFVLEVBQUVDLGlCQUFpQixFQUFFQyxnQkFBZ0IsRUFBRUMscUJBQXFCLENBQ3ZHLENBQUM7VUFDRDtRQUNEO1VBQ0M7TUFDRjtJQUNEO0lBQ0EsT0FBT08sd0JBQXdCO0VBQ2hDOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNpRSxnQ0FBZ0NBLENBQ3hDMUUsaUJBQXlCLEVBQ3pCMkUsa0JBQTJELEVBQ3JCO0lBQ3RDLElBQUkzRSxpQkFBaUIsS0FBSyxFQUFFLEVBQUU7TUFDN0IsT0FBT00sU0FBUztJQUNqQjtJQUVBLE1BQU1QLFVBQVUsR0FBRzRFLGtCQUFrQixDQUFDbEMsdUJBQXVCLENBQUN6QyxpQkFBaUIsQ0FBQyxDQUFDRCxVQUEwQztJQUMzSCxJQUFJTSxrQkFBa0IsQ0FBK0JOLFVBQVUsK0RBQW9ELENBQUMsRUFBRTtNQUNySCxPQUFPQSxVQUFVLENBQUNRLG1CQUFtQjtJQUN0QyxDQUFDLE1BQU0sSUFBSVIsVUFBVSxDQUFDa0MsSUFBSSxxREFBMEMsRUFBRTtNQUNyRSxPQUFPbEMsVUFBVTtJQUNsQjtJQUNBLE9BQU9PLFNBQVM7RUFDakI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTc0UsaUNBQWlDQSxDQUNoRDVFLGlCQUF5QixFQUN6QjJFLGtCQUEyRCxFQUMzREUsTUFNRSxFQUM0QjtJQUM5QixNQUFNO01BQ0xDLCtCQUErQjtNQUMvQkMsd0JBQXdCO01BQ3hCQywwQkFBMEI7TUFDMUI5RSxxQkFBcUI7TUFDckIrRTtJQUNELENBQUMsR0FBR0osTUFBTTtJQUNWLE1BQU1yQyxjQUFjLEdBQ25CeEMsaUJBQWlCLEtBQUssRUFBRSxHQUNyQjJFLGtCQUFrQixDQUFDbEMsdUJBQXVCLENBQStCekMsaUJBQWlCLENBQUMsR0FDM0Y7TUFBRUQsVUFBVSxFQUFFTyxTQUFTO01BQUVMLGdCQUFnQixFQUFFMEU7SUFBbUIsQ0FBQztJQUNuRSxNQUFNTyxxQkFBcUIsR0FBRzFDLGNBQWMsQ0FBQ3pDLFVBQTBDO0lBRXZGLElBQUlvRixrQkFBa0IsRUFBRUMsa0JBQWtCO0lBQzFDLE1BQU1uRCxJQUFJLEdBQUdpRCxxQkFBcUIsYUFBckJBLHFCQUFxQix1QkFBckJBLHFCQUFxQixDQUFFakQsSUFBSTtJQUN4QyxLQUFLLE1BQU1vRCxvQkFBb0IsSUFBSWIseUJBQXlCLENBQUNoQyxjQUFjLEVBQUV4QyxpQkFBaUIsRUFBRUUscUJBQXFCLENBQUMsRUFBRTtNQUN2SCxNQUFNO1FBQUVnQyxhQUFhO1FBQUVDLGNBQWM7UUFBRWxDLGdCQUFnQjtRQUFFRztNQUFpQixDQUFDLEdBQUdpRixvQkFBb0I7TUFDbEcsUUFBUW5ELGFBQWEsQ0FBQ0QsSUFBSTtRQUN6QjtVQUNDa0Qsa0JBQWtCLEdBQUdGLHNDQUFzQyxHQUN4REsscUNBQXFDLENBQUNyRixnQkFBZ0IsRUFBRWtDLGNBQWMsRUFBRUQsYUFBYSxDQUFDLEdBQ3RGcUQsd0JBQXdCLENBQ3hCckQsYUFBYSxFQUNiQyxjQUFjLEVBQ2RsQyxnQkFBZ0IsRUFDaEI4RSx3QkFBd0IsRUFDeEIxRSxrQkFBa0IsQ0FDakI2RSxxQkFBcUIsK0RBRXRCLENBQUMsR0FDRWxGLGlCQUFpQixHQUNqQk0sU0FDSCxDQUFDO1VBQ0o7UUFDRDtRQUNBO1VBQ0M4RSxrQkFBa0IsR0FBR0ksS0FBSyxDQUFDQyx3QkFBd0IsQ0FBQ3ZELGFBQWEsRUFBRUMsY0FBYyxFQUFFbEMsZ0JBQWdCLEVBQUU7WUFDcEd5Riw2QkFBNkIsRUFBRWhCLGdDQUFnQyxDQUFDMUUsaUJBQWlCLEVBQUUyRSxrQkFBa0IsQ0FBQztZQUN0R2dCLDBCQUEwQixFQUFFWCwwQkFBMEIsSUFBSTVFLGdCQUFnQjtZQUMxRTBFO1VBQ0QsQ0FBQyxDQUFDO1VBQ0Y7TUFDRjtJQUNEO0lBRUFILGtCQUFrQixHQUFHbkMsY0FBYyxDQUFDdkMsZ0JBQWdCO0lBQ3BELE1BQU1TLEtBQUssR0FBR0MsZUFBZSxDQUFDZ0Usa0JBQWtCLENBQUM7SUFDakQsSUFBSSxDQUFDMUMsSUFBSSxJQUFLdkIsS0FBSyxJQUFJMEUsa0JBQWtCLEtBQUs5RSxTQUFVLEVBQUU7TUFDekQ4RSxrQkFBa0IsR0FBR0ksS0FBSyxDQUFDSSwrQkFBK0IsQ0FBQ2pCLGtCQUFrQixFQUFFekUscUJBQXFCLEtBQUssSUFBSSxDQUFDO01BQzlHeUUsa0JBQWtCLENBQUNrQixjQUFjLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUNDLGFBQWEsQ0FBQ0MsVUFBVSxFQUFFQyxhQUFhLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDQyxnQkFBZ0IsQ0FBQztJQUN6SDtJQUNBLElBQUkxRixLQUFLLElBQUl5RSxrQkFBa0IsS0FBSzdFLFNBQVMsRUFBRTtNQUM5QzZFLGtCQUFrQixHQUFHa0IsNkJBQTZCLENBQUMxQixrQkFBa0IsQ0FBQztNQUN0RUEsa0JBQWtCLENBQUNrQixjQUFjLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUNDLGFBQWEsQ0FBQ0MsVUFBVSxFQUFFQyxhQUFhLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDRyxhQUFhLENBQUM7SUFDdEg7SUFFQSxPQUFPO01BQ045RSxjQUFjLEVBQUUsQ0FBQzJELGtCQUFrQixFQUFFQyxrQkFBa0IsQ0FBQyxDQUFDbUIsTUFBTSxDQUFDQyxlQUFlLENBQUM7TUFDaEZyRSxjQUFjLEVBQUV3QyxrQkFBa0IsQ0FBQzhCLCtCQUErQixDQUFDLENBQUF2QixxQkFBcUIsYUFBckJBLHFCQUFxQix1QkFBckJBLHFCQUFxQixDQUFFd0Isa0JBQWtCLEtBQUksR0FBRyxDQUFDO01BQ3BIQyw4QkFBOEIsRUFBRTlCLE1BQU0sQ0FBQ0csMEJBQTBCLEdBQzlETCxrQkFBa0IsQ0FBQzhCLCtCQUErQixDQUFDNUIsTUFBTSxDQUFDRywwQkFBMEIsQ0FBQzBCLGtCQUFrQixDQUFDLEdBQ3hHcEc7SUFDSixDQUFDO0VBQ0Y7RUFBQytCLFFBQUEsQ0FBQXVDLGlDQUFBLEdBQUFBLGlDQUFBO0VBRUQsU0FBUzRCLGVBQWVBLENBQUN0RSxhQUFzQixFQUE0RDtJQUMxRyxPQUFPLENBQUMwRSxpQkFBaUIsQ0FBQ3BCLEtBQUssRUFBRW9CLGlCQUFpQixDQUFDM0MsS0FBSyxDQUFDLENBQUNqQyxRQUFRLENBQUVFLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUE4QzJFLElBQUksQ0FBQztFQUNySTtFQUVPLFNBQVNDLDRCQUE0QkEsQ0FBQ0MsUUFBZ0IsRUFBRUMsVUFBa0IsRUFBUTtJQUN4RjtJQUNBLElBQUlELFFBQVEsQ0FBQy9FLFFBQVEsQ0FBQ2dGLFVBQVUsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsRUFBRUQsVUFBVSxDQUFDRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3hFLE1BQU12RixZQUFZLEdBQUcsOEdBQXdGcUYsVUFBVSxDQUFDO01BQ3hILElBQ0MsQ0FBQ3JGLFlBQVksQ0FBQ3dGLElBQUksQ0FBRWxGLElBQUksSUFBSztRQUM1QixPQUFPOEUsUUFBUSxDQUFDSyxNQUFNLENBQUMsSUFBSUMsTUFBTSxDQUFDLEdBQUdwRixJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzFELENBQUMsQ0FBQyxFQUNEO1FBQ0QsTUFBTSxJQUFJVSxLQUFLLENBQUMsbUJBQW1Cb0UsUUFBUSwrQ0FBK0NDLFVBQVUsRUFBRSxDQUFDO01BQ3hHO0lBQ0Q7RUFDRDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBM0UsUUFBQSxDQUFBeUUsNEJBQUEsR0FBQUEsNEJBQUE7RUFNTyxTQUFTUSxZQUFZQSxDQUFDQyxtQkFBNEIsRUFBRUMsV0FBbUIsRUFBVztJQUN4RlYsNEJBQTRCLENBQUNTLG1CQUFtQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxFQUFFRCxXQUFXLENBQUM7SUFDeEUsTUFBTXJILFlBQVksR0FBR3VILGtCQUFrQixDQUFDQyx1QkFBdUIsQ0FBQ0osbUJBQW1CLENBQUM7TUFDbkZLLEtBQUssR0FBR0wsbUJBQW1CLENBQUNNLFFBQVEsQ0FBQyxDQUFtQjtJQUN6RCxJQUFJMUgsWUFBWSxFQUFFO01BQ2pCLElBQ0NFLGtCQUFrQixDQUErQkYsWUFBWSwrREFBb0QsQ0FBQyxJQUNsSEUsa0JBQWtCLENBQXNCRixZQUFZLHNEQUEyQyxDQUFDLEVBQy9GO1FBQ0QsSUFBSXFCLGNBQWM7UUFDbEIsSUFDQ25CLGtCQUFrQixDQUErQkYsWUFBWSwrREFBb0QsQ0FBQyxJQUNsSEEsWUFBWSxDQUFDSSxtQkFBbUIsRUFDL0I7VUFDRGlCLGNBQWMsR0FBR3JCLFlBQVksQ0FBQ0ksbUJBQW1CLENBQUNrQixjQUFjO1FBQ2pFLENBQUMsTUFBTSxJQUFJcEIsa0JBQWtCLENBQXNCRixZQUFZLHNEQUEyQyxDQUFDLEVBQUU7VUFDNUdxQixjQUFjLEdBQUdyQixZQUFZLENBQUNzQixjQUFjO1FBQzdDO1FBQ0EsSUFBSXFHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdkcsY0FBYyxDQUFDLEVBQUU7VUFDbEMsS0FBSyxNQUFNVSxhQUFhLElBQUlWLGNBQWMsRUFBRTtZQUMzQyxJQUNDVSxhQUFhLENBQUMyRSxJQUFJLElBQUksZ0JBQWdCLElBQ3RDM0UsYUFBYSxDQUFDRSxLQUFLLENBQUNKLFFBQVEsQ0FBQ3dGLFdBQVcsQ0FBQztZQUN6QztZQUNBLENBQUMsQ0FBQ0ksS0FBSyxDQUFDSSxjQUFjLENBQUNULG1CQUFtQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDeEcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHaUIsYUFBYSxDQUFDRSxLQUFLLENBQUMsQ0FBQzZGLFNBQVMsQ0FBQyxDQUFDLEVBQ3BHO2NBQ0RULFdBQVcsR0FBR3RGLGFBQWEsQ0FBQ0UsS0FBSztjQUNqQztZQUNEO1VBQ0Q7UUFDRDtNQUNELENBQUMsTUFBTTtRQUNOLE9BQU9tRixtQkFBbUI7TUFDM0I7SUFDRDtJQUNBLE9BQU9LLEtBQUssQ0FBQ0ksY0FBYyxDQUFDVCxtQkFBbUIsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsQ0FBQ3hHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR3VHLFdBQVcsQ0FBQztFQUN2RjtFQUFDbkYsUUFBQSxDQUFBaUYsWUFBQSxHQUFBQSxZQUFBO0VBQ00sTUFBTW5HLHFDQUFxQyxHQUFHLFNBQUFBLENBQ3BEdUUsNkJBQXNELEVBQ3REd0MsY0FBb0QsRUFDMUM7SUFBQSxJQUFBQyxxQkFBQTtJQUNWLE9BQU8sRUFBQUEscUJBQUEsR0FBQXpDLDZCQUE2QixDQUFDakUsY0FBYyxjQUFBMEcscUJBQUEsdUJBQTVDQSxxQkFBQSxDQUE4Q2hCLElBQUksQ0FBRWpGLGFBQWEsSUFBS0EsYUFBYSxDQUFDRSxLQUFLLENBQUNKLFFBQVEsQ0FBQ2tHLGNBQWMsQ0FBQyxDQUFDLEtBQUksS0FBSztFQUNwSSxDQUFDO0VBQUM3RixRQUFBLENBQUFsQixxQ0FBQSxHQUFBQSxxQ0FBQTtFQUNGLE1BQU1FLDJCQUEyQixHQUFHLFNBQUFBLENBQ25DK0csaUJBQXVELEVBQ3ZEcEgscUJBQTZCLEVBQzdCZixnQkFBeUQsRUFDdEI7SUFDbkMsTUFBTXNDLFVBQVUsR0FBR3RDLGdCQUFnQixDQUFDb0ksYUFBYSxDQUFDLENBQUM7SUFDbkQsTUFBTUMsaUJBQWlCLEdBQ3RCRixpQkFBaUIsMENBQStCLEdBQUd4RSxrQkFBa0IsQ0FBQ3JCLFVBQVUsQ0FBQyxHQUFHd0IsZUFBZSxDQUFDeEIsVUFBVSxDQUFDO0lBQ2hILElBQUkrRixpQkFBaUIsRUFBRTtNQUN0QixPQUFPO1FBQ05wRyxhQUFhLEVBQUVvRyxpQkFBaUI7UUFDaENuRyxjQUFjLEVBQUUsR0FBR25CLHFCQUFxQixHQUFHZixnQkFBZ0IsQ0FBQ3NJLHlCQUF5QixDQUNwRkQsaUJBQWlCLENBQUM1QixrQkFBa0IsRUFDcENuRSxVQUNELENBQUMsRUFBRTtRQUNIdEMsZ0JBQWdCLEVBQUVBO01BQ25CLENBQUM7SUFDRjtJQUNBLE9BQU9LLFNBQVM7RUFDakIsQ0FBQztFQUNNLE1BQU1LLGVBQWUsR0FBRyxTQUFBQSxDQUFVVixnQkFBeUQsRUFBVztJQUM1RyxPQUNDQSxnQkFBZ0IsQ0FBQ3FFLGtCQUFrQixDQUFDLENBQUMsQ0FBQ2tFLHlCQUF5QixDQUFDLENBQUMsSUFDakV2SSxnQkFBZ0IsQ0FBQ1ksZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDMkgsa0JBQWtCO0VBRXhFLENBQUM7RUFBQ3BHLFFBQUEsQ0FBQTFCLGVBQUEsR0FBQUEsZUFBQTtFQUFBLE9BQUEwQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
347
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInZpc3VhbGl6YXRpb25QYXRoIiwiY29udmVydGVyQ29udGV4dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInByZXNlbnRhdGlvbiIsInNlbGVjdGlvblZhcmlhbnQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJ1bmRlZmluZWQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyIsImlzQUxQIiwiaXNBbHBBbm5vdGF0aW9uIiwiZmluYWxTZWxlY3Rpb25WYXJpYW50IiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsImJhc2VWaXN1YWxpemF0aW9uUGF0aCIsInNwbGl0IiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJhbm5vdGF0aW9uRXhpc3RzSW5QcmVzZW50YXRpb25WYXJpYW50IiwiZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiIsInByZXBhcmVEZWZhdWx0VmlzdWFsaXphdGlvbiIsInB1c2giLCJkZWZhdWx0Q2hhcnRBbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsInB1c2hGaXJzdFZpek9mVHlwZSIsImFsbG93ZWRUZXJtcyIsImZpcnN0Vml6IiwiZmluZCIsInZpeiIsIiR0YXJnZXQiLCJpbmNsdWRlcyIsInRlcm0iLCJ2aXN1YWxpemF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsIl9leHBvcnRzIiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImVudGl0eVR5cGUiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiYW5ub3RhdGlvbnMiLCJVSSIsIlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJoYXNUYWJsZSIsImhhc0NoYXJ0IiwiZm9yRWFjaCIsImdldERlZmF1bHRMaW5lSXRlbSIsIkxpbmVJdGVtIiwiZ2V0RGVmYXVsdENoYXJ0IiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldFZpc3VhbGl6YXRpb25zQW5kUGF0aHMiLCJjb25jYXQiLCJnZXREYXRhVmlzdWFsaXphdGlvblByZXNlbnRhdGlvbiIsImluQ29udmVydGVyQ29udGV4dCIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsInBhcmFtcyIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwicmVzb2x2ZWRWaXN1YWxpemF0aW9uIiwiY2hhcnRWaXN1YWxpemF0aW9uIiwidGFibGVWaXN1YWxpemF0aW9uIiwidmlzdWFsaXphdGlvbkFuZFBhdGgiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIiwiY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwiVGFibGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJNZWRpdW0iLCJJc3N1ZVR5cGUiLCJNSVNTSU5HX0xJTkVJVEVNIiwiY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24iLCJNSVNTSU5HX0NIQVJUIiwiZmlsdGVyIiwiaXNWaXN1YWxpemF0aW9uIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aCIsIlZpc3VhbGl6YXRpb25UeXBlIiwidHlwZSIsInZhbGlkYXRlUHJlc2VudGF0aW9uTWV0YVBhdGgiLCJtZXRhUGF0aCIsIm9iamVjdFRlcm0iLCJzbGljZSIsImxhc3RJbmRleE9mIiwic29tZSIsInNlYXJjaCIsIlJlZ0V4cCIsImdldFVpQ29udHJvbCIsInByZXNlbnRhdGlvbkNvbnRleHQiLCJjb250cm9sUGF0aCIsImdldFBhdGgiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRNZXRhQ29udGV4dCIsImdldE9iamVjdCIsImFubm90YXRpb25UZXJtIiwidmlzdWFsaXphdGlvblR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVZpc3VhbGl6YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwiLi9DaGFydFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24sIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiwgY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uRm9yVGVtcGxhdGluZyB9IGZyb20gXCIuL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL1RhYmxlXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4vVGFibGVcIjtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5leHBvcnQgdHlwZSBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgPSBMaW5lSXRlbSB8IENoYXJ0O1xuZXhwb3J0IHR5cGUgUHJlc2VudGF0aW9uVmlzdWFsaXphdGlvbkFubm90YXRpb25zID0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfCBVSUFubm90YXRpb25UZXJtcy5DaGFydDtcbmV4cG9ydCB0eXBlIFZpc3VhbGl6YXRpb25BbmRQYXRoID0ge1xuXHR2aXN1YWxpemF0aW9uOiBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xufTtcbmV4cG9ydCB0eXBlIERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IHtcblx0dmlzdWFsaXphdGlvbnM6IChUYWJsZVZpc3VhbGl6YXRpb24gfCBDaGFydFZpc3VhbGl6YXRpb24pW107XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7XG5cdGluTXVsdGlWaWV3PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uID0gZnVuY3Rpb24gKFxuXHRhbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNNYWNyb09yTXVsdGlwbGVWaWV3PzogYm9vbGVhblxuKTogVmlzdWFsaXphdGlvbkFuZFBhdGhbXSB7XG5cdGNvbnN0IHsgcHJlc2VudGF0aW9uLCBzZWxlY3Rpb25WYXJpYW50IH0gPSBpc0Fubm90YXRpb25PZlR5cGU8UHJlc2VudGF0aW9uVmFyaWFudFR5cGU+KFxuXHRcdGFubm90YXRpb24sXG5cdFx0VUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcblx0KVxuXHRcdD8geyBwcmVzZW50YXRpb246IGFubm90YXRpb24sIHNlbGVjdGlvblZhcmlhbnQ6IHVuZGVmaW5lZCB9XG5cdFx0OiB7IHByZXNlbnRhdGlvbjogYW5ub3RhdGlvbi5QcmVzZW50YXRpb25WYXJpYW50LCBzZWxlY3Rpb25WYXJpYW50OiBhbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQgfTtcblx0Y29uc3QgdmlzdWFsaXphdGlvbkFubm90YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdGNvbnN0IGlzQUxQID0gaXNBbHBBbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBmaW5hbFNlbGVjdGlvblZhcmlhbnQgPVxuXHRcdCFpc0FMUCAmJiAvLyBEb24ndCBhZGQgdGhlIFNlbGVjdGlvblZhcmlhbnQgb24gQUxQIC0+IHdpbGwgYmUgbWFuYWdlZCBieSBGSU9SSVRFQ0hQMS0yNjIzN1xuXHRcdCEoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiYgIWlzTWFjcm9Pck11bHRpcGxlVmlldykgLy9PbiBMaXN0UmVwb3J0IHdpdGggc2luZ2xlIHZpZXcgdGhlIFNlbGVjdGlvblZhcmlhbnQgaXMgbWFuYWdlZCBieSBGaWx0ZXJCYXJcblx0XHRcdD8gc2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGJhc2VWaXN1YWxpemF0aW9uUGF0aCA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKVswXTtcblx0aWYgKChpc01hY3JvT3JNdWx0aXBsZVZpZXcgPT09IHRydWUgfHwgaXNBTFApICYmICFpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb24sIGlzQUxQKSkge1xuXHRcdGlmICghYW5ub3RhdGlvbkV4aXN0c0luUHJlc2VudGF0aW9uVmFyaWFudChwcmVzZW50YXRpb24sIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSkge1xuXHRcdFx0Y29uc3QgZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiA9IHByZXBhcmVEZWZhdWx0VmlzdWFsaXphdGlvbihcblx0XHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFx0XHRcdGJhc2VWaXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0KTtcblx0XHRcdGlmIChkZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucy5wdXNoKHsgLi4uZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiwgLi4ueyBzZWxlY3Rpb25WYXJpYW50OiBmaW5hbFNlbGVjdGlvblZhcmlhbnQgfSB9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFhbm5vdGF0aW9uRXhpc3RzSW5QcmVzZW50YXRpb25WYXJpYW50KHByZXNlbnRhdGlvbiwgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQpKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0Q2hhcnRBbm5vdGF0aW9uID0gcHJlcGFyZURlZmF1bHRWaXN1YWxpemF0aW9uKFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0LCBiYXNlVmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKGRlZmF1bHRDaGFydEFubm90YXRpb24pIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zLnB1c2goZGVmYXVsdENoYXJ0QW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gcHJlc2VudGF0aW9uLlZpc3VhbGl6YXRpb25zO1xuXHRjb25zdCBwdXNoRmlyc3RWaXpPZlR5cGUgPSBmdW5jdGlvbiAoYWxsb3dlZFRlcm1zOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0Vml6ID0gdmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4gdml6LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiBhbGxvd2VkVGVybXMuaW5jbHVkZXModml6LiR0YXJnZXQudGVybSkpO1xuXHRcdGlmIChmaXJzdFZpeikge1xuXHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zLnB1c2goe1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uOiBmaXJzdFZpei4kdGFyZ2V0IGFzIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2Jhc2VWaXN1YWxpemF0aW9uUGF0aH0ke2ZpcnN0Vml6LnZhbHVlfWAsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IGZpbmFsU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAoaXNBTFApIHtcblx0XHQvLyBJbiBjYXNlIG9mIEFMUCwgd2UgdXNlIHRoZSBmaXJzdCBMaW5lSXRlbSBhbmQgdGhlIGZpcnN0IENoYXJ0XG5cdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbV0pO1xuXHRcdHB1c2hGaXJzdFZpek9mVHlwZShbVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRdKTtcblx0fSBlbHNlIHtcblx0XHQvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgZmlyc3Qgdml6IG9ubHkgKENoYXJ0IG9yIExpbmVJdGVtKVxuXHRcdHB1c2hGaXJzdFZpek9mVHlwZShbVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0XSk7XG5cdH1cblx0cmV0dXJuIHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmQsIFBsZWFzZSBhZGQgdGhlIFNQViBpbiB0aGUgYW5ub3RhdGlvblwiKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoXG5cdHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdGlzQUxQOiBib29sZWFuXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgJiYgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdHJldHVybiBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBpc0FMUCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIFNQViBhbm5vdGF0aW9uXCIpO1xuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudDogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsIGlzQUxQID0gZmFsc2UpOiBib29sZWFuIHtcblx0bGV0IGhhc1RhYmxlID0gZmFsc2UsXG5cdFx0aGFzQ2hhcnQgPSBmYWxzZTtcblx0aWYgKGlzQUxQKSB7XG5cdFx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQ/LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IHByZXNlbnRhdGlvblZhcmlhbnQuVmlzdWFsaXphdGlvbnM7XG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSB7XG5cdFx0XHRcdFx0aGFzVGFibGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB7XG5cdFx0XHRcdFx0aGFzQ2hhcnQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGhhc0NoYXJ0ICYmIGhhc1RhYmxlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucyAmJlxuXHRcdFx0ISFwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zLmZpbmQoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8IHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogTGluZUl0ZW0gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uTGluZUl0ZW07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBDaGFydCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5DaGFydDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uVmFyaWFudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHNlbGVjdGlvblZhcmlhbnQ7XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuU2VsZWN0aW9uVmFyaWFudCBhcyBTZWxlY3Rpb25WYXJpYW50O1xuXHRcdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudCA9IGdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHR9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdmlzdWFsaXphdGlvbnMgcmVsYXRlZCB0byBhbiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHJlc29sdmVkVGFyZ2V0IFRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIGlzTWFjcm9Pck11bHRpcGxlVmlldyBUcnVlIGlmIGl0J3MgZm9yIGEgYnVpbGRpbmcgYmxvY2sgb3IgYSBtdWx0aXBsZSB2aWV3cyBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsaXphdGlvbnMgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFZpc3VhbGl6YXRpb25zQW5kUGF0aHMoXG5cdHJlc29sdmVkVGFyZ2V0OiBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0PERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM+LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRpc01hY3JvT3JNdWx0aXBsZVZpZXc/OiBib29sZWFuXG4pOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdIHtcblx0Y29uc3QgeyBhbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0IH0gPSByZXNvbHZlZFRhcmdldDtcblx0Y29uc3QgdGVybSA9IGFubm90YXRpb24/LnRlcm07XG5cdGxldCB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblx0aWYgKHRlcm0pIHtcblx0XHRzd2l0Y2ggKHRlcm0pIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbjogYW5ub3RhdGlvbiBhcyBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgPSB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRcdGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24oYW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGlzTWFjcm9Pck11bHRpcGxlVmlldylcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIHZpc3VhbGl6YXRpb25zIHJlbGF0ZWQgdG8gYSB2aXN1YWxpemF0aW9uUGF0aC5cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gaW5Db252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHJldHVybnMgVGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG4gKi9cbmZ1bmN0aW9uIGdldERhdGFWaXN1YWxpemF0aW9uUHJlc2VudGF0aW9uKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRpbkNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQge1xuXHRpZiAodmlzdWFsaXphdGlvblBhdGggPT09IFwiXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgYW5ub3RhdGlvbiA9IGluQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uLlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0cmV0dXJuIGFubm90YXRpb247XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIHZpc3VhbGl6YXRpb25zIHJlbGF0ZWQgdG8gYSB2aXN1YWxpemF0aW9uUGF0aC5cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gaW5Db252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5pc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IFRydWUgaWYgaXQncyBmb3IgYSBjb25kZW5zZWQgbGF5b3V0XG4gKiBAcGFyYW0gcGFyYW1zLnZpZXdDb25maWd1cmF0aW9uIFRoZSB2aWV3IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBwYXJhbXMuZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkIFRydWUgaWYgdGhlIGNoZWNrIHRvIFwiQXBwbHlTdXBwb3J0ZWRcIiBpcyBza2lwcGVkXG4gKiBAcGFyYW0gcGFyYW1zLmFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJlc2VudGF0aW9uIHRvIGFwcGx5XG4gKiBAcGFyYW0gcGFyYW1zLmlzTWFjcm9Pck11bHRpcGxlVmlldyBUcnVlIGlmIGl0J3MgZm9yIGEgYnVpbGRpbmcgYmxvY2sgb3IgYSBtdWx0aXBsZSB2aWV3cyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gcGFyYW1zLnNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIFRydWUgaWYgd2UgbmVlZCB0byBjcmVhdGUgY2hhcnQgdmlzdWFsaXphdGlvbiBmb3IgdGVtcGxhdGluZ1xuICogQHJldHVybnMgVGhlIGRlZmluaXRpb24gb2YgdGhlIGRhdGEgdmlzdWFsaXphdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0aW5Db252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHBhcmFtczogUGFydGlhbDx7XG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogYm9vbGVhbjtcblx0XHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzTWFjcm9Pck11bHRpcGxlVmlldzogYm9vbGVhbjtcblx0XHRzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbjogYm9vbGVhbjtcblx0fT5cbik6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCxcblx0XHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCxcblx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXcsXG5cdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb25cblx0fSA9IHBhcmFtcztcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPVxuXHRcdHZpc3VhbGl6YXRpb25QYXRoICE9PSBcIlwiXG5cdFx0XHQ/IGluQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zPih2aXN1YWxpemF0aW9uUGF0aClcblx0XHRcdDogeyBhbm5vdGF0aW9uOiB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IGluQ29udmVydGVyQ29udGV4dCB9O1xuXHRjb25zdCByZXNvbHZlZFZpc3VhbGl6YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cblx0bGV0IGNoYXJ0VmlzdWFsaXphdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uO1xuXHRjb25zdCB0ZXJtID0gcmVzb2x2ZWRWaXN1YWxpemF0aW9uPy50ZXJtO1xuXHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb25BbmRQYXRoIG9mIGdldFZpc3VhbGl6YXRpb25zQW5kUGF0aHMocmVzb2x2ZWRUYXJnZXQsIHZpc3VhbGl6YXRpb25QYXRoLCBpc01hY3JvT3JNdWx0aXBsZVZpZXcpKSB7XG5cdFx0Y29uc3QgeyB2aXN1YWxpemF0aW9uLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgc2VsZWN0aW9uVmFyaWFudCB9ID0gdmlzdWFsaXphdGlvbkFuZFBhdGg7XG5cdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uLnRlcm0pIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRcdGNoYXJ0VmlzdWFsaXphdGlvbiA9IHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uXG5cdFx0XHRcdFx0PyBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nKGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoLCB2aXN1YWxpemF0aW9uKVxuXHRcdFx0XHRcdDogY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uKFxuXHRcdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkLFxuXHRcdFx0XHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oXG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQ/IHZpc3VhbGl6YXRpb25QYXRoXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHQgICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbiA9IFRhYmxlLmNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbih2aXN1YWxpemF0aW9uLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBnZXREYXRhVmlzdWFsaXphdGlvblByZXNlbnRhdGlvbih2aXN1YWxpemF0aW9uUGF0aCwgaW5Db252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQgPz8gc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRpbkNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRjb25zdCBpc0FMUCA9IGlzQWxwQW5ub3RhdGlvbihpbkNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoIXRlcm0gfHwgKGlzQUxQICYmIHRhYmxlVmlzdWFsaXphdGlvbiA9PT0gdW5kZWZpbmVkKSkge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbiA9IFRhYmxlLmNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oaW5Db252ZXJ0ZXJDb250ZXh0LCBpc01hY3JvT3JNdWx0aXBsZVZpZXcgIT09IHRydWUpO1xuXHRcdGluQ29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5NZWRpdW0sIElzc3VlVHlwZS5NSVNTSU5HX0xJTkVJVEVNKTtcblx0fVxuXHRpZiAoaXNBTFAgJiYgY2hhcnRWaXN1YWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGFydFZpc3VhbGl6YXRpb24gPSBjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbihpbkNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGluQ29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5NZWRpdW0sIElzc3VlVHlwZS5NSVNTSU5HX0NIQVJUKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dmlzdWFsaXphdGlvbnM6IFtjaGFydFZpc3VhbGl6YXRpb24sIHRhYmxlVmlzdWFsaXphdGlvbl0uZmlsdGVyKGlzVmlzdWFsaXphdGlvbiksXG5cdFx0YW5ub3RhdGlvblBhdGg6IGluQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHJlc29sdmVkVmlzdWFsaXphdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiL1wiKSxcblx0XHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGg6IHBhcmFtcy5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0PyBpbkNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwYXJhbXMuYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQuZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdFx0OiB1bmRlZmluZWRcblx0fTtcbn1cblxuZnVuY3Rpb24gaXNWaXN1YWxpemF0aW9uKHZpc3VhbGl6YXRpb246IHVua25vd24pOiB2aXN1YWxpemF0aW9uIGlzIENoYXJ0VmlzdWFsaXphdGlvbiB8IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdHJldHVybiBbVmlzdWFsaXphdGlvblR5cGUuVGFibGUsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0XS5pbmNsdWRlcygodmlzdWFsaXphdGlvbiBhcyBDaGFydFZpc3VhbGl6YXRpb24gfCBUYWJsZVZpc3VhbGl6YXRpb24pPy50eXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJlc2VudGF0aW9uTWV0YVBhdGgobWV0YVBhdGg6IHN0cmluZywgb2JqZWN0VGVybTogc3RyaW5nKTogdm9pZCB7XG5cdC8vIHBlcmZvcm0gdmFsaWRhdGlvbiBvbmx5IGlmIGFubm90YXRpb24gc2V0ICh0byBhdm9pZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZm9yIHRlc3Qgd2l0aG91dCBhbm5vdGF0aW9ucylcblx0aWYgKG1ldGFQYXRoLmluY2x1ZGVzKG9iamVjdFRlcm0uc2xpY2UoMCwgb2JqZWN0VGVybS5sYXN0SW5kZXhPZihcIi5cIikpKSkge1xuXHRcdGNvbnN0IGFsbG93ZWRUZXJtcyA9IFtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBvYmplY3RUZXJtXTtcblx0XHRpZiAoXG5cdFx0XHQhYWxsb3dlZFRlcm1zLnNvbWUoKHRlcm0pID0+IHtcblx0XHRcdFx0cmV0dXJuIG1ldGFQYXRoLnNlYXJjaChuZXcgUmVnRXhwKGAke3Rlcm19KCN8L3wkKWApKSA+IC0xO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQW5ub3RhdGlvbiBQYXRoICR7bWV0YVBhdGh9IG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IHZhbGlkIGZvciAke29iamVjdFRlcm19YCk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIFVJIGNvbnRyb2xzIChlaXRoZXIgYSBVSS5MaW5lSXRlbSwgb3IgYSBVSS5DaGFydCkuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uQ29udGV4dCBPYmplY3Qgb2YgdGhlIHByZXNlbnRhdGlvbiBjb250ZXh0IChlaXRoZXIgYSBwcmVzZW50YXRpb24gdmFyaWFudCwgb3IgYSBVSS5MaW5lSXRlbSwgb3IgYSBVSS5DaGFydClcbiAqIEBwYXJhbSBjb250cm9sUGF0aCBDb250cm9sIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IG9mIHRoZSBjb250cm9sIChlaXRoZXIgYSBVSS5MaW5lSXRlbSwgb3IgYSBVSS5DaGFydClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVpQ29udHJvbChwcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0LCBjb250cm9sUGF0aDogc3RyaW5nKTogQ29udGV4dCB7XG5cdHZhbGlkYXRlUHJlc2VudGF0aW9uTWV0YVBhdGgocHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCksIGNvbnRyb2xQYXRoKTtcblx0Y29uc3QgcHJlc2VudGF0aW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHByZXNlbnRhdGlvbkNvbnRleHQpLFxuXHRcdG1vZGVsID0gcHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAocHJlc2VudGF0aW9uKSB7XG5cdFx0aWYgKFxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KHByZXNlbnRhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHx8XG5cdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4ocHJlc2VudGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5QcmVzZW50YXRpb25WYXJpYW50VHlwZSlcblx0XHQpIHtcblx0XHRcdGxldCB2aXN1YWxpemF0aW9ucztcblx0XHRcdGlmIChcblx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KHByZXNlbnRhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpICYmXG5cdFx0XHRcdHByZXNlbnRhdGlvbi5QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHQpIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb24uUHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+KHByZXNlbnRhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25zID0gcHJlc2VudGF0aW9uLlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmlzdWFsaXphdGlvbnMpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiB2aXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHZpc3VhbGl6YXRpb24udHlwZSA9PSBcIkFubm90YXRpb25QYXRoXCIgJiZcblx0XHRcdFx0XHRcdHZpc3VhbGl6YXRpb24udmFsdWUuaW5jbHVkZXMoY29udHJvbFBhdGgpICYmXG5cdFx0XHRcdFx0XHQvLyBjaGVjayBpZiBvYmplY3QgZXhpc3RzIGZvciBQcmVzZW50YXRpb25WYXJpYW50IHZpc3VhbGl6YXRpb25cblx0XHRcdFx0XHRcdCEhbW9kZWwuZ2V0TWV0YUNvbnRleHQocHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCJAXCIpWzBdICsgdmlzdWFsaXphdGlvbi52YWx1ZSkuZ2V0T2JqZWN0KClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xQYXRoID0gdmlzdWFsaXphdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uQ29udGV4dDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1vZGVsLmdldE1ldGFDb250ZXh0KHByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKVswXSArIGNvbnRyb2xQYXRoKTtcbn1cbmV4cG9ydCBjb25zdCBhbm5vdGF0aW9uRXhpc3RzSW5QcmVzZW50YXRpb25WYXJpYW50ID0gZnVuY3Rpb24gKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGFubm90YXRpb25UZXJtOiBQcmVzZW50YXRpb25WaXN1YWxpemF0aW9uQW5ub3RhdGlvbnNcbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uVmlzdWFsaXphdGlvbnM/LnNvbWUoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb24udmFsdWUuaW5jbHVkZXMoYW5ub3RhdGlvblRlcm0pKSA/PyBmYWxzZTtcbn07XG5jb25zdCBwcmVwYXJlRGVmYXVsdFZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbiAoXG5cdHZpc3VhbGl6YXRpb25UeXBlOiBQcmVzZW50YXRpb25WaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsXG5cdGJhc2VWaXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFZpc3VhbGl6YXRpb25BbmRQYXRoIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBkZWZhdWx0QW5ub3RhdGlvbiA9XG5cdFx0dmlzdWFsaXphdGlvblR5cGUgPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpIDogZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRpZiAoZGVmYXVsdEFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dmlzdWFsaXphdGlvbjogZGVmYXVsdEFubm90YXRpb24sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7YmFzZVZpc3VhbGl6YXRpb25QYXRofSR7Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRkZWZhdWx0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdCl9YCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IGNvbnN0IGlzQWxwQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeUNPLE1BQU1BLCtCQUErQixHQUFHLFNBQUFBLENBQzlDQyxVQUFrRSxFQUNsRUMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDekRDLHFCQUErQixFQUNOO0lBQ3pCLE1BQU07TUFBRUMsWUFBWTtNQUFFQztJQUFpQixDQUFDLEdBQUdDLGtCQUFrQixDQUM1RE4sVUFBVSxzREFF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
|