@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
|
@@ -38,67 +38,58 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
38
38
|
"UI.ChartType/Scatter": "scatter"
|
|
39
39
|
};
|
|
40
40
|
function convertKPIChart(chartAnnotation, presentationVariantAnnotation, converterContext) {
|
|
41
|
-
var _presentationVariantA, _presentationVariantA2, _chartAnnotation$Titl;
|
|
42
41
|
if (chartAnnotation.Measures === undefined) {
|
|
43
42
|
// We need at least 1 measure (but no dimension is allowed, e.g. for bubble chart)
|
|
44
43
|
return undefined;
|
|
45
44
|
}
|
|
46
45
|
const charDimensions = chartAnnotation.Dimensions ? chartAnnotation.Dimensions.map(propertyPath => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
var _attribute$Dimension;
|
|
50
|
-
return ((_attribute$Dimension = attribute.Dimension) === null || _attribute$Dimension === void 0 ? void 0 : _attribute$Dimension.value) === propertyPath.value;
|
|
46
|
+
const dimAttribute = chartAnnotation.DimensionAttributes?.find(attribute => {
|
|
47
|
+
return attribute.Dimension?.value === propertyPath.value;
|
|
51
48
|
});
|
|
52
49
|
const dimensionDefinition = {
|
|
53
50
|
name: propertyPath.value,
|
|
54
|
-
label:
|
|
55
|
-
role: dimAttribute
|
|
51
|
+
label: propertyPath.$target?.annotations.Common?.Label?.toString() || propertyPath.value,
|
|
52
|
+
role: dimAttribute?.Role?.replace("UI.ChartDimensionRoleType/", "")
|
|
56
53
|
};
|
|
57
54
|
const dimensionProperty = enhanceDataModelPath(converterContext.getDataModelObjectPath(), propertyPath.value).targetObject;
|
|
58
|
-
if (dimensionProperty
|
|
59
|
-
var _dimensionProperty$an2, _dimensionProperty$an3, _dimensionProperty$an4;
|
|
55
|
+
if (dimensionProperty?.annotations.Common?.Text) {
|
|
60
56
|
dimensionDefinition.text = getAssociatedTextPropertyPath(dimensionProperty);
|
|
61
|
-
dimensionDefinition.textArrangement =
|
|
57
|
+
dimensionDefinition.textArrangement = dimensionProperty.annotations.Common.Text.annotations?.UI?.TextArrangement?.toString().replace("UI.TextArrangementType/", "") ?? "TextFirst";
|
|
62
58
|
}
|
|
63
59
|
return dimensionDefinition;
|
|
64
60
|
}) : [];
|
|
65
61
|
const chartMeasures = chartAnnotation.Measures.map(propertyPath => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var _attribute$Measure;
|
|
69
|
-
return ((_attribute$Measure = attribute.Measure) === null || _attribute$Measure === void 0 ? void 0 : _attribute$Measure.value) === propertyPath.value;
|
|
62
|
+
const measureAttribute = chartAnnotation.MeasureAttributes?.find(attribute => {
|
|
63
|
+
return attribute.Measure?.value === propertyPath.value;
|
|
70
64
|
});
|
|
71
65
|
return {
|
|
72
66
|
name: propertyPath.value,
|
|
73
|
-
label:
|
|
74
|
-
role: measureAttribute
|
|
67
|
+
label: propertyPath.$target?.annotations.Common?.Label?.toString() || propertyPath.value,
|
|
68
|
+
role: measureAttribute?.Role?.replace("UI.ChartMeasureRoleType/", "")
|
|
75
69
|
};
|
|
76
70
|
});
|
|
77
71
|
const chartDefinition = {
|
|
78
72
|
chartType: KPIChartTypeFromUI[chartAnnotation.ChartType] || "Line",
|
|
79
73
|
dimensions: charDimensions,
|
|
80
74
|
measures: chartMeasures,
|
|
81
|
-
sortOrder: presentationVariantAnnotation
|
|
82
|
-
var _sortOrder$Property;
|
|
75
|
+
sortOrder: presentationVariantAnnotation?.SortOrder?.map(sortOrder => {
|
|
83
76
|
return {
|
|
84
|
-
name:
|
|
77
|
+
name: sortOrder.Property?.value || "",
|
|
85
78
|
descending: !!sortOrder.Descending
|
|
86
79
|
};
|
|
87
80
|
}),
|
|
88
|
-
maxItems: presentationVariantAnnotation
|
|
81
|
+
maxItems: presentationVariantAnnotation?.MaxItems?.valueOf()
|
|
89
82
|
};
|
|
90
|
-
const chartTitle =
|
|
83
|
+
const chartTitle = chartAnnotation.Title?.valueOf();
|
|
91
84
|
if (chartTitle !== undefined) {
|
|
92
85
|
chartDefinition.title = chartTitle;
|
|
93
86
|
}
|
|
94
87
|
return chartDefinition;
|
|
95
88
|
}
|
|
96
89
|
function updateCurrency(datapointAnnotation, kpiDef) {
|
|
97
|
-
var _targetValueProperty$, _targetValueProperty$3;
|
|
98
90
|
const targetValueProperty = datapointAnnotation.Value.$target;
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
const currency = (_targetValueProperty$2 = targetValueProperty.annotations.Measures) === null || _targetValueProperty$2 === void 0 ? void 0 : _targetValueProperty$2.ISOCurrency;
|
|
91
|
+
if (targetValueProperty.annotations.Measures?.ISOCurrency) {
|
|
92
|
+
const currency = targetValueProperty.annotations.Measures?.ISOCurrency;
|
|
102
93
|
if (isPathAnnotationExpression(currency)) {
|
|
103
94
|
kpiDef.datapoint.unit = {
|
|
104
95
|
value: currency.$target.name,
|
|
@@ -112,9 +103,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
112
103
|
isPath: false
|
|
113
104
|
};
|
|
114
105
|
}
|
|
115
|
-
} else if (
|
|
116
|
-
|
|
117
|
-
const unit = (_targetValueProperty$4 = targetValueProperty.annotations.Measures) === null || _targetValueProperty$4 === void 0 ? void 0 : _targetValueProperty$4.Unit;
|
|
106
|
+
} else if (targetValueProperty.annotations.Measures?.Unit) {
|
|
107
|
+
const unit = targetValueProperty.annotations.Measures?.Unit;
|
|
118
108
|
if (isPathAnnotationExpression(unit)) {
|
|
119
109
|
kpiDef.datapoint.unit = {
|
|
120
110
|
value: unit.$target.name,
|
|
@@ -245,9 +235,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
245
235
|
|
|
246
236
|
// Look for the unavailable actions (if any)
|
|
247
237
|
const annotationKey = Object.keys(annotations).find(key => {
|
|
248
|
-
var _semanticObjectAnnota;
|
|
249
238
|
const annotation = annotations[key];
|
|
250
|
-
return isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions") && annotation.qualifier ===
|
|
239
|
+
return isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions") && annotation.qualifier === semanticObjectAnnotation?.qualifier;
|
|
251
240
|
});
|
|
252
241
|
if (annotationKey) {
|
|
253
242
|
result.unavailableActions = annotations[annotationKey];
|
|
@@ -261,7 +250,6 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
261
250
|
return !!kpiConfig.template;
|
|
262
251
|
}
|
|
263
252
|
function createAnalyticalKPIDefinition(converterContext, kpiConfig, kpiName) {
|
|
264
|
-
var _datapointAnnotation$, _datapointAnnotation$2, _datapointAnnotation$3;
|
|
265
253
|
let contextPath = "";
|
|
266
254
|
if (kpiConfig.contextPath) {
|
|
267
255
|
contextPath = kpiConfig.contextPath;
|
|
@@ -287,18 +275,16 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
287
275
|
return kpi.qualifier === kpiConfig.qualifier;
|
|
288
276
|
});
|
|
289
277
|
if (targetKPI) {
|
|
290
|
-
var _targetKPI$Detail, _presentationVariantA3, _presentationVariantA4, _presentationVariantA5, _targetKPI$Detail2;
|
|
291
278
|
datapointAnnotation = targetKPI.DataPoint;
|
|
292
279
|
selectionVariantAnnotation = targetKPI.SelectionVariant;
|
|
293
|
-
presentationVariantAnnotation =
|
|
294
|
-
chartAnnotation =
|
|
280
|
+
presentationVariantAnnotation = targetKPI.Detail?.DefaultPresentationVariant;
|
|
281
|
+
chartAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
|
|
295
282
|
return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.ChartDefinitionType");
|
|
296
|
-
})
|
|
297
|
-
if (
|
|
298
|
-
var _targetKPI$Detail$Act;
|
|
283
|
+
})?.$target;
|
|
284
|
+
if (targetKPI.Detail?.SemanticObject) {
|
|
299
285
|
navigationInfo = {
|
|
300
286
|
semanticObject: targetKPI.Detail.SemanticObject.toString(),
|
|
301
|
-
action:
|
|
287
|
+
action: targetKPI.Detail.Action?.toString(),
|
|
302
288
|
unavailableActions: []
|
|
303
289
|
};
|
|
304
290
|
}
|
|
@@ -309,15 +295,14 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
309
295
|
return spv.qualifier === kpiConfig.qualifier;
|
|
310
296
|
});
|
|
311
297
|
if (targetSPV) {
|
|
312
|
-
var _presentationVariantA6, _presentationVariantA7, _presentationVariantA8, _presentationVariantA9, _presentationVariantA10, _presentationVariantA11;
|
|
313
298
|
selectionVariantAnnotation = targetSPV.SelectionVariant;
|
|
314
299
|
presentationVariantAnnotation = targetSPV.PresentationVariant;
|
|
315
|
-
datapointAnnotation =
|
|
300
|
+
datapointAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
|
|
316
301
|
return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.DataPointType");
|
|
317
|
-
})
|
|
318
|
-
chartAnnotation =
|
|
302
|
+
})?.$target;
|
|
303
|
+
chartAnnotation = presentationVariantAnnotation?.Visualizations?.find(viz => {
|
|
319
304
|
return isAnnotationOfType(viz.$target, "com.sap.vocabularies.UI.v1.ChartDefinitionType");
|
|
320
|
-
})
|
|
305
|
+
})?.$target;
|
|
321
306
|
} else {
|
|
322
307
|
// Couldn't find a KPI or a SPV annotation with the qualifier from the manifest
|
|
323
308
|
converterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.Medium, IssueType.KPI_ISSUES.KPI_NOT_FOUND + kpiConfig.qualifier);
|
|
@@ -348,13 +333,13 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
348
333
|
datapoint: {
|
|
349
334
|
propertyPath: datapointAnnotation.Value.path,
|
|
350
335
|
annotationPath: kpiConverterContext.getEntitySetBasedAnnotationPath(datapointAnnotation.fullyQualifiedName),
|
|
351
|
-
title:
|
|
352
|
-
description:
|
|
336
|
+
title: datapointAnnotation.Title?.toString(),
|
|
337
|
+
description: datapointAnnotation.Description?.toString()
|
|
353
338
|
},
|
|
354
339
|
selectionVariantFilterDefinitions: selectionVariantAnnotation ? getFilterDefinitionsFromSelectionVariant(selectionVariantAnnotation) : undefined,
|
|
355
340
|
chart: chartDef
|
|
356
341
|
};
|
|
357
|
-
if (
|
|
342
|
+
if (datapointAnnotation.ValueFormat?.NumberOfFractionalDigits !== undefined) {
|
|
358
343
|
kpiDef.datapoint.numberOfFractionalDigits = datapointAnnotation.ValueFormat.NumberOfFractionalDigits.valueOf();
|
|
359
344
|
}
|
|
360
345
|
|
|
@@ -410,4 +395,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
410
395
|
_exports.getKPIDefinitions = getKPIDefinitions;
|
|
411
396
|
return _exports;
|
|
412
397
|
}, false);
|
|
413
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMiIsIl9jaGFydEFubm90YXRpb24kVGl0bCIsIk1lYXN1cmVzIiwidW5kZWZpbmVkIiwiY2hhckRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwibWFwIiwicHJvcGVydHlQYXRoIiwiX2NoYXJ0QW5ub3RhdGlvbiREaW1lIiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0MiIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDMiLCJfZGltQXR0cmlidXRlJFJvbGUiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4iLCJkaW1BdHRyaWJ1dGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiZmluZCIsImF0dHJpYnV0ZSIsIl9hdHRyaWJ1dGUkRGltZW5zaW9uIiwiRGltZW5zaW9uIiwidmFsdWUiLCJkaW1lbnNpb25EZWZpbml0aW9uIiwibmFtZSIsImxhYmVsIiwiJHRhcmdldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsInJvbGUiLCJSb2xlIiwicmVwbGFjZSIsImRpbWVuc2lvblByb3BlcnR5IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiVGV4dCIsIl9kaW1lbnNpb25Qcm9wZXJ0eSRhbjIiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4zIiwiX2RpbWVuc2lvblByb3BlcnR5JGFuNCIsInRleHQiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwiY2hhcnRNZWFzdXJlcyIsIl9jaGFydEFubm90YXRpb24kTWVhcyIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDQiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQ1IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0NiIsIl9tZWFzdXJlQXR0cmlidXRlJFJvbCIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJNZWFzdXJlQXR0cmlidXRlcyIsIl9hdHRyaWJ1dGUkTWVhc3VyZSIsIk1lYXN1cmUiLCJjaGFydERlZmluaXRpb24iLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJfc29ydE9yZGVyJFByb3BlcnR5IiwiUHJvcGVydHkiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsIm1heEl0ZW1zIiwiTWF4SXRlbXMiLCJ2YWx1ZU9mIiwiY2hhcnRUaXRsZSIsIlRpdGxlIiwidGl0bGUiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQzIiwidGFyZ2V0VmFsdWVQcm9wZXJ0eSIsIlZhbHVlIiwiSVNPQ3VycmVuY3kiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQyIiwiY3VycmVuY3kiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsIl90YXJnZXRWYWx1ZVByb3BlcnR5JDQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsIl9zZW1hbnRpY09iamVjdEFubm90YSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwiX2RhdGFwb2ludEFubm90YXRpb24kIiwiX2RhdGFwb2ludEFubm90YXRpb24kMiIsIl9kYXRhcG9pbnRBbm5vdGF0aW9uJDMiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIl90YXJnZXRLUEkkRGV0YWlsIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMyIsIl9wcmVzZW50YXRpb25WYXJpYW50QTQiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE1IiwiX3RhcmdldEtQSSREZXRhaWwyIiwiRGF0YVBvaW50IiwiU2VsZWN0aW9uVmFyaWFudCIsIkRldGFpbCIsIkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiVmlzdWFsaXphdGlvbnMiLCJ2aXoiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZW1hbnRpY09iamVjdCIsIl90YXJnZXRLUEkkRGV0YWlsJEFjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIl9wcmVzZW50YXRpb25WYXJpYW50QTYiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE3IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBOCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTkiLCJfcHJlc2VudGF0aW9uVmFyaWFudEExMCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTExIiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiY2hhcnQiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImRldGFpbE5hdmlnYXRpb24iLCJvdXRib3VuZE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlS1BJRGVmaW5pdGlvbiIsImdldEtQSURlZmluaXRpb25zIiwia3BpQ29uZmlncyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrcGlEZWZzIiwib0RlZiIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGUsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0S1BJLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbnR5cGUgRGltZW5zaW9uRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiBcIlRleHRGaXJzdFwiIHwgXCJUZXh0TGFzdFwiIHwgXCJUZXh0T25seVwiIHwgXCJUZXh0U2VwYXJhdGVcIjtcblx0bGFiZWw6IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkaW1lbnNpb25zOiBEaW1lbnNpb25EZWZpbml0aW9uW107XG5cdG1lYXN1cmVzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W107XG5cdHNvcnRPcmRlcj86IHsgbmFtZTogc3RyaW5nOyBkZXNjZW5kaW5nOiBib29sZWFuIH1bXTtcblx0bWF4SXRlbXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogXCJBbmFseXRpY2FsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGRhdGFwb2ludDoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUtQSURlZmluaXRpb24gPSB7XG5cdHR5cGU6IFwiQ3VzdG9tXCI7XG5cdGtleTogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IEN1c3RvbUtQSURlZmluaXRpb247XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGRpbWVuc2lvbkRlZmluaXRpb246IERpbWVuc2lvbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBkaW1lbnNpb25Qcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgudmFsdWVcblx0XHRcdFx0KS50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChkaW1lbnNpb25Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0KSB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uRGVmaW5pdGlvbi50ZXh0ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGltZW5zaW9uUHJvcGVydHkpO1xuXHRcdFx0XHRcdGRpbWVuc2lvbkRlZmluaXRpb24udGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdFx0XHRcdChkaW1lbnNpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24uVGV4dC5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvXCIsXG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdCkgPz8gXCJUZXh0Rmlyc3RcIikgYXMgXCJUZXh0Rmlyc3RcIiB8IFwiVGV4dExhc3RcIiB8IFwiVGV4dE9ubHlcIiB8IFwiVGV4dFNlcGFyYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uRGVmaW5pdGlvbjtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0Y29uc3QgY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24gPSB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoKHNvcnRPcmRlcikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogc29ydE9yZGVyLlByb3BlcnR5Py52YWx1ZSB8fCBcIlwiLCBkZXNjZW5kaW5nOiAhIXNvcnRPcmRlci5EZXNjZW5kaW5nIH07XG5cdFx0fSksXG5cdFx0bWF4SXRlbXM6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcz8udmFsdWVPZigpIGFzIG51bWJlclxuXHR9O1xuXG5cdGNvbnN0IGNoYXJ0VGl0bGUgPSBjaGFydEFubm90YXRpb24uVGl0bGU/LnZhbHVlT2YoKTtcblx0aWYgKGNoYXJ0VGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0RGVmaW5pdGlvbi50aXRsZSA9IGNoYXJ0VGl0bGU7XG5cdH1cblxuXHRyZXR1cm4gY2hhcnREZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGN1cnJlbmN5KSkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogKGN1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KFxuXHRkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb25cbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LiR0YXJnZXQ7XG5cdFx0XHRpZiAoY3JpdGljYWxpdHlQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdC8vIFdlIGlnbm9yZSBhbGwgdGhlIG90aGVyIHR5cGUgb2YgZHluYW1pYyBleHByZXNzaW9ucyBmb3Igbm93XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBDcml0aWNhbGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyA9IFtdO1xuXHRcdHN3aXRjaCAoa3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHRyZW5kUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLiR0YXJnZXQ7XG5cdFx0XHRpZiAodHJlbmRQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZC5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlVwRGlmZmVyZW5jZS52YWx1ZU9mKCksXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSB7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlIChvdGhlcndpc2UgaWdub3JlKVxuXHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0YXJnZXRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cdC8vIExvb2sgZm9yIHRoZSBzZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uIChpZiBhbnkpXG5cdGxldCBzZW1hbnRpY09iamVjdEFubm90YXRpb246IFNlbWFudGljT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRpZiAoIWFubm90YXRpb24ucXVhbGlmaWVyIHx8ICFzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHRha2UgdGhlIGFubm90YXRpb24gd2l0aG91dCBxdWFsaWZpZXIgaWYgdGhlcmUncyBvbmUsIG90aGVyd2lzZSB3ZSB0YWtlIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RBbm5vdGF0aW9uID0gYW5ub3RhdGlvbiBhcyBTZW1hbnRpY09iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRjb25zdCByZXN1bHQ6IE5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbi50b1N0cmluZygpLFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdW5hdmFpbGFibGUgYWN0aW9ucyAoaWYgYW55KVxuXHRcdGNvbnN0IGFubm90YXRpb25LZXkgPSBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlRlcm0oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSAmJlxuXHRcdFx0XHRhbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uPy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGFubm90YXRpb25LZXkpIHtcblx0XHRcdHJlc3VsdC51bmF2YWlsYWJsZUFjdGlvbnMgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc10gYXMgc3RyaW5nW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbihrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24pOiBrcGlDb25maWcgaXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiB7XG5cdHJldHVybiAhIShrcGlDb25maWcgYXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbikudGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuYWx5dGljYWxLUElEZWZpbml0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGtwaUNvbmZpZzogQW5hbHl0aWNhbEtQSUNvbmZpZ3VyYXRpb24sXG5cdGtwaU5hbWU6IHN0cmluZ1xuKTogQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgY29udGV4dFBhdGggPSBcIlwiO1xuXHRpZiAoa3BpQ29uZmlnLmNvbnRleHRQYXRoKSB7XG5cdFx0Y29udGV4dFBhdGggPSBrcGlDb25maWcuY29udGV4dFBhdGg7XG5cdH0gZWxzZSBpZiAoa3BpQ29uZmlnLmVudGl0eVNldCkge1xuXHRcdGNvbnRleHRQYXRoID0gYC8ke2twaUNvbmZpZy5lbnRpdHlTZXR9YDtcblx0fVxuXHRjb25zdCBrcGlDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oY29udGV4dFBhdGgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwga3BpQ29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0Ly8gVGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5OT19BTkFMWVRJQ1MgKyBjb250ZXh0UGF0aCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEtQSVtdO1xuXHRjb25zdCB0YXJnZXRLUEkgPSBhS1BJQW5ub3RhdGlvbnMuZmluZCgoa3BpKSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0fSk/LiR0YXJnZXQgYXMgQ2hhcnQ7XG5cblx0XHRpZiAodGFyZ2V0S1BJLkRldGFpbD8uU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogdGFyZ2V0S1BJLkRldGFpbC5TZW1hbnRpY09iamVjdC50b1N0cmluZygpLFxuXHRcdFx0XHRhY3Rpb246IHRhcmdldEtQSS5EZXRhaWwuQWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgYSBTUFYgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJcblx0XHRjb25zdCBhU1BWQW5ub3RhdGlvbnMgPSBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJVSVwiLFxuXHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdCkgYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFtdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRpZDogXCJrcGlUYWctXCIgKyBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRjb250ZXh0UGF0aCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZUZvcm1hdD8uTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLnZhbHVlT2YoKTtcblx0fVxuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYp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
|
|
398
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiTWVhc3VyZXMiLCJ1bmRlZmluZWQiLCJjaGFyRGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJtYXAiLCJwcm9wZXJ0eVBhdGgiLCJkaW1BdHRyaWJ1dGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiZmluZCIsImF0dHJpYnV0ZSIsIkRpbWVuc2lvbiIsInZhbHVlIiwiZGltZW5zaW9uRGVmaW5pdGlvbiIsIm5hbWUiLCJsYWJlbCIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJyb2xlIiwiUm9sZSIsInJlcGxhY2UiLCJkaW1lbnNpb25Qcm9wZXJ0eSIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIlRleHQiLCJ0ZXh0IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImNoYXJ0TWVhc3VyZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJNZWFzdXJlIiwiY2hhcnREZWZpbml0aW9uIiwiY2hhcnRUeXBlIiwiQ2hhcnRUeXBlIiwiZGltZW5zaW9ucyIsIm1lYXN1cmVzIiwic29ydE9yZGVyIiwiU29ydE9yZGVyIiwiUHJvcGVydHkiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsIm1heEl0ZW1zIiwiTWF4SXRlbXMiLCJ2YWx1ZU9mIiwiY2hhcnRUaXRsZSIsIlRpdGxlIiwidGl0bGUiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJ0YXJnZXRWYWx1ZVByb3BlcnR5IiwiVmFsdWUiLCJJU09DdXJyZW5jeSIsImN1cnJlbmN5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJkYXRhcG9pbnQiLCJ1bml0IiwiaXNDdXJyZW5jeSIsImlzUGF0aCIsIlVuaXQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJrcGlDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlVHlwZSIsIktQSV9JU1NVRVMiLCJOT19BTkFMWVRJQ1MiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsIm5hdmlnYXRpb25JbmZvIiwiYUtQSUFubm90YXRpb25zIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ0YXJnZXRLUEkiLCJrcGkiLCJEYXRhUG9pbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiRGV0YWlsIiwiRGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQiLCJWaXN1YWxpemF0aW9ucyIsInZpeiIsImlzQW5ub3RhdGlvbk9mVHlwZSIsIlNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiQWN0aW9uIiwiYVNQVkFubm90YXRpb25zIiwidGFyZ2V0U1BWIiwic3B2IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiY2hhcnQiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImRldGFpbE5hdmlnYXRpb24iLCJvdXRib3VuZE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlS1BJRGVmaW5pdGlvbiIsImdldEtQSURlZmluaXRpb25zIiwia3BpQ29uZmlncyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrcGlEZWZzIiwib0RlZiIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGUsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0S1BJLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbnR5cGUgRGltZW5zaW9uRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiBcIlRleHRGaXJzdFwiIHwgXCJUZXh0TGFzdFwiIHwgXCJUZXh0T25seVwiIHwgXCJUZXh0U2VwYXJhdGVcIjtcblx0bGFiZWw6IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkaW1lbnNpb25zOiBEaW1lbnNpb25EZWZpbml0aW9uW107XG5cdG1lYXN1cmVzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W107XG5cdHNvcnRPcmRlcj86IHsgbmFtZTogc3RyaW5nOyBkZXNjZW5kaW5nOiBib29sZWFuIH1bXTtcblx0bWF4SXRlbXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogXCJBbmFseXRpY2FsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGRhdGFwb2ludDoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUtQSURlZmluaXRpb24gPSB7XG5cdHR5cGU6IFwiQ3VzdG9tXCI7XG5cdGtleTogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IEN1c3RvbUtQSURlZmluaXRpb247XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGRpbWVuc2lvbkRlZmluaXRpb246IERpbWVuc2lvbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBkaW1lbnNpb25Qcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgudmFsdWVcblx0XHRcdFx0KS50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChkaW1lbnNpb25Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0KSB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uRGVmaW5pdGlvbi50ZXh0ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGltZW5zaW9uUHJvcGVydHkpO1xuXHRcdFx0XHRcdGRpbWVuc2lvbkRlZmluaXRpb24udGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdFx0XHRcdChkaW1lbnNpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24uVGV4dC5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvXCIsXG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdCkgPz8gXCJUZXh0Rmlyc3RcIikgYXMgXCJUZXh0Rmlyc3RcIiB8IFwiVGV4dExhc3RcIiB8IFwiVGV4dE9ubHlcIiB8IFwiVGV4dFNlcGFyYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uRGVmaW5pdGlvbjtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0Y29uc3QgY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24gPSB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoKHNvcnRPcmRlcikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogc29ydE9yZGVyLlByb3BlcnR5Py52YWx1ZSB8fCBcIlwiLCBkZXNjZW5kaW5nOiAhIXNvcnRPcmRlci5EZXNjZW5kaW5nIH07XG5cdFx0fSksXG5cdFx0bWF4SXRlbXM6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcz8udmFsdWVPZigpIGFzIG51bWJlclxuXHR9O1xuXG5cdGNvbnN0IGNoYXJ0VGl0bGUgPSBjaGFydEFubm90YXRpb24uVGl0bGU/LnZhbHVlT2YoKTtcblx0aWYgKGNoYXJ0VGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0RGVmaW5pdGlvbi50aXRsZSA9IGNoYXJ0VGl0bGU7XG5cdH1cblxuXHRyZXR1cm4gY2hhcnREZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGN1cnJlbmN5KSkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogKGN1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KFxuXHRkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb25cbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LiR0YXJnZXQ7XG5cdFx0XHRpZiAoY3JpdGljYWxpdHlQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdC8vIFdlIGlnbm9yZSBhbGwgdGhlIG90aGVyIHR5cGUgb2YgZHluYW1pYyBleHByZXNzaW9ucyBmb3Igbm93XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBDcml0aWNhbGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyA9IFtdO1xuXHRcdHN3aXRjaCAoa3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHRyZW5kUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLiR0YXJnZXQ7XG5cdFx0XHRpZiAodHJlbmRQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZC5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlVwRGlmZmVyZW5jZS52YWx1ZU9mKCksXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSB7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlIChvdGhlcndpc2UgaWdub3JlKVxuXHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0YXJnZXRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cdC8vIExvb2sgZm9yIHRoZSBzZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uIChpZiBhbnkpXG5cdGxldCBzZW1hbnRpY09iamVjdEFubm90YXRpb246IFNlbWFudGljT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRpZiAoIWFubm90YXRpb24ucXVhbGlmaWVyIHx8ICFzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHRha2UgdGhlIGFubm90YXRpb24gd2l0aG91dCBxdWFsaWZpZXIgaWYgdGhlcmUncyBvbmUsIG90aGVyd2lzZSB3ZSB0YWtlIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RBbm5vdGF0aW9uID0gYW5ub3RhdGlvbiBhcyBTZW1hbnRpY09iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRjb25zdCByZXN1bHQ6IE5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbi50b1N0cmluZygpLFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdW5hdmFpbGFibGUgYWN0aW9ucyAoaWYgYW55KVxuXHRcdGNvbnN0IGFubm90YXRpb25LZXkgPSBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlRlcm0oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSAmJlxuXHRcdFx0XHRhbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uPy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGFubm90YXRpb25LZXkpIHtcblx0XHRcdHJlc3VsdC51bmF2YWlsYWJsZUFjdGlvbnMgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc10gYXMgc3RyaW5nW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbihrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24pOiBrcGlDb25maWcgaXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiB7XG5cdHJldHVybiAhIShrcGlDb25maWcgYXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbikudGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuYWx5dGljYWxLUElEZWZpbml0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGtwaUNvbmZpZzogQW5hbHl0aWNhbEtQSUNvbmZpZ3VyYXRpb24sXG5cdGtwaU5hbWU6IHN0cmluZ1xuKTogQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgY29udGV4dFBhdGggPSBcIlwiO1xuXHRpZiAoa3BpQ29uZmlnLmNvbnRleHRQYXRoKSB7XG5cdFx0Y29udGV4dFBhdGggPSBrcGlDb25maWcuY29udGV4dFBhdGg7XG5cdH0gZWxzZSBpZiAoa3BpQ29uZmlnLmVudGl0eVNldCkge1xuXHRcdGNvbnRleHRQYXRoID0gYC8ke2twaUNvbmZpZy5lbnRpdHlTZXR9YDtcblx0fVxuXHRjb25zdCBrcGlDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oY29udGV4dFBhdGgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwga3BpQ29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0Ly8gVGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5OT19BTkFMWVRJQ1MgKyBjb250ZXh0UGF0aCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEtQSVtdO1xuXHRjb25zdCB0YXJnZXRLUEkgPSBhS1BJQW5ub3RhdGlvbnMuZmluZCgoa3BpKSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0fSk/LiR0YXJnZXQgYXMgQ2hhcnQ7XG5cblx0XHRpZiAodGFyZ2V0S1BJLkRldGFpbD8uU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogdGFyZ2V0S1BJLkRldGFpbC5TZW1hbnRpY09iamVjdC50b1N0cmluZygpLFxuXHRcdFx0XHRhY3Rpb246IHRhcmdldEtQSS5EZXRhaWwuQWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgYSBTUFYgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJcblx0XHRjb25zdCBhU1BWQW5ub3RhdGlvbnMgPSBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJVSVwiLFxuXHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdCkgYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFtdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRpZDogXCJrcGlUYWctXCIgKyBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRjb250ZXh0UGF0aCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZUZvcm1hdD8uTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLnZhbHVlT2YoKTtcblx0fVxuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGtwaURlZnM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7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
|