@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
|
@@ -10,24 +10,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
10
10
|
var usingExtension = ClassSupport.usingExtension;
|
|
11
11
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
12
12
|
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
|
|
13
|
-
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
14
13
|
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
15
14
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
16
15
|
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
17
16
|
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
18
17
|
let RootViewBaseController = (_dec = defineUI5Class("sap.fe.core.rootView.RootViewBaseController"), _dec2 = usingExtension(Placeholder), _dec3 = usingExtension(ViewState), _dec(_class = (_class2 = /*#__PURE__*/function (_BaseController) {
|
|
19
|
-
_inheritsLoose(RootViewBaseController, _BaseController);
|
|
20
18
|
function RootViewBaseController() {
|
|
21
19
|
var _this;
|
|
22
20
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
23
21
|
args[_key] = arguments[_key];
|
|
24
22
|
}
|
|
25
23
|
_this = _BaseController.call(this, ...args) || this;
|
|
26
|
-
_initializerDefineProperty(_this, "oPlaceholder", _descriptor,
|
|
27
|
-
_initializerDefineProperty(_this, "viewState", _descriptor2,
|
|
24
|
+
_initializerDefineProperty(_this, "oPlaceholder", _descriptor, _this);
|
|
25
|
+
_initializerDefineProperty(_this, "viewState", _descriptor2, _this);
|
|
28
26
|
_this.bIsComputingTitleHierachy = false;
|
|
29
27
|
return _this;
|
|
30
28
|
}
|
|
29
|
+
_inheritsLoose(RootViewBaseController, _BaseController);
|
|
31
30
|
var _proto = RootViewBaseController.prototype;
|
|
32
31
|
_proto.onInit = function onInit() {
|
|
33
32
|
SizeHelper.init();
|
|
@@ -52,7 +51,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
52
51
|
};
|
|
53
52
|
_proto.getViewFromContainer = function getViewFromContainer(container) {
|
|
54
53
|
const result = container.isA("sap.ui.core.ComponentContainer") ? container.getComponentInstance().getRootControl() : container;
|
|
55
|
-
return result
|
|
54
|
+
return result?.isA("sap.ui.core.mvc.View") ? result : undefined;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
/**
|
|
@@ -132,7 +131,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
132
131
|
* Method to restore the focusInformation from the history Object.
|
|
133
132
|
*/;
|
|
134
133
|
_proto.restoreFocusFromHistory = function restoreFocusFromHistory() {
|
|
135
|
-
var _Element$getElementBy;
|
|
136
134
|
switch (history.state.focusInfo.type) {
|
|
137
135
|
case "Row":
|
|
138
136
|
const table = Element.getElementById(history.state.focusInfo.tableId);
|
|
@@ -142,7 +140,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
142
140
|
}
|
|
143
141
|
break;
|
|
144
142
|
default:
|
|
145
|
-
|
|
143
|
+
Element.getElementById(history.state.focusInfo.controlId)?.focus();
|
|
146
144
|
}
|
|
147
145
|
//once applied, the focus info is removed to prevent focusing on it each time the user do a back navigation to this page
|
|
148
146
|
history.replaceState(Object.assign(history.state, {
|
|
@@ -208,6 +206,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
208
206
|
return this.oTitleHierarchyCache;
|
|
209
207
|
}
|
|
210
208
|
|
|
209
|
+
/**
|
|
210
|
+
* This function clear the TitleHierarchy cache for the given context path.
|
|
211
|
+
* @param path The path of the context to clear the cache for
|
|
212
|
+
*/;
|
|
213
|
+
_proto.clearTitleHierarchyCache = function clearTitleHierarchyCache(path) {
|
|
214
|
+
delete this._getTitleHierarchyCache()[path];
|
|
215
|
+
}
|
|
216
|
+
|
|
211
217
|
/**
|
|
212
218
|
* This function returns a titleInfo object.
|
|
213
219
|
* @param title The application's title
|
|
@@ -276,11 +282,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
276
282
|
anyObject.setModel(model);
|
|
277
283
|
anyObject.setBindingContext(bindingViewContext);
|
|
278
284
|
const textBinding = anyObject.getBinding("any");
|
|
279
|
-
if (textBinding
|
|
280
|
-
await Promise.all(textBinding.getBindings().map(binding =>
|
|
281
|
-
var _binding$requestValue;
|
|
282
|
-
return (_binding$requestValue = binding.requestValue) === null || _binding$requestValue === void 0 ? void 0 : _binding$requestValue.call(binding);
|
|
283
|
-
}));
|
|
285
|
+
if (textBinding?.isA("sap.ui.model.CompositeBinding")) {
|
|
286
|
+
await Promise.all(textBinding.getBindings().map(binding => binding.requestValue?.()));
|
|
284
287
|
}
|
|
285
288
|
const infoTitle = anyObject.getAny();
|
|
286
289
|
anyObject.destroy();
|
|
@@ -387,7 +390,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
387
390
|
*
|
|
388
391
|
* Annotation HeaderInfo allows for binding of title and description
|
|
389
392
|
* (which are used here as title and subtitle) to any element in the entity
|
|
390
|
-
* (
|
|
393
|
+
* (such types as Boolean, timestamp, double, and others are possible)
|
|
391
394
|
*
|
|
392
395
|
* Creates a new hierarchy and converts non-string types to string.
|
|
393
396
|
* @param aHierarchy Shell title hierarchy
|
|
@@ -406,13 +409,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
406
409
|
return aHierarchyShell;
|
|
407
410
|
};
|
|
408
411
|
_proto._getTargetTypeFromHash = function _getTargetTypeFromHash(sHash) {
|
|
409
|
-
var _oAppComponent$getMan;
|
|
410
412
|
const oAppComponent = this.getAppComponent();
|
|
411
413
|
let sTargetType = "";
|
|
412
|
-
const aRoutes =
|
|
414
|
+
const aRoutes = oAppComponent.getManifestEntry("sap.ui5").routing?.routes ?? [];
|
|
413
415
|
for (const route of aRoutes) {
|
|
414
416
|
const oRoute = oAppComponent.getRouter().getRoute(route.name);
|
|
415
|
-
if (oRoute
|
|
417
|
+
if (oRoute?.match(sHash)) {
|
|
416
418
|
const sTarget = getRouteTargetNames(route.target)[0];
|
|
417
419
|
sTargetType = oAppComponent.getRouter().getTarget(sTarget)._oOptions.name;
|
|
418
420
|
break;
|
|
@@ -554,13 +556,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
554
556
|
await oAppComponent.getShellServices().setTitle(sTitle);
|
|
555
557
|
};
|
|
556
558
|
_proto.getAppContentContainer = function getAppContentContainer() {
|
|
557
|
-
var _oAppComponent$getMan2, _oAppComponent$getMan3;
|
|
558
559
|
const oAppComponent = this.getAppComponent();
|
|
559
|
-
const appContentId =
|
|
560
|
+
const appContentId = oAppComponent.getManifestEntry("sap.ui5").routing?.config?.controlId ?? "appContent";
|
|
560
561
|
return this.getView().byId(appContentId);
|
|
561
562
|
};
|
|
562
563
|
return RootViewBaseController;
|
|
563
|
-
}(BaseController),
|
|
564
|
+
}(BaseController), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "oPlaceholder", [_dec2], {
|
|
564
565
|
configurable: true,
|
|
565
566
|
enumerable: true,
|
|
566
567
|
writable: true,
|
|
@@ -570,7 +571,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
570
571
|
enumerable: true,
|
|
571
572
|
writable: true,
|
|
572
573
|
initializer: null
|
|
573
|
-
})
|
|
574
|
+
}), _class2)) || _class);
|
|
574
575
|
return RootViewBaseController;
|
|
575
576
|
}, false);
|
|
576
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uSW5pdCIsIlNpemVIZWxwZXIiLCJpbml0IiwiX2FIZWxwZXJNb2RlbHMiLCJnZXRQbGFjZWhvbGRlciIsIm9QbGFjZWhvbGRlciIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiX29uQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkV4aXQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXIiLCJ1bmRlZmluZWQiLCJleGl0IiwiZm9yRWFjaCIsIm9Nb2RlbCIsImRlc3Ryb3kiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsImNvbnRhaW5lciIsInJlc3VsdCIsImlzQSIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRWaWV3c0Zyb21QYWdlcyIsInBhZ2VzIiwidmlld3MiLCJwYWdlIiwidmlldyIsInB1c2giLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRSb3V0ZXIiLCJfY3JlYXRlSGVscGVyTW9kZWwiLCJKU09OTW9kZWwiLCJyb3V0aW5nSXNDb21wbGV0ZSIsIl9vUm91dGVNYXRjaGVkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwid2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeSIsIm9FdmVudCIsImFDb250YWluZXJzIiwiZ2V0UGFyYW1ldGVyIiwiYUZFQ29udGFpbmVycyIsIm9Db250YWluZXIiLCJvVmlldyIsIm9Db21wb25lbnRJbnN0YW5jZSIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJvUmlnaHRNb3N0RkVWaWV3IiwiaXNQYWdlUmVhZHkiLCJhdHRhY2hFdmVudE9uY2UiLCJyZXN0b3JlRm9jdXNGcm9tSGlzdG9yeSIsIl9FbGVtZW50JGdldEVsZW1lbnRCeSIsImhpc3RvcnkiLCJzdGF0ZSIsImZvY3VzSW5mbyIsInR5cGUiLCJ0YWJsZSIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInRhYmxlSWQiLCJwb3MiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZmluZEluZGV4IiwiY29udGV4dCIsImdldFBhdGgiLCJjb250ZXh0UGF0aEZvY3VzIiwiZm9jdXNSb3ciLCJjb250cm9sSWQiLCJmb2N1cyIsInJlcGxhY2VTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsInRoZW4iLCJvUm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiVVNoZWxsIiwiY29tcHV0ZVRpdGxlSGllcmFyY2h5IiwiYkZvcmNlRm9jdXMiLCJnZXRSb3V0ZXJQcm94eSIsImlzRm9jdXNGb3JjZWQiLCJzZXRGb2N1c0ZvcmNlZCIsIm9uUGFnZVJlYWR5IiwiZ2V0UGFyZW50IiwiZm9yY2VGb2N1cyIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwib25Db250YWluZXJSZWFkeSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaW5hbGx5IiwiX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvVGl0bGVIaWVyYXJjaHlDYWNoZSIsIl9jb21wdXRlVGl0bGVJbmZvIiwidGl0bGUiLCJzdWJ0aXRsZSIsInNJbnRlbnQiLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbmNsdWRlcyIsImludGVudCIsIl9mb3JtYXRUaXRsZSIsImRpc3BsYXlNb2RlIiwidGl0bGVWYWx1ZSIsInRpdGxlRGVzY3JpcHRpb24iLCJmb3JtYXR0ZWRUaXRsZSIsIl9mZXRjaFRpdGxlVmFsdWUiLCJwYXRoIiwiYXBwQ29tcG9uZW50IiwibW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiYmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24iLCJnZXRPYmplY3QiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwiJEZ1bmN0aW9uIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsInRleHRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFsbCIsImdldEJpbmRpbmdzIiwibWFwIiwiYmluZGluZyIsIl9iaW5kaW5nJHJlcXVlc3RWYWx1ZSIsInJlcXVlc3RWYWx1ZSIsImluZm9UaXRsZSIsImdldEFueSIsInRleHRFeHByZXNzaW9uIiwicHJvcGVydHlDb250ZXh0IiwicHJvbWlzZXMiLCJwYXJzZWR2YWx1ZUV4cHJlc3Npb24iLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsInByb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwidmFsdWVQYXRoIiwicGFydHMiLCJmblZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0dGVyIiwidmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiJCRncm91cElkIiwiaW5pdGlhbGl6ZSIsInByb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJldmVudCIsInRhcmdldFZhbHVlIiwiZ2V0U291cmNlIiwiZ2V0VmFsdWUiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJwYXJzZWRUZXh0RXhwcmVzc2lvbiIsInRleHRQYXRoIiwibGFzdEluZGV4T2YiLCJzbGljZSIsImZuVGV4dEZvcm1hdHRlciIsInByb21pc2VGb3JUaXRsZVRleHQiLCJ0YXJnZXRUZXh0IiwidGl0bGVJbmZvIiwiZ2V0QXBwU3BlY2lmaWNIYXNoIiwiaGFzaENoYW5nZXIiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIlVSSSIsImRlY29kZSIsIl9nZXRIYXNoIiwiZ2V0SGFzaCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwic1BhdGgiLCJvTWV0YU1vZGVsIiwic0VudGl0eVBhdGgiLCJzVHlwZU5hbWUiLCJzQXBwU3BlY2lmaWNIYXNoIiwic1RpdGxlIiwib1RpdGxlSW5mbyIsIl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MiLCJhSGllcmFyY2h5IiwiYUhpZXJhcmNoeVNoZWxsIiwibGV2ZWwiLCJvSGllcmFyY2h5Iiwib1NoZWxsSGllcmFyY2h5Iiwia2V5IiwiU3RyaW5nIiwiX2dldFRhcmdldFR5cGVGcm9tSGFzaCIsInNIYXNoIiwiX29BcHBDb21wb25lbnQkZ2V0TWFuIiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRpbmciLCJyb3V0ZXMiLCJyb3V0ZSIsIm9Sb3V0ZSIsImdldFJvdXRlIiwibmFtZSIsIm1hdGNoIiwic1RhcmdldCIsImdldFJvdXRlVGFyZ2V0TmFtZXMiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJfb09wdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImN1cnJlbnRQYWdlIiwidGl0bGVJbmZvcm1hdGlvblByb21pc2VzIiwiYXBwU3BlY2lmaWNIYXNoIiwibWFuaWZlc3RBcHBTZXR0aW5ncyIsImFwcFRpdGxlIiwiYXBwU3ViVGl0bGUiLCJzdWJUaXRsZSIsImFwcEljb24iLCJwYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm5ld1BhdGgiLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJwYXRoUGFydHMiLCJzaGlmdCIsInBvcCIsInBhdGhQYXJ0IiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsImlzUGFyYW1ldGVyaXplZCIsInJlamVjdCIsInRpdGxlSW5mb0hpZXJhcmNoeSIsInRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvbkNvbnRleHRCb3VuZFRvVmlldyIsIm9Db250ZXh0Iiwic0RlZXBlc3RQYXRoIiwiZ2V0UHJvcGVydHkiLCJzVmlld0NvbnRleHRQYXRoIiwiaW5kZXhPZiIsImRpc3BsYXlFcnJvclBhZ2UiLCJfZXJyb3JNZXNzYWdlIiwiX3BhcmFtZXRlcnMiLCJfRkNMTGV2ZWwiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIkZDTExldmVsIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJnZXRWaXNpYmxlVmlld3MiLCJpc0ZjbEVuYWJsZWQiLCJzQXBwVGl0bGUiLCJzZXRUaXRsZSIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJfb0FwcENvbXBvbmVudCRnZXRNYW4yIiwiX29BcHBDb21wb25lbnQkZ2V0TWFuMyIsImFwcENvbnRlbnRJZCIsImNvbmZpZyIsImJ5SWQiLCJCYXNlQ29udHJvbGxlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm9vdFZpZXdCYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgSGFzaENoYW5nZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvSGFzaENoYW5nZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGUkTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBVUkkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L1VSSVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBBbnkgZnJvbSBcIi4uL2NvbnRyb2xzL0FueVwiO1xuXG5leHBvcnQgdHlwZSBUaXRsZUluZm9ybWF0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZztcblx0c3VidGl0bGU/OiBzdHJpbmc7XG5cdGljb24/OiBzdHJpbmc7XG5cdGludGVudD86IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LlJvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0b1BsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByaXZhdGUgX2FIZWxwZXJNb2RlbHMhOiBKU09OTW9kZWxbXTtcblxuXHRwcml2YXRlIG9Sb3V0ZXI/OiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRlTWF0Y2hlZFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgb1RpdGxlSGllcmFyY2h5Q2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBUaXRsZUluZm9ybWF0aW9uPjtcblxuXHRwcml2YXRlIGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0U2l6ZUhlbHBlci5pbml0KCk7XG5cblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzID0gW107XG5cdH1cblxuXHRnZXRQbGFjZWhvbGRlcigpOiBQbGFjZWhvbGRlciB7XG5cdFx0cmV0dXJuIHRoaXMub1BsYWNlaG9sZGVyO1xuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpOiB2b2lkIHtcblx0XHR0aGlzLm9QbGFjZWhvbGRlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKHt9LCB0aGlzLl9vbkFmdGVyUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQodGhpcy5fb25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyID0gdW5kZWZpbmVkO1xuXG5cdFx0U2l6ZUhlbHBlci5leGl0KCk7XG5cblx0XHQvLyBEZXN0cm95IGFsbCBKU09OIG1vZGVscyBjcmVhdGVkIGR5bmFtaWNhbGx5IGZvciB0aGUgdmlld3Ncblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG9Nb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0XHRvTW9kZWwuZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIGdldFZpZXdGcm9tQ29udGFpbmVyKGNvbnRhaW5lcjogQ29udHJvbCk6IFZpZXcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnRhaW5lci5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKVxuXHRcdFx0PyBjb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS5nZXRSb290Q29udHJvbCgpXG5cdFx0XHQ6IGNvbnRhaW5lcjtcblxuXHRcdHJldHVybiByZXN1bHQ/LmlzQTxWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuYWx5emUgdGhlIHBhZ2VzIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmlld3MuXG5cdCAqIEBwYXJhbSBwYWdlcyBUaGUgcGFnZXMgdG8gYmUgYW5hbHl6ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3c1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzOiBDb250cm9sW10pOiBWaWV3W10ge1xuXHRcdGNvbnN0IHZpZXdzOiBWaWV3W10gPSBbXTtcblxuXHRcdHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXG5cdFx0XHRpZiAodmlldyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZpZXdzLnB1c2godmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmlld3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIHJlc291cmNlTW9kZWwgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0Z2V0UmVzb3VyY2VCdW5kbGUoKTogUmVzb3VyY2VCdW5kbGUgfCBQcm9taXNlPFJlc291cmNlQnVuZGxlPiB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cblxuXHRnZXRSb3V0ZXIoKTogUm91dGVyIHtcblx0XHRpZiAoIXRoaXMub1JvdXRlcikge1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXIoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyO1xuXHR9XG5cblx0X2NyZWF0ZUhlbHBlck1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gV2Uga2VlcCBhIHJlZmVyZW5jZSBvbiB0aGUgbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHksIGFzIHRoZXkgZG9uJ3QgZ2V0IGRlc3Ryb3llZFxuXHRcdC8vIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBpcyBkZXN0cm95ZWQuXG5cdFx0Ly8gVGhpcyBpcyBkb25lIGR1cmluZyBvbkV4aXRcblx0XHRjb25zdCBvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5wdXNoKG9Nb2RlbCk7XG5cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0YXN5bmMgcm91dGluZ0lzQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgKHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB3YWl0aW5nIGZvciB0aGUgUmlnaHQgbW9zdCB2aWV3IHRvIGJlIHJlYWR5LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFJlZmVyZW5jZSBhbiBFdmVudCBwYXJhbWV0ZXIgY29taW5nIGZyb20gcm91dGVNYXRjaGVkIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHJpZ2h0IG1vc3QgdmlldyBpcyByZWFkeVxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3PiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IEZFVmlldykgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgYUNvbnRhaW5lcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIikgPz8gW10sXG5cdFx0XHRcdC8vIFRoZXJlIGNhbiBhbHNvIGJlIHJldXNlIGNvbXBvbmVudHMgaW4gdGhlIHZpZXcsIHJlbW92ZSB0aGVtIGJlZm9yZSBwcm9jZXNzaW5nLlxuXHRcdFx0XHRhRkVDb250YWluZXJzOiBGRVZpZXdbXSA9IFtdO1xuXHRcdFx0YUNvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRhaW5lcjogVmlldyB8IENvbXBvbmVudENvbnRhaW5lciB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsZXQgb1ZpZXcgPSBvQ29udGFpbmVyIGFzIEZFVmlldyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Db250YWluZXIgJiYgKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db21wb25lbnRJbnN0YW5jZSA9IChvQ29udGFpbmVyIGFzIENvbXBvbmVudENvbnRhaW5lcikuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdFx0XHRvVmlldyA9IG9Db21wb25lbnRJbnN0YW5jZS5nZXRSb290Q29udHJvbCgpIGFzIEZFVmlldztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRhRkVDb250YWluZXJzLnB1c2gob1ZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9SaWdodE1vc3RGRVZpZXcgPSBhRkVDb250YWluZXJzW2FGRUNvbnRhaW5lcnMubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAob1JpZ2h0TW9zdEZFVmlldyAmJiBvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuaXNQYWdlUmVhZHkoKSkge1xuXHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0fSBlbHNlIGlmIChvUmlnaHRNb3N0RkVWaWV3KSB7XG5cdFx0XHRcdG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIGZyb20gdGhlIGhpc3RvcnkgT2JqZWN0LlxuXHQgKi9cblx0cHJvdGVjdGVkIHJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udHlwZSkge1xuXHRcdFx0Y2FzZSBcIlJvd1wiOlxuXHRcdFx0XHRjb25zdCB0YWJsZSA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udGFibGVJZCkgYXMgVGFibGU7XG5cdFx0XHRcdGNvbnN0IHBvcyA9IHRhYmxlXG5cdFx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0XHRcdC5maW5kSW5kZXgoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpID09PSBoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250ZXh0UGF0aEZvY3VzKTtcblx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHR0YWJsZS5mb2N1c1Jvdyhwb3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0RWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdH1cblx0XHQvL29uY2UgYXBwbGllZCwgdGhlIGZvY3VzIGluZm8gaXMgcmVtb3ZlZCB0byBwcmV2ZW50IGZvY3VzaW5nIG9uIGl0IGVhY2ggdGltZSB0aGUgdXNlciBkbyBhIGJhY2sgbmF2aWdhdGlvbiB0byB0aGlzIHBhZ2Vcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKGhpc3Rvcnkuc3RhdGUsIHsgZm9jdXNJbmZvOiBudWxsIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUuXG5cdCAqIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogLSB1cGRhdGUgdGFibGUgc2Nyb2xsLlxuXHQgKiAtIGNhbGwgb25QYWdlUmVhZHkgb24gdGhlIHJpZ2h0TW9zdFZpZXcuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vbkFmdGVyUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgPSB0aGlzLndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkob0V2ZW50KVxuXHRcdFx0XHQudGhlbigob1ZpZXc6IFZpZXcpID0+IHtcblx0XHRcdFx0XHQvLyBUaGUgYXV0b0ZvY3VzIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiB0aGUgbmF2Q29udGFpbmVyIG9yIHRoZSBGQ0wsIHNvIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBTaGVsbCBtZW51XG5cdFx0XHRcdFx0Ly8gZXZlbiBpZiB0aGUgYXBwIHRha2VzIGEgbG9uZyB0aW1lIHRvIGxhdW5jaFxuXHRcdFx0XHRcdC8vIFRoZSBmaXJzdCB0aW1lIHRoZSB2aWV3IGlzIGRpc3BsYXllZCwgd2UgbmVlZCB0byBlbmFibGUgdGhlIGF1dG9mb2N1cyBzbyB0aGF0IGl0J3MgbWFuYWdlZCBwcm9wZXJseSBkdXJpbmcgbmF2aWdhdGlvblxuXHRcdFx0XHRcdGNvbnN0IG9Sb290Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXTtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdChvUm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cyAmJlxuXHRcdFx0XHRcdFx0IShvUm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cygpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2wuc2V0UHJvcGVydHkoXCJhdXRvRm9jdXNcIiwgdHJ1ZSwgdHJ1ZSk7IC8vIERvIG5vdCBtYXJrIHRoZSBjb250YWluZXIgYXMgaW52YWxpZCwgb3RoZXJ3aXNlIGl0J3MgcmUtcmVuZGVyZWRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHR0aGlzLl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpO1xuXHRcdFx0XHRcdGlmIChvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuVVNoZWxsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJGb3JjZUZvY3VzID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJlxuXHRcdFx0XHRcdFx0KG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikub25QYWdlUmVhZHkgJiZcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHkoeyBmb3JjZUZvY3VzOiBiRm9yY2VGb2N1cyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghYkZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRcdC8vIFRyeSB0byByZXN0b3JlIHRoZSBmb2N1cyBvbiB3aGVyZSBpdCB3YXMgd2hlbiB3ZSBsYXN0IHZpc2l0ZWQgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyB0aGUgdGl0bGUgaGllcmFyY2h5IGFuZCBjYWxsaW5nIGZvY3VzIG1ldGhvZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSAoIG9yIGluaXRpYWxpemVzIGl0IGlmIHVuZGVmaW5lZCkuXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk6IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRpZiAoIXRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUpIHtcblx0XHRcdHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdGl0bGVJbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRpdGxlIFRoZSBhcHBsaWNhdGlvbidzIHRpdGxlXG5cdCAqIEBwYXJhbSBzdWJ0aXRsZSBUaGUgYXBwbGljYXRpb24ncyBzdWJUaXRsZVxuXHQgKiBAcGFyYW0gc0ludGVudCBUaGUgaW50ZW50IHBhdGggdG8gYmUgcmVkaXJlY3RlZCB0b1xuXHQgKiBAcGFyYW0gaWNvbiBUaGUgYXBwbGljYXRpb24ncyBpY29uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUluZm8odGl0bGU6IHN0cmluZywgc3VidGl0bGU6IHN0cmluZywgc0ludGVudDogc3RyaW5nLCBpY29uID0gXCJcIik6IFRpdGxlSW5mb3JtYXRpb24ge1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNJbnRlbnQuc3BsaXQoXCIvXCIpO1xuXHRcdGlmICghYVBhcnRzW2FQYXJ0cy5sZW5ndGggLSAxXS5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdHNJbnRlbnQgKz0gXCI/cmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiJnJlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBzdWJ0aXRsZSxcblx0XHRcdGludGVudDogc0ludGVudCxcblx0XHRcdGljb246IGljb25cblx0XHR9O1xuXHR9XG5cblx0X2Zvcm1hdFRpdGxlKGRpc3BsYXlNb2RlOiBzdHJpbmcsIHRpdGxlVmFsdWU6IHN0cmluZywgdGl0bGVEZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9ICgke3RpdGxlRGVzY3JpcHRpb259KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufSAoJHt0aXRsZVZhbHVlfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIEhlYWRlckluZm8gdGl0bGUgZm9yIGEgZ2l2ZW4gcGF0aC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGVudGl0eVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHRpdGxlLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gSGVhZGVySW5mbyB0aXRsZSBhbm5vdGF0aW9uIGlzIGF2YWlsYWJsZVxuXHQgKi9cblx0YXN5bmMgX2ZldGNoVGl0bGVWYWx1ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKSxcblx0XHRcdGJpbmRpbmdWaWV3Q29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHBhdGgpLFxuXHRcdFx0aGVhZGVySW5mb1RpdGxlVmFsdWVBbm5vdGF0aW9uID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHttZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWVgKSxcblx0XHRcdHZhbHVlRXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiwgeyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH0pO1xuXHRcdGlmICghdmFsdWVFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHRcdH1cblx0XHRpZiAoaGVhZGVySW5mb1RpdGxlVmFsdWVBbm5vdGF0aW9uLiRGdW5jdGlvbiA9PT0gXCJvZGF0YS5jb25jYXRcIikge1xuXHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueTogdmFsdWVFeHByZXNzaW9uIH0pO1xuXHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nVmlld0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSBhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVwiKTtcblx0XHRcdGlmICh0ZXh0QmluZGluZz8uaXNBPENvbXBvc2l0ZUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIikpIHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwodGV4dEJpbmRpbmcuZ2V0QmluZGluZ3MoKS5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5mb1RpdGxlID0gYW55T2JqZWN0LmdldEFueSgpO1xuXHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoaW5mb1RpdGxlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdGNvbnN0IHRleHRFeHByZXNzaW9uID0gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7IGNvbnRleHQ6IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgfVxuXHRcdFx0KSxcblx0XHRcdHByb3BlcnR5Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGApLFxuXHRcdFx0cHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW10sXG5cdFx0XHRwYXJzZWR2YWx1ZUV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIodmFsdWVFeHByZXNzaW9uKSxcblx0XHRcdHByb21pc2VGb3JEaXNwbGF5TW9kZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShwcm9wZXJ0eUNvbnRleHQpO1xuXHRcdFx0XHRyZXNvbHZlKGRpc3BsYXlNb2RlKTtcblx0XHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvckRpc3BsYXlNb2RlKTtcblx0XHRjb25zdCB2YWx1ZVBhdGggPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGFydHMgPyBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGFydHNbMF0ucGF0aCA6IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5wYXRoLFxuXHRcdFx0Zm5WYWx1ZUZvcm1hdHRlciA9IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHR2YWx1ZUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkodmFsdWVQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdHZhbHVlQmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVmFsdWUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50OiBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZuVmFsdWVGb3JtYXR0ZXIgPyBmblZhbHVlRm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHR2YWx1ZUJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0dmFsdWVCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0fSk7XG5cdFx0cHJvbWlzZXMucHVzaChwcm9taXNlRm9yVGl0bGVWYWx1ZSk7XG5cblx0XHRpZiAodGV4dEV4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IHBhcnNlZFRleHRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHRleHRFeHByZXNzaW9uKTtcblx0XHRcdGxldCB0ZXh0UGF0aCA9IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkVGV4dEV4cHJlc3Npb24ucGFydHNbMF0ucGF0aCA6IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhdGg7XG5cdFx0XHR0ZXh0UGF0aCA9IHZhbHVlUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPiAtMSA/IGAke3ZhbHVlUGF0aC5zbGljZSgwLCB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKX0vJHt0ZXh0UGF0aH1gIDogdGV4dFBhdGg7XG5cblx0XHRcdGNvbnN0IGZuVGV4dEZvcm1hdHRlciA9IHBhcnNlZFRleHRFeHByZXNzaW9uLmZvcm1hdHRlcixcblx0XHRcdFx0dGV4dEJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkodGV4dFBhdGgsIGJpbmRpbmdWaWV3Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdFx0XHR0ZXh0QmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0XHRjb25zdCBwcm9taXNlRm9yVGl0bGVUZXh0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50OiBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldFRleHQgPSBmblRleHRGb3JtYXR0ZXIgPyBmblRleHRGb3JtYXR0ZXIoZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSkgOiBldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdFx0dGV4dEJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0XHRyZXNvbHZlKHRhcmdldFRleHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRleHRCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHR9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVGV4dCk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0aXRsZUluZm86IHN0cmluZ1tdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRcdGlmICh0eXBlb2YgdGl0bGVJbmZvICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gdGhpcy5fZm9ybWF0VGl0bGUodGl0bGVJbmZvWzBdLCB0aXRsZUluZm9bMV0sIHRpdGxlSW5mb1syXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGZldGNoaW5nIHRoZSB0aXRsZSBmcm9tIHRoZSBoZWFkZXIgaW5mbyA6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHJldHVybmluZyB0aGUgZGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoLlxuXHQgKiBAcmV0dXJucyBEZWNvZGVkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhhc2hcblx0ICovXG5cdGdldEFwcFNwZWNpZmljSGFzaCgpOiBzdHJpbmcge1xuXHRcdC8vIEhhc2hDaGFuZ2VkIGlzU2hlbGxOYXZpZ2F0aW9uSGFzaENoYW5nZXJcblx0XHRjb25zdCBoYXNoQ2hhbmdlciA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0cmV0dXJuIGhhc2hDaGFuZ2VyLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBVUkkuZGVjb2RlKGhhc2hDaGFuZ2VyLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikpIDogXCIjL1wiO1xuXHR9XG5cblx0X2dldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRpdGxlSW5mb3JtYXRpb24gZnJvbSBhIHBhdGguXG5cdCAqIEl0IHVwZGF0ZXMgdGhlIGNhY2hlIHRvIHN0b3JlIHRpdGxlIGluZm9ybWF0aW9uIGlmIG5lY2Vzc2FyeVxuXHQgKiBAcGFyYW0geyp9IHNQYXRoIHBhdGggb2YgdGhlIGNvbnRleHQgdG8gcmV0cmlldmUgdGl0bGUgaW5mb3JtYXRpb24gZnJvbSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMge1Byb21pc2V9ICBvVGl0bGVpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyBwcm9taXNlXG5cdCAqL1xuXG5cdGFzeW5jIGdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRjb25zdCBvVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKTtcblxuXHRcdGlmIChvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0pIHtcblx0XHRcdC8vIFRoZSB0aXRsZSBpbmZvIGlzIGFscmVhZHkgc3RvcmVkIGluIHRoZSBjYWNoZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0Y29uc3Qgc1R5cGVOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1R5cGVOYW1lYCk7XG5cdFx0Y29uc3Qgc0FwcFNwZWNpZmljSGFzaCA9IHRoaXMuZ2V0QXBwU3BlY2lmaWNIYXNoKCk7XG5cdFx0Y29uc3Qgc0ludGVudCA9IHNBcHBTcGVjaWZpY0hhc2ggKyBzUGF0aC5zbGljZSgxKTtcblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hUaXRsZVZhbHVlKHNQYXRoKS50aGVuKChzVGl0bGU6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oc1R5cGVOYW1lLCBzVGl0bGUsIHNJbnRlbnQpO1xuXHRcdFx0b1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdID0gb1RpdGxlSW5mbztcblx0XHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZSB0aGF0IHRoZSB1c2hlbGwgc2VydmljZSByZWNlaXZlcyBhbGwgZWxlbWVudHNcblx0ICogKHRpdGxlLCBzdWJ0aXRsZSwgaW50ZW50LCBpY29uKSBhcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBBbm5vdGF0aW9uIEhlYWRlckluZm8gYWxsb3dzIGZvciBiaW5kaW5nIG9mIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuXHQgKiAod2hpY2ggYXJlIHVzZWQgaGVyZSBhcyB0aXRsZSBhbmQgc3VidGl0bGUpIHRvIGFueSBlbGVtZW50IGluIHRoZSBlbnRpdHlcblx0ICogKGJlaW5nIHBvc3NpYmx5IHR5cGVzIGxpa2UgYm9vbGVhbiwgdGltZXN0YW1wLCBkb3VibGUsIGV0Yy4pXG5cdCAqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaGllcmFyY2h5IGFuZCBjb252ZXJ0cyBub24tc3RyaW5nIHR5cGVzIHRvIHN0cmluZy5cblx0ICogQHBhcmFtIGFIaWVyYXJjaHkgU2hlbGwgdGl0bGUgaGllcmFyY2h5XG5cdCAqIEByZXR1cm5zIENvcHkgb2Ygc2hlbGwgdGl0bGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIGFzIHN0cmluZ3Ncblx0ICovXG5cdF9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYUhpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogb2JqZWN0W10ge1xuXHRcdGNvbnN0IGFIaWVyYXJjaHlTaGVsbCA9IFtdO1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgaW4gYUhpZXJhcmNoeSkge1xuXHRcdFx0Y29uc3Qgb0hpZXJhcmNoeSA9IGFIaWVyYXJjaHlbbGV2ZWxdO1xuXHRcdFx0Y29uc3Qgb1NoZWxsSGllcmFyY2h5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvSGllcmFyY2h5KSB7XG5cdFx0XHRcdG9TaGVsbEhpZXJhcmNoeVtrZXldID0gKFxuXHRcdFx0XHRcdHR5cGVvZiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSAhPT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0PyBTdHJpbmcob0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0pXG5cdFx0XHRcdFx0XHQ6IG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dXG5cdFx0XHRcdCkgYXMgc3RyaW5nO1xuXHRcdFx0fVxuXHRcdFx0YUhpZXJhcmNoeVNoZWxsLnB1c2gob1NoZWxsSGllcmFyY2h5KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFIaWVyYXJjaHlTaGVsbDtcblx0fVxuXG5cdF9nZXRUYXJnZXRUeXBlRnJvbUhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0bGV0IHNUYXJnZXRUeXBlID0gXCJcIjtcblxuXHRcdGNvbnN0IGFSb3V0ZXMgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc/LnJvdXRlcyA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHJvdXRlIG9mIGFSb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGUocm91dGUubmFtZSk7XG5cdFx0XHRpZiAob1JvdXRlPy5tYXRjaChzSGFzaCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RhcmdldCA9IGdldFJvdXRlVGFyZ2V0TmFtZXMocm91dGUudGFyZ2V0KVswXTtcblx0XHRcdFx0c1RhcmdldFR5cGUgPSAob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoc1RhcmdldCkgYXMgdW5rbm93biBhcyB7IF9vT3B0aW9uczogeyBuYW1lOiBzdHJpbmcgfSB9KS5fb09wdGlvbnMubmFtZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNUYXJnZXRUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgc2hlbGwgdGl0bGUgYWZ0ZXIgZWFjaCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG1lbnUgaXMgZmlsbGVkIHByb3Blcmx5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBjb21wdXRlVGl0bGVIaWVyYXJjaHkodmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0Y3VycmVudFBhZ2UgPSB2aWV3LmdldFBhcmVudCgpLFxuXHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzID0gW10sXG5cdFx0XHRhcHBTcGVjaWZpY0hhc2ggPSB0aGlzLmdldEFwcFNwZWNpZmljSGFzaCgpLFxuXHRcdFx0bWFuaWZlc3RBcHBTZXR0aW5ncyA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdGFwcFRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy50aXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwU3ViVGl0bGUgPSBtYW5pZmVzdEFwcFNldHRpbmdzLnN1YlRpdGxlIHx8IFwiXCIsXG5cdFx0XHRhcHBJY29uID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5pY29uIHx8IFwiXCI7XG5cdFx0bGV0IHBhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uLCBuZXdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoY3VycmVudFBhZ2UgJiYgKGN1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24pIHtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBhIExSLCB1c2UgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRpZiAodGhpcy5fZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKFwiXCIpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzLnB1c2goUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oYXBwVGl0bGUsIGFwcFN1YlRpdGxlLCBhcHBTcGVjaWZpY0hhc2gsIGFwcEljb24pKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGVuIG1hbmFnZSBvdGhlciBwYWdlc1xuXHRcdFx0XHRuZXdQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IHBhdGhQYXJ0cyA9IG5ld1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRsZXQgcGF0aCA9IFwiXCI7XG5cblx0XHRcdFx0cGF0aFBhcnRzLnNoaWZ0KCk7IC8vIFJlbW92ZSB0aGUgZmlyc3Qgc2VnbWVudCAoZW1wdHkgc3RyaW5nKSBhcyBpdCBoYXMgYmVlbiBtYW5hZ2VkIGFib3ZlXG5cdFx0XHRcdHBhdGhQYXJ0cy5wb3AoKTsgLy8gUmVtb3ZlIHRoZSBsYXN0IHNlZ21lbnQgYXMgaXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcGFnZSBhbmQgc2hvdWxkbid0IGFwcGVhciBpbiB0aGUgbWVudVxuXHRcdFx0XHRwYXRoUGFydHMuZm9yRWFjaCgocGF0aFBhcnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHBhdGggKz0gYC8ke3BhdGhQYXJ0fWA7XG5cdFx0XHRcdFx0Ly9pZiB0aGUgYXNzb2NpYXRlZCB0YXJnZXQgaXMgbm90IGRlY2xhcmVkIGluIHRoZSByb3V0ZXMsIHdlIHNraXAgaXRcblx0XHRcdFx0XHRpZiAoIWFwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZUluZm9CeUhhc2gocGF0aCkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKSxcblx0XHRcdFx0XHRcdGlzUGFyYW1ldGVyaXplZCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdFx0aWYgKCFpc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdFx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZ2V0VGl0bGVJbmZvRnJvbVBhdGgocGF0aCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEN1cnJlbnQgcGFnZVxuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSAoY3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRhcHBTcGVjaWZpY0hhc2ggKyB0aGlzLl9nZXRIYXNoKClcblx0XHRcdCk7XG5cblx0XHRcdGlmIChjb250ZXh0ICYmIG5ld1BhdGgpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW25ld1BhdGhdID0gcGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbYXBwU3BlY2lmaWNIYXNoXSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChQcm9taXNlLnJlamVjdChcIlRpdGxlIGluZm9ybWF0aW9uIG1pc3NpbmcgaW4gSGVhZGVySW5mb1wiKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMpXG5cdFx0XHQudGhlbihhc3luYyAodGl0bGVJbmZvSGllcmFyY2h5OiBUaXRsZUluZm9ybWF0aW9uW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igc2hlbGwgd2hpY2ggaXMgZXhwZWN0aW5nIGFsbCBlbGVtZW50cyBiZWluZyBvZiB0eXBlIHN0cmluZ1xuXHRcdFx0XHRjb25zdCB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCA9IHRoaXMuX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyh0aXRsZUluZm9IaWVyYXJjaHkpLFxuXHRcdFx0XHRcdHRpdGxlID0gcGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIjtcblx0XHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5U2hlbGwucmV2ZXJzZSgpO1xuXHRcdFx0XHRhd2FpdCBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEhpZXJhcmNoeSh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCk7XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0U2hlbGxNZW51VGl0bGUoYXBwQ29tcG9uZW50LCB0aXRsZSwgYXBwVGl0bGUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yTWVzc2FnZSBhcyBzdHJpbmcpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5iSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yTWVzc2FnZSBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBhZnRlciBhIHZpZXcgaGFzIGJlZW4gYm91bmQgdG8gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBib3VuZCB0byBhIHZpZXdcblx0ICovXG5cdG9uQ29udGV4dEJvdW5kVG9WaWV3KG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbCk6IHZvaWQge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0Y29uc3Qgc0RlZXBlc3RQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5nZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiKSxcblx0XHRcdFx0c1ZpZXdDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKCFzRGVlcGVzdFBhdGggfHwgc0RlZXBlc3RQYXRoLmluZGV4T2Yoc1ZpZXdDb250ZXh0UGF0aCkgIT09IDApIHtcblx0XHRcdFx0Ly8gVGhlcmUgd2FzIG5vIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgZGVlcGVzdCByZWFjaGVkIHBhdGgsIG9yIHRoZSBwYXRoXG5cdFx0XHRcdC8vIGZvciB0aGUgdmlldyBpc24ndCBhIHN1YnBhdGggb2YgdGhlIHByZXZpb3VzIGRlZXBlc3QgcGF0aCAtLT4gdXBkYXRlXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvZGVlcGVzdFBhdGhcIiwgc1ZpZXdDb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBkaXNwbGF5RXJyb3JQYWdlKF9lcnJvck1lc3NhZ2U6IHN0cmluZywgX3BhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgX0ZDTExldmVsID0gMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogRkVWaWV3LCBGQ0xMZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRnZXRJbnN0YW5jZWRWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gYWxsIHZpc2libGUgdmlld3MuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXNpYmxlIHZpZXdzXG5cdCAqL1xuXHRnZXRWaXNpYmxlVmlld3MoKTogVmlld1tdIHtcblx0XHRyZXR1cm4gW107XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRfc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRpc0ZjbEVuYWJsZWQoKTogdGhpcyBpcyBGY2xDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFzeW5jIF9zZXRTaGVsbE1lbnVUaXRsZShvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHNUaXRsZTogc3RyaW5nLCBzQXBwVGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSBGY2xDb250cm9sbGVyXG5cdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdGdldEFwcENvbnRlbnRDb250YWluZXIoKTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGFwcENvbnRlbnRJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZz8uY29uZmlnPy5jb250cm9sSWQgPz8gXCJhcHBDb250ZW50XCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoYXBwQ29udGVudElkKSBhcyBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxufVxuaW50ZXJmYWNlIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRvbkNvbnRhaW5lclJlYWR5PygpOiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztNQTJDTUEsc0JBQXNCLElBQUFDLElBQUEsR0FEM0JDLGNBQWMsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFBQyxLQUFBLEdBRTVEQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLFNBQVMsQ0FBQyxFQUFBTixJQUFBLENBQUFPLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsZUFBQTtJQUFBQyxjQUFBLENBQUFYLHNCQUFBLEVBQUFVLGVBQUE7SUFBQSxTQUFBVix1QkFBQTtNQUFBLElBQUFZLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFGLGVBQUEsQ0FBQVMsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsa0JBQUFTLFdBQUEsRUFBQUMsc0JBQUEsQ0FBQVYsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGVBQUFXLFlBQUEsRUFBQUQsc0JBQUEsQ0FBQVYsS0FBQTtNQUFBQSxLQUFBLENBV2xCWSx5QkFBeUIsR0FBRyxLQUFLO01BQUEsT0FBQVosS0FBQTtJQUFBO0lBQUEsSUFBQWEsTUFBQSxHQUFBekIsc0JBQUEsQ0FBQTBCLFNBQUE7SUFBQUQsTUFBQSxDQUV6Q0UsTUFBTSxHQUFOLFNBQUFBLE9BQUEsRUFBZTtNQUNkQyxVQUFVLENBQUNDLElBQUksQ0FBQyxDQUFDO01BRWpCLElBQUksQ0FBQ0MsY0FBYyxHQUFHLEVBQUU7SUFDekIsQ0FBQztJQUFBTCxNQUFBLENB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
|
|
577
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiU2l6ZUhlbHBlciIsImluaXQiLCJfYUhlbHBlck1vZGVscyIsImdldFBsYWNlaG9sZGVyIiwib1BsYWNlaG9sZGVyIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJfb25BZnRlclJvdXRlTWF0Y2hlZCIsIm9uRXhpdCIsImRldGFjaEFmdGVyUm91dGVNYXRjaGVkIiwib1JvdXRlciIsInVuZGVmaW5lZCIsImV4aXQiLCJmb3JFYWNoIiwib01vZGVsIiwiZGVzdHJveSIsImdldFZpZXdGcm9tQ29udGFpbmVyIiwiY29udGFpbmVyIiwicmVzdWx0IiwiaXNBIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFZpZXdzRnJvbVBhZ2VzIiwicGFnZXMiLCJ2aWV3cyIsInBhZ2UiLCJ2aWV3IiwicHVzaCIsImdldFJlc291cmNlQnVuZGxlIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRNb2RlbCIsImdldFJvdXRlciIsIl9jcmVhdGVIZWxwZXJNb2RlbCIsIkpTT05Nb2RlbCIsInJvdXRpbmdJc0NvbXBsZXRlIiwiX29Sb3V0ZU1hdGNoZWRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5Iiwib0V2ZW50IiwiYUNvbnRhaW5lcnMiLCJnZXRQYXJhbWV0ZXIiLCJhRkVDb250YWluZXJzIiwib0NvbnRhaW5lciIsIm9WaWV3Iiwib0NvbXBvbmVudEluc3RhbmNlIiwiZ2V0Q29udHJvbGxlciIsInBhZ2VSZWFkeSIsIm9SaWdodE1vc3RGRVZpZXciLCJpc1BhZ2VSZWFkeSIsImF0dGFjaEV2ZW50T25jZSIsInJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5IiwiaGlzdG9yeSIsInN0YXRlIiwiZm9jdXNJbmZvIiwidHlwZSIsInRhYmxlIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwidGFibGVJZCIsInBvcyIsImdldFJvd0JpbmRpbmciLCJnZXRDdXJyZW50Q29udGV4dHMiLCJmaW5kSW5kZXgiLCJjb250ZXh0IiwiZ2V0UGF0aCIsImNvbnRleHRQYXRoRm9jdXMiLCJmb2N1c1JvdyIsImNvbnRyb2xJZCIsImZvY3VzIiwicmVwbGFjZVN0YXRlIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbiIsIm9Sb290Q29udHJvbCIsImdldFZpZXciLCJnZXRDb250ZW50IiwiZ2V0QXV0b0ZvY3VzIiwic2V0UHJvcGVydHkiLCJvQXBwQ29tcG9uZW50IiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJVU2hlbGwiLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJiRm9yY2VGb2N1cyIsImdldFJvdXRlclByb3h5IiwiaXNGb2N1c0ZvcmNlZCIsInNldEZvY3VzRm9yY2VkIiwib25QYWdlUmVhZHkiLCJnZXRQYXJlbnQiLCJmb3JjZUZvY3VzIiwicmVzdG9yZUZvY3VzRm9yQ3VycmVudEhhc2giLCJvbkNvbnRhaW5lclJlYWR5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpbmFsbHkiLCJfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9UaXRsZUhpZXJhcmNoeUNhY2hlIiwiY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlIiwicGF0aCIsIl9jb21wdXRlVGl0bGVJbmZvIiwidGl0bGUiLCJzdWJ0aXRsZSIsInNJbnRlbnQiLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbmNsdWRlcyIsImludGVudCIsIl9mb3JtYXRUaXRsZSIsImRpc3BsYXlNb2RlIiwidGl0bGVWYWx1ZSIsInRpdGxlRGVzY3JpcHRpb24iLCJmb3JtYXR0ZWRUaXRsZSIsIl9mZXRjaFRpdGxlVmFsdWUiLCJhcHBDb21wb25lbnQiLCJtb2RlbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJiaW5kaW5nVmlld0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiIsImdldE9iamVjdCIsInZhbHVlRXhwcmVzc2lvbiIsIkFubm90YXRpb25IZWxwZXIiLCJmb3JtYXQiLCIkRnVuY3Rpb24iLCJhbnlPYmplY3QiLCJBbnkiLCJhbnkiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwidGV4dEJpbmRpbmciLCJnZXRCaW5kaW5nIiwiYWxsIiwiZ2V0QmluZGluZ3MiLCJtYXAiLCJiaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwiaW5mb1RpdGxlIiwiZ2V0QW55IiwidGV4dEV4cHJlc3Npb24iLCJwcm9wZXJ0eUNvbnRleHQiLCJwcm9taXNlcyIsInBhcnNlZHZhbHVlRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwicHJvbWlzZUZvckRpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJ2YWx1ZVBhdGgiLCJwYXJ0cyIsImZuVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJ2YWx1ZUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCIkJGdyb3VwSWQiLCJpbml0aWFsaXplIiwicHJvbWlzZUZvclRpdGxlVmFsdWUiLCJmbkNoYW5nZSIsImV2ZW50IiwidGFyZ2V0VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRWYWx1ZSIsImRldGFjaENoYW5nZSIsImF0dGFjaENoYW5nZSIsInBhcnNlZFRleHRFeHByZXNzaW9uIiwidGV4dFBhdGgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiZm5UZXh0Rm9ybWF0dGVyIiwicHJvbWlzZUZvclRpdGxlVGV4dCIsInRhcmdldFRleHQiLCJ0aXRsZUluZm8iLCJnZXRBcHBTcGVjaWZpY0hhc2giLCJoYXNoQ2hhbmdlciIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJocmVmRm9yQXBwU3BlY2lmaWNIYXNoIiwiVVJJIiwiZGVjb2RlIiwiX2dldEhhc2giLCJnZXRIYXNoIiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJzUGF0aCIsIm9NZXRhTW9kZWwiLCJzRW50aXR5UGF0aCIsInNUeXBlTmFtZSIsInNBcHBTcGVjaWZpY0hhc2giLCJzVGl0bGUiLCJvVGl0bGVJbmZvIiwiX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyIsImFIaWVyYXJjaHkiLCJhSGllcmFyY2h5U2hlbGwiLCJsZXZlbCIsIm9IaWVyYXJjaHkiLCJvU2hlbGxIaWVyYXJjaHkiLCJrZXkiLCJTdHJpbmciLCJfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoIiwic0hhc2giLCJzVGFyZ2V0VHlwZSIsImFSb3V0ZXMiLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsInJvdXRlcyIsInJvdXRlIiwib1JvdXRlIiwiZ2V0Um91dGUiLCJuYW1lIiwibWF0Y2giLCJzVGFyZ2V0IiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInRhcmdldCIsImdldFRhcmdldCIsIl9vT3B0aW9ucyIsImdldEJpbmRpbmdDb250ZXh0IiwiY3VycmVudFBhZ2UiLCJ0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJhcHBTcGVjaWZpY0hhc2giLCJtYW5pZmVzdEFwcFNldHRpbmdzIiwiYXBwVGl0bGUiLCJhcHBTdWJUaXRsZSIsInN1YlRpdGxlIiwiYXBwSWNvbiIsInBhZ2VUaXRsZUluZm9ybWF0aW9uIiwibmV3UGF0aCIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsInBhdGhQYXJ0cyIsInNoaWZ0IiwicG9wIiwicGF0aFBhcnQiLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJwYXJhbWV0ZXJQYXRoIiwiaXNQYXJhbWV0ZXJpemVkIiwicmVqZWN0IiwidGl0bGVJbmZvSGllcmFyY2h5IiwidGl0bGVJbmZvSGllcmFyY2h5U2hlbGwiLCJyZXZlcnNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEhpZXJhcmNoeSIsIl9zZXRTaGVsbE1lbnVUaXRsZSIsImVycm9yTWVzc2FnZSIsImNhbGN1bGF0ZUxheW91dCIsImlOZXh0RkNMTGV2ZWwiLCJzUHJvcG9zZWRMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIm9uQ29udGV4dEJvdW5kVG9WaWV3Iiwib0NvbnRleHQiLCJzRGVlcGVzdFBhdGgiLCJnZXRQcm9wZXJ0eSIsInNWaWV3Q29udGV4dFBhdGgiLCJpbmRleE9mIiwiZGlzcGxheUVycm9yUGFnZSIsIl9lcnJvck1lc3NhZ2UiLCJfcGFyYW1ldGVycyIsIl9GQ0xMZXZlbCIsInVwZGF0ZVVJU3RhdGVGb3JWaWV3IiwiRkNMTGV2ZWwiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImdldFZpc2libGVWaWV3cyIsImlzRmNsRW5hYmxlZCIsInNBcHBUaXRsZSIsInNldFRpdGxlIiwiZ2V0QXBwQ29udGVudENvbnRhaW5lciIsImFwcENvbnRlbnRJZCIsImNvbmZpZyIsImJ5SWQiLCJCYXNlQ29udHJvbGxlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm9vdFZpZXdCYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgSGFzaENoYW5nZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvSGFzaENoYW5nZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGUkTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBVUkkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L1VSSVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBBbnkgZnJvbSBcIi4uL2NvbnRyb2xzL0FueVwiO1xuXG5leHBvcnQgdHlwZSBUaXRsZUluZm9ybWF0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZztcblx0c3VidGl0bGU/OiBzdHJpbmc7XG5cdGljb24/OiBzdHJpbmc7XG5cdGludGVudD86IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LlJvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0b1BsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByaXZhdGUgX2FIZWxwZXJNb2RlbHMhOiBKU09OTW9kZWxbXTtcblxuXHRwcml2YXRlIG9Sb3V0ZXI/OiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRlTWF0Y2hlZFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgb1RpdGxlSGllcmFyY2h5Q2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBUaXRsZUluZm9ybWF0aW9uPjtcblxuXHRwcml2YXRlIGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0U2l6ZUhlbHBlci5pbml0KCk7XG5cblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzID0gW107XG5cdH1cblxuXHRnZXRQbGFjZWhvbGRlcigpOiBQbGFjZWhvbGRlciB7XG5cdFx0cmV0dXJuIHRoaXMub1BsYWNlaG9sZGVyO1xuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpOiB2b2lkIHtcblx0XHR0aGlzLm9QbGFjZWhvbGRlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKHt9LCB0aGlzLl9vbkFmdGVyUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQodGhpcy5fb25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyID0gdW5kZWZpbmVkO1xuXG5cdFx0U2l6ZUhlbHBlci5leGl0KCk7XG5cblx0XHQvLyBEZXN0cm95IGFsbCBKU09OIG1vZGVscyBjcmVhdGVkIGR5bmFtaWNhbGx5IGZvciB0aGUgdmlld3Ncblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG9Nb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0XHRvTW9kZWwuZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Vmlld0Zyb21Db250YWluZXIoY29udGFpbmVyOiBDb250cm9sKTogVmlldyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udGFpbmVyLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpXG5cdFx0XHQ/IGNvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpLmdldFJvb3RDb250cm9sKClcblx0XHRcdDogY29udGFpbmVyO1xuXG5cdFx0cmV0dXJuIHJlc3VsdD8uaXNBPFZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQW5hbHl6ZSB0aGUgcGFnZXMgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2aWV3cy5cblx0ICogQHBhcmFtIHBhZ2VzIFRoZSBwYWdlcyB0byBiZSBhbmFseXplZC5cblx0ICogQHJldHVybnMgVGhlIHZpZXdzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Vmlld3NGcm9tUGFnZXMocGFnZXM6IENvbnRyb2xbXSk6IFZpZXdbXSB7XG5cdFx0Y29uc3Qgdmlld3M6IFZpZXdbXSA9IFtdO1xuXG5cdFx0cGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIocGFnZSk7XG5cblx0XHRcdGlmICh2aWV3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmlld3MucHVzaCh2aWV3KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIHJlc291cmNlIGJ1bmRsZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2VNb2RlbCBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRnZXRSZXNvdXJjZUJ1bmRsZSgpOiBSZXNvdXJjZUJ1bmRsZSB8IFByb21pc2U8UmVzb3VyY2VCdW5kbGU+IHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcImkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0fVxuXG5cdGdldFJvdXRlcigpOiBSb3V0ZXIge1xuXHRcdGlmICghdGhpcy5vUm91dGVyKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXI7XG5cdH1cblxuXHRfY3JlYXRlSGVscGVyTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHQvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSwgYXMgdGhleSBkb24ndCBnZXQgZGVzdHJveWVkXG5cdFx0Ly8gYXV0b21hdGljYWxseSB3aGVuIHRoZSB2aWV3IGlzIGRlc3Ryb3llZC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgZHVyaW5nIG9uRXhpdFxuXHRcdGNvbnN0IG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLnB1c2gob01vZGVsKTtcblxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHRhc3luYyByb3V0aW5nSXNDb21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCAodGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgfHwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHdhaXRpbmcgZm9yIHRoZSBSaWdodCBtb3N0IHZpZXcgdG8gYmUgcmVhZHkuXG5cdCAqIEBwYXJhbSBvRXZlbnQgUmVmZXJlbmNlIGFuIEV2ZW50IHBhcmFtZXRlciBjb21pbmcgZnJvbSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgcmlnaHQgbW9zdCB2aWV3IGlzIHJlYWR5XG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTxGRVZpZXc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogRkVWaWV3KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBhQ29udGFpbmVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKSA/PyBbXSxcblx0XHRcdFx0Ly8gVGhlcmUgY2FuIGFsc28gYmUgcmV1c2UgY29tcG9uZW50cyBpbiB0aGUgdmlldywgcmVtb3ZlIHRoZW0gYmVmb3JlIHByb2Nlc3NpbmcuXG5cdFx0XHRcdGFGRUNvbnRhaW5lcnM6IEZFVmlld1tdID0gW107XG5cdFx0XHRhQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGFpbmVyOiBWaWV3IHwgQ29tcG9uZW50Q29udGFpbmVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxldCBvVmlldyA9IG9Db250YWluZXIgYXMgRkVWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob0NvbnRhaW5lciAmJiAob0NvbnRhaW5lciBhcyBDb21wb25lbnRDb250YWluZXIpLmdldENvbXBvbmVudEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbXBvbmVudEluc3RhbmNlID0gKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG9WaWV3ID0gb0NvbXBvbmVudEluc3RhbmNlLmdldFJvb3RDb250cm9sKCkgYXMgRkVWaWV3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVmlldyAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeSkge1xuXHRcdFx0XHRcdGFGRUNvbnRhaW5lcnMucHVzaChvVmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1JpZ2h0TW9zdEZFVmlldyA9IGFGRUNvbnRhaW5lcnNbYUZFQ29udGFpbmVycy5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChvUmlnaHRNb3N0RkVWaWV3ICYmIG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9SaWdodE1vc3RGRVZpZXcpIHtcblx0XHRcdFx0b1JpZ2h0TW9zdEZFVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShvUmlnaHRNb3N0RkVWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJlc3RvcmUgdGhlIGZvY3VzSW5mb3JtYXRpb24gZnJvbSB0aGUgaGlzdG9yeSBPYmplY3QuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkoKTogdm9pZCB7XG5cdFx0c3dpdGNoIChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50eXBlKSB7XG5cdFx0XHRjYXNlIFwiUm93XCI6XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50YWJsZUlkKSBhcyBUYWJsZTtcblx0XHRcdFx0Y29uc3QgcG9zID0gdGFibGVcblx0XHRcdFx0XHQuZ2V0Um93QmluZGluZygpXG5cdFx0XHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHRcdFx0LmZpbmRJbmRleCgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkgPT09IGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRleHRQYXRoRm9jdXMpO1xuXHRcdFx0XHRpZiAocG9zICE9PSAtMSkge1xuXHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KHBvcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRFbGVtZW50LmdldEVsZW1lbnRCeUlkKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vb25jZSBhcHBsaWVkLCB0aGUgZm9jdXMgaW5mbyBpcyByZW1vdmVkIHRvIHByZXZlbnQgZm9jdXNpbmcgb24gaXQgZWFjaCB0aW1lIHRoZSB1c2VyIGRvIGEgYmFjayBuYXZpZ2F0aW9uIHRvIHRoaXMgcGFnZVxuXHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oaGlzdG9yeS5zdGF0ZSwgeyBmb2N1c0luZm86IG51bGwgfSksIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZG9uZS5cblx0ICogLSB1cGRhdGUgdGhlIHNoZWxsIHRpdGxlLlxuXHQgKiAtIHVwZGF0ZSB0YWJsZSBzY3JvbGwuXG5cdCAqIC0gY2FsbCBvblBhZ2VSZWFkeSBvbiB0aGUgcmlnaHRNb3N0Vmlldy5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uQWZ0ZXJSb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZSRNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSA9IHRoaXMud2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQpXG5cdFx0XHRcdC50aGVuKChvVmlldzogVmlldykgPT4ge1xuXHRcdFx0XHRcdC8vIFRoZSBhdXRvRm9jdXMgaXMgaW5pdGlhbGx5IGRpc2FibGVkIG9uIHRoZSBuYXZDb250YWluZXIgb3IgdGhlIEZDTCwgc28gdGhhdCB0aGUgZm9jdXMgc3RheXMgb24gdGhlIFNoZWxsIG1lbnVcblx0XHRcdFx0XHQvLyBldmVuIGlmIHRoZSBhcHAgdGFrZXMgYSBsb25nIHRpbWUgdG8gbGF1bmNoXG5cdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IHRpbWUgdGhlIHZpZXcgaXMgZGlzcGxheWVkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXV0b2ZvY3VzIHNvIHRoYXQgaXQncyBtYW5hZ2VkIHByb3Blcmx5IGR1cmluZyBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0Y29uc3Qgb1Jvb3RDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbCAmJlxuXHRcdFx0XHRcdFx0KG9Sb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzICYmXG5cdFx0XHRcdFx0XHQhKG9Sb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzKClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbC5zZXRQcm9wZXJ0eShcImF1dG9Gb2N1c1wiLCB0cnVlLCB0cnVlKTsgLy8gRG8gbm90IG1hcmsgdGhlIGNvbnRhaW5lciBhcyBpbnZhbGlkLCBvdGhlcndpc2UgaXQncyByZS1yZW5kZXJlZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHRcdHRoaXMuX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk7XG5cdFx0XHRcdFx0aWYgKG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5VU2hlbGwpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29tcHV0ZVRpdGxlSGllcmFyY2h5KG9WaWV3KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkZvcmNlRm9jdXMgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuaXNGb2N1c0ZvcmNlZCgpO1xuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXRGb2N1c0ZvcmNlZChmYWxzZSk7IC8vIHJlc2V0XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmXG5cdFx0XHRcdFx0XHQob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5vblBhZ2VSZWFkeSAmJlxuXHRcdFx0XHRcdFx0KG9WaWV3LmdldFBhcmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5vblBhZ2VSZWFkeVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0KG9WaWV3LmdldFBhcmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5vblBhZ2VSZWFkeSh7IGZvcmNlRm9jdXM6IGJGb3JjZUZvY3VzIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8pIHtcblx0XHRcdFx0XHRcdHRoaXMucmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFiRm9yY2VGb2N1cykge1xuXHRcdFx0XHRcdFx0Ly8gVHJ5IHRvIHJlc3RvcmUgdGhlIGZvY3VzIG9uIHdoZXJlIGl0IHdhcyB3aGVuIHdlIGxhc3QgdmlzaXRlZCB0aGUgY3VycmVudCBoYXNoXG5cdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkucmVzdG9yZUZvY3VzRm9yQ3VycmVudEhhc2goKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMub25Db250YWluZXJSZWFkeSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbkNvbnRhaW5lclJlYWR5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIHRoZSB0aXRsZSBoaWVyYXJjaHkgYW5kIGNhbGxpbmcgZm9jdXMgbWV0aG9kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFRpdGxlSGllcmFyY2h5IGNhY2hlICggb3IgaW5pdGlhbGl6ZXMgaXQgaWYgdW5kZWZpbmVkKS5cblx0ICogQHJldHVybnMgIFRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZVxuXHQgKi9cblx0X2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKTogUmVjb3JkPHN0cmluZywgVGl0bGVJbmZvcm1hdGlvbj4ge1xuXHRcdGlmICghdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSkge1xuXHRcdFx0dGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNsZWFyIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSBmb3IgdGhlIGdpdmVuIGNvbnRleHQgcGF0aC5cblx0ICogQHBhcmFtICBwYXRoIFRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIGNsZWFyIHRoZSBjYWNoZSBmb3Jcblx0ICovXG5cdGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW3BhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHRpdGxlSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgYXBwbGljYXRpb24ncyB0aXRsZVxuXHQgKiBAcGFyYW0gc3VidGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3Mgc3ViVGl0bGVcblx0ICogQHBhcmFtIHNJbnRlbnQgVGhlIGludGVudCBwYXRoIHRvIGJlIHJlZGlyZWN0ZWQgdG9cblx0ICogQHBhcmFtIGljb24gVGhlIGFwcGxpY2F0aW9uJ3MgaWNvblxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgaW5mb3JtYXRpb25cblx0ICovXG5cdF9jb21wdXRlVGl0bGVJbmZvKHRpdGxlOiBzdHJpbmcsIHN1YnRpdGxlOiBzdHJpbmcsIHNJbnRlbnQ6IHN0cmluZywgaWNvbiA9IFwiXCIpOiBUaXRsZUluZm9ybWF0aW9uIHtcblx0XHRjb25zdCBhUGFydHMgPSBzSW50ZW50LnNwbGl0KFwiL1wiKTtcblx0XHRpZiAoIWFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiP3Jlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0ludGVudCArPSBcIiZyZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogc3VidGl0bGUsXG5cdFx0XHRpbnRlbnQ6IHNJbnRlbnQsXG5cdFx0XHRpY29uOiBpY29uXG5cdFx0fTtcblx0fVxuXG5cdF9mb3JtYXRUaXRsZShkaXNwbGF5TW9kZTogc3RyaW5nLCB0aXRsZVZhbHVlOiBzdHJpbmcsIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfSAoJHt0aXRsZURlc2NyaXB0aW9ufSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn0gKCR7dGl0bGVWYWx1ZX0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBIZWFkZXJJbmZvIHRpdGxlIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0bW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRiaW5kaW5nVmlld0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwYXRoKSxcblx0XHRcdGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHR2YWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24sIHsgY29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSB9KTtcblx0XHRpZiAoIXZhbHVlRXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0aWYgKGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbi4kRnVuY3Rpb24gPT09IFwib2RhdGEuY29uY2F0XCIpIHtcblx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnk6IHZhbHVlRXhwcmVzc2lvbiB9KTtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChtb2RlbCk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluZm9UaXRsZSA9IGFueU9iamVjdC5nZXRBbnkoKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGluZm9UaXRsZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0KSxcblx0XHRcdFx0eyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH1cblx0XHRcdCksXG5cdFx0XHRwcm9wZXJ0eUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBgKSxcblx0XHRcdHByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdLFxuXHRcdFx0cGFyc2VkdmFsdWVFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRwcm9taXNlRm9yRGlzcGxheU1vZGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUocHJvcGVydHlDb250ZXh0KTtcblx0XHRcdFx0cmVzb2x2ZShkaXNwbGF5TW9kZSk7XG5cdFx0XHR9KTtcblx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JEaXNwbGF5TW9kZSk7XG5cdFx0Y29uc3QgdmFsdWVQYXRoID0gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGF0aCxcblx0XHRcdGZuVmFsdWVGb3JtYXR0ZXIgPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0dmFsdWVCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHZhbHVlUGF0aCwgYmluZGluZ1ZpZXdDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0XHR2YWx1ZUJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdGNvbnN0IHByb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmblZhbHVlRm9ybWF0dGVyID8gZm5WYWx1ZUZvcm1hdHRlcihldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0dmFsdWVCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdHJlc29sdmUodGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHZhbHVlQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHRleHRFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRUZXh0RXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcih0ZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgdGV4dFBhdGggPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXJ0cyA/IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXRoO1xuXHRcdFx0dGV4dFBhdGggPSB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHt2YWx1ZVBhdGguc2xpY2UoMCwgdmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSl9LyR7dGV4dFBhdGh9YCA6IHRleHRQYXRoO1xuXG5cdFx0XHRjb25zdCBmblRleHRGb3JtYXR0ZXIgPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRcdHRleHRCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHRleHRQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdFx0dGV4dEJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVGV4dCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gZm5UZXh0Rm9ybWF0dGVyID8gZm5UZXh0Rm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRcdHRleHRCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRUZXh0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0ZXh0QmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JUaXRsZVRleHQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVJbmZvOiBzdHJpbmdbXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlSW5mbyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IHRoaXMuX2Zvcm1hdFRpdGxlKHRpdGxlSW5mb1swXSwgdGl0bGVJbmZvWzFdLCB0aXRsZUluZm9bMl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIGRlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaC5cblx0ICogQHJldHVybnMgRGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqL1xuXHRnZXRBcHBTcGVjaWZpY0hhc2goKTogc3RyaW5nIHtcblx0XHQvLyBIYXNoQ2hhbmdlZCBpc1NoZWxsTmF2aWdhdGlvbkhhc2hDaGFuZ2VyXG5cdFx0Y29uc3QgaGFzaENoYW5nZXIgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdHJldHVybiBoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gVVJJLmRlY29kZShoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpKSA6IFwiIy9cIjtcblx0fVxuXG5cdF9nZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aXRsZUluZm9ybWF0aW9uIGZyb20gYSBwYXRoLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBjYWNoZSB0byBzdG9yZSB0aXRsZSBpbmZvcm1hdGlvbiBpZiBuZWNlc3Nhcnlcblx0ICogQHBhcmFtIHsqfSBzUGF0aCBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIHJldHJpZXZlIHRpdGxlIGluZm9ybWF0aW9uIGZyb20gTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSAgb1RpdGxlaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcHJvbWlzZVxuXHQgKi9cblxuXHRhc3luYyBnZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aDogc3RyaW5nKTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IHNUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UeXBlTmFtZWApO1xuXHRcdGNvbnN0IHNBcHBTcGVjaWZpY0hhc2ggPSB0aGlzLmdldEFwcFNwZWNpZmljSGFzaCgpO1xuXHRcdGNvbnN0IHNJbnRlbnQgPSBzQXBwU3BlY2lmaWNIYXNoICsgc1BhdGguc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoVGl0bGVWYWx1ZShzUGF0aCkudGhlbigoc1RpdGxlOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0IG9UaXRsZUluZm8gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKHNUeXBlTmFtZSwgc1RpdGxlLCBzSW50ZW50KTtcblx0XHRcdG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSA9IG9UaXRsZUluZm87XG5cdFx0XHRyZXR1cm4gb1RpdGxlSW5mbztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmUgdGhhdCB0aGUgdXNoZWxsIHNlcnZpY2UgcmVjZWl2ZXMgYWxsIGVsZW1lbnRzXG5cdCAqICh0aXRsZSwgc3VidGl0bGUsIGludGVudCwgaWNvbikgYXMgc3RyaW5ncy5cblx0ICpcblx0ICogQW5ub3RhdGlvbiBIZWFkZXJJbmZvIGFsbG93cyBmb3IgYmluZGluZyBvZiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cblx0ICogKHdoaWNoIGFyZSB1c2VkIGhlcmUgYXMgdGl0bGUgYW5kIHN1YnRpdGxlKSB0byBhbnkgZWxlbWVudCBpbiB0aGUgZW50aXR5XG5cdCAqIChzdWNoIHR5cGVzIGFzIEJvb2xlYW4sIHRpbWVzdGFtcCwgZG91YmxlLCBhbmQgb3RoZXJzIGFyZSBwb3NzaWJsZSlcblx0ICpcblx0ICogQ3JlYXRlcyBhIG5ldyBoaWVyYXJjaHkgYW5kIGNvbnZlcnRzIG5vbi1zdHJpbmcgdHlwZXMgdG8gc3RyaW5nLlxuXHQgKiBAcGFyYW0gYUhpZXJhcmNoeSBTaGVsbCB0aXRsZSBoaWVyYXJjaHlcblx0ICogQHJldHVybnMgQ29weSBvZiBzaGVsbCB0aXRsZSBoaWVyYXJjaHkgY29udGFpbmluZyBhbGwgZWxlbWVudHMgYXMgc3RyaW5nc1xuXHQgKi9cblx0X2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyhhSGllcmFyY2h5OiBUaXRsZUluZm9ybWF0aW9uW10pOiBvYmplY3RbXSB7XG5cdFx0Y29uc3QgYUhpZXJhcmNoeVNoZWxsID0gW107XG5cdFx0Zm9yIChjb25zdCBsZXZlbCBpbiBhSGllcmFyY2h5KSB7XG5cdFx0XHRjb25zdCBvSGllcmFyY2h5ID0gYUhpZXJhcmNoeVtsZXZlbF07XG5cdFx0XHRjb25zdCBvU2hlbGxIaWVyYXJjaHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG9IaWVyYXJjaHkpIHtcblx0XHRcdFx0b1NoZWxsSGllcmFyY2h5W2tleV0gPSAoXG5cdFx0XHRcdFx0dHlwZW9mIG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dICE9PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHQ/IFN0cmluZyhvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSlcblx0XHRcdFx0XHRcdDogb0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl1cblx0XHRcdFx0KSBhcyBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0XHRhSGllcmFyY2h5U2hlbGwucHVzaChvU2hlbGxIaWVyYXJjaHkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUhpZXJhcmNoeVNoZWxsO1xuXHR9XG5cblx0X2dldFRhcmdldFR5cGVGcm9tSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRsZXQgc1RhcmdldFR5cGUgPSBcIlwiO1xuXG5cdFx0Y29uc3QgYVJvdXRlcyA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZz8ucm91dGVzID8/IFtdO1xuXHRcdGZvciAoY29uc3Qgcm91dGUgb2YgYVJvdXRlcykge1xuXHRcdFx0Y29uc3Qgb1JvdXRlID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZShyb3V0ZS5uYW1lKTtcblx0XHRcdGlmIChvUm91dGU/Lm1hdGNoKHNIYXNoKSkge1xuXHRcdFx0XHRjb25zdCBzVGFyZ2V0ID0gZ2V0Um91dGVUYXJnZXROYW1lcyhyb3V0ZS50YXJnZXQpWzBdO1xuXHRcdFx0XHRzVGFyZ2V0VHlwZSA9IChvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChzVGFyZ2V0KSBhcyB1bmtub3duIGFzIHsgX29PcHRpb25zOiB7IG5hbWU6IHN0cmluZyB9IH0pLl9vT3B0aW9ucy5uYW1lO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc1RhcmdldFR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBzaGVsbCB0aXRsZSBhZnRlciBlYWNoIG5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbWVudSBpcyBmaWxsZWQgcHJvcGVybHlcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGNvbXB1dGVUaXRsZUhpZXJhcmNoeSh2aWV3OiBWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRjdXJyZW50UGFnZSA9IHZpZXcuZ2V0UGFyZW50KCksXG5cdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMgPSBbXSxcblx0XHRcdGFwcFNwZWNpZmljSGFzaCA9IHRoaXMuZ2V0QXBwU3BlY2lmaWNIYXNoKCksXG5cdFx0XHRtYW5pZmVzdEFwcFNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpLFxuXHRcdFx0YXBwVGl0bGUgPSBtYW5pZmVzdEFwcFNldHRpbmdzLnRpdGxlIHx8IFwiXCIsXG5cdFx0XHRhcHBTdWJUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3Muc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcEljb24gPSBtYW5pZmVzdEFwcFNldHRpbmdzLmljb24gfHwgXCJcIjtcblx0XHRsZXQgcGFnZVRpdGxlSW5mb3JtYXRpb246IFRpdGxlSW5mb3JtYXRpb24sIG5ld1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChjdXJyZW50UGFnZSAmJiAoY3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbikge1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGEgTFIsIHVzZSB0aGUgdGl0bGUgYW5kIHN1YnRpdGxlIGZyb20gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdGlmICh0aGlzLl9nZXRUYXJnZXRUeXBlRnJvbUhhc2goXCJcIikgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChQcm9taXNlLnJlc29sdmUodGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhhcHBUaXRsZSwgYXBwU3ViVGl0bGUsIGFwcFNwZWNpZmljSGFzaCwgYXBwSWNvbikpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoZW4gbWFuYWdlIG90aGVyIHBhZ2VzXG5cdFx0XHRcdG5ld1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3QgcGF0aFBhcnRzID0gbmV3UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGxldCBwYXRoID0gXCJcIjtcblxuXHRcdFx0XHRwYXRoUGFydHMuc2hpZnQoKTsgLy8gUmVtb3ZlIHRoZSBmaXJzdCBzZWdtZW50IChlbXB0eSBzdHJpbmcpIGFzIGl0IGhhcyBiZWVuIG1hbmFnZWQgYWJvdmVcblx0XHRcdFx0cGF0aFBhcnRzLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwYWdlIGFuZCBzaG91bGRuJ3QgYXBwZWFyIGluIHRoZSBtZW51XG5cdFx0XHRcdHBhdGhQYXJ0cy5mb3JFYWNoKChwYXRoUGFydDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cGF0aCArPSBgLyR7cGF0aFBhcnR9YDtcblx0XHRcdFx0XHQvL2lmIHRoZSBhc3NvY2lhdGVkIHRhcmdldCBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIHJvdXRlcywgd2Ugc2tpcCBpdFxuXHRcdFx0XHRcdGlmICghYXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFJvdXRlSW5mb0J5SGFzaChwYXRoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpLFxuXHRcdFx0XHRcdFx0aXNQYXJhbWV0ZXJpemVkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0XHRpZiAoIWlzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0XHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzLnB1c2godGhpcy5nZXRUaXRsZUluZm9Gcm9tUGF0aChwYXRoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3VycmVudCBwYWdlXG5cdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbiA9IChjdXJyZW50UGFnZSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk7XG5cdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbiA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oXG5cdFx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlID8/IFwiXCIsXG5cdFx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uLnN1YnRpdGxlID8/IFwiXCIsXG5cdFx0XHRcdGFwcFNwZWNpZmljSGFzaCArIHRoaXMuX2dldEhhc2goKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNvbnRleHQgJiYgbmV3UGF0aCkge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbbmV3UGF0aF0gPSBwYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVthcHBTcGVjaWZpY0hhc2hdID0gcGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVqZWN0KFwiVGl0bGUgaW5mb3JtYXRpb24gbWlzc2luZyBpbiBIZWFkZXJJbmZvXCIpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcylcblx0XHRcdC50aGVuKGFzeW5jICh0aXRsZUluZm9IaWVyYXJjaHk6IFRpdGxlSW5mb3JtYXRpb25bXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIGZvciBzaGVsbCB3aGljaCBpcyBleHBlY3RpbmcgYWxsIGVsZW1lbnRzIGJlaW5nIG9mIHR5cGUgc3RyaW5nXG5cdFx0XHRcdGNvbnN0IHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsID0gdGhpcy5fZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKHRpdGxlSW5mb0hpZXJhcmNoeSksXG5cdFx0XHRcdFx0dGl0bGUgPSBwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiO1xuXHRcdFx0XHR0aXRsZUluZm9IaWVyYXJjaHlTaGVsbC5yZXZlcnNlKCk7XG5cdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0SGllcmFyY2h5KHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsKTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRTaGVsbE1lbnVUaXRsZShhcHBDb21wb25lbnQsIHRpdGxlLCBhcHBUaXRsZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yTWVzc2FnZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3JNZXNzYWdlIGFzIHN0cmluZyk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yTWVzc2FnZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3JNZXNzYWdlIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIGFmdGVyIGEgdmlldyBoYXMgYmVlbiBib3VuZCB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIGJvdW5kIHRvIGEgdmlld1xuXHQgKi9cblx0b25Db250ZXh0Qm91bmRUb1ZpZXcob0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBzRGVlcGVzdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIpLFxuXHRcdFx0XHRzVmlld0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAoIXNEZWVwZXN0UGF0aCB8fCBzRGVlcGVzdFBhdGguaW5kZXhPZihzVmlld0NvbnRleHRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHQvLyBUaGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBkZWVwZXN0IHJlYWNoZWQgcGF0aCwgb3IgdGhlIHBhdGhcblx0XHRcdFx0Ly8gZm9yIHRoZSB2aWV3IGlzbid0IGEgc3VicGF0aCBvZiB0aGUgcHJldmlvdXMgZGVlcGVzdCBwYXRoIC0tPiB1cGRhdGVcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiLCBzVmlld0NvbnRleHRQYXRoLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoX2Vycm9yTWVzc2FnZTogc3RyaW5nLCBfcGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCBfRkNMTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBGRVZpZXcsIEZDTExldmVsOiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbGwgdmlzaWJsZSB2aWV3cy5cblx0ICogQHJldHVybnMgVGhlIHZpc2libGUgdmlld3Ncblx0ICovXG5cdGdldFZpc2libGVWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc1RpdGxlOiBzdHJpbmcsIHNBcHBUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuIGJ5IEZjbENvbnRyb2xsZXJcblx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0Z2V0QXBwQ29udGVudENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwQ29udGVudElkID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5jb25maWc/LmNvbnRyb2xJZCA/PyBcImFwcENvbnRlbnRcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChhcHBDb250ZW50SWQpIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG59XG5pbnRlcmZhY2UgUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdG9uQ29udGFpbmVyUmVhZHk/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUEyQ01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxTQUFTLENBQUMsRUFBQU4sSUFBQSxDQUFBTyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGVBQUE7SUFBQSxTQUFBVix1QkFBQTtNQUFBLElBQUFXLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELGVBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsa0JBQUFTLFdBQUEsRUFBQVQsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGVBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBQSxLQUFBLENBV2xCVyx5QkFBeUIsR0FBRyxLQUFLO01BQUEsT0FBQVgsS0FBQTtJQUFBO0lBQUFZLGNBQUEsQ0FBQXZCLHNCQUFBLEVBQUFVLGVBQUE7SUFBQSxJQUFBYyxNQUFBLEdBQUF4QixzQkFBQSxDQUFBeUIsU0FBQTtJQUFBRCxNQUFBLENB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
|
|
@@ -85,7 +85,7 @@ class RootViewBaseController extends BaseController {
|
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
getViewFromContainer(container: Control): View | undefined {
|
|
89
89
|
const result = container.isA<ComponentContainer>("sap.ui.core.ComponentContainer")
|
|
90
90
|
? container.getComponentInstance().getRootControl()
|
|
91
91
|
: container;
|
|
@@ -264,6 +264,14 @@ class RootViewBaseController extends BaseController {
|
|
|
264
264
|
return this.oTitleHierarchyCache;
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
/**
|
|
268
|
+
* This function clear the TitleHierarchy cache for the given context path.
|
|
269
|
+
* @param path The path of the context to clear the cache for
|
|
270
|
+
*/
|
|
271
|
+
clearTitleHierarchyCache(path: string): void {
|
|
272
|
+
delete this._getTitleHierarchyCache()[path];
|
|
273
|
+
}
|
|
274
|
+
|
|
267
275
|
/**
|
|
268
276
|
* This function returns a titleInfo object.
|
|
269
277
|
* @param title The application's title
|
|
@@ -444,7 +452,7 @@ class RootViewBaseController extends BaseController {
|
|
|
444
452
|
*
|
|
445
453
|
* Annotation HeaderInfo allows for binding of title and description
|
|
446
454
|
* (which are used here as title and subtitle) to any element in the entity
|
|
447
|
-
* (
|
|
455
|
+
* (such types as Boolean, timestamp, double, and others are possible)
|
|
448
456
|
*
|
|
449
457
|
* Creates a new hierarchy and converts non-string types to string.
|
|
450
458
|
* @param aHierarchy Shell title hierarchy
|
|
@@ -8,10 +8,10 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
8
8
|
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
9
9
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
10
10
|
let AsyncComponentService = /*#__PURE__*/function (_Service) {
|
|
11
|
-
_inheritsLoose(AsyncComponentService, _Service);
|
|
12
11
|
function AsyncComponentService() {
|
|
13
12
|
return _Service.apply(this, arguments) || this;
|
|
14
13
|
}
|
|
14
|
+
_inheritsLoose(AsyncComponentService, _Service);
|
|
15
15
|
var _proto = AsyncComponentService.prototype;
|
|
16
16
|
// !: means that we know it will be assigned before usage
|
|
17
17
|
_proto.init = function init() {
|
|
@@ -47,10 +47,10 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
47
47
|
return AsyncComponentService;
|
|
48
48
|
}(Service);
|
|
49
49
|
let AsyncComponentServiceFactory = /*#__PURE__*/function (_ServiceFactory) {
|
|
50
|
-
_inheritsLoose(AsyncComponentServiceFactory, _ServiceFactory);
|
|
51
50
|
function AsyncComponentServiceFactory() {
|
|
52
51
|
return _ServiceFactory.apply(this, arguments) || this;
|
|
53
52
|
}
|
|
53
|
+
_inheritsLoose(AsyncComponentServiceFactory, _ServiceFactory);
|
|
54
54
|
var _proto2 = AsyncComponentServiceFactory.prototype;
|
|
55
55
|
_proto2.createInstance = async function createInstance(oServiceContext) {
|
|
56
56
|
const asyncComponentService = new AsyncComponentService(oServiceContext);
|
|
@@ -60,4 +60,4 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
60
60
|
}(ServiceFactory);
|
|
61
61
|
return AsyncComponentServiceFactory;
|
|
62
62
|
}, false);
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBc3luY0NvbXBvbmVudFNlcnZpY2UiLCJfU2VydmljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NlcnZpY2VzIiwiX2dldE1hbmlmZXN0RW50cnkiLCJzZXJ2aWNlcyIsImFsbCIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJzU2VydmljZUtleSIsInN0YXJ0dXAiLCJmYWN0b3J5TmFtZSIsIm1hcCIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1NlcnZpY2VJbnN0YW5jZSIsInNNZXRob2ROYW1lIiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsImFsbFNlcnZpY2VzIiwicFJvb3RDb250cm9sTG9hZGVkIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJjYXRjaCIsIlNlcnZpY2UiLCJBc3luY0NvbXBvbmVudFNlcnZpY2VGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMiIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0IiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFzeW5jQ29tcG9uZW50U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxudHlwZSBBc3luY0NvbXBvbmVudFNldHRpbmdzID0ge307XG5cbmNsYXNzIEFzeW5jQ29tcG9uZW50U2VydmljZSBleHRlbmRzIFNlcnZpY2U8QXN5bmNDb21wb25lbnRTZXR0aW5ncz4ge1xuXHRyZXNvbHZlRm4hOiBGdW5jdGlvbjtcblxuXHRyZWplY3RGbiE6ICgpID0+IHZvaWQ7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPHRoaXM+O1xuXHQvLyAhOiBtZWFucyB0aGF0IHdlIGtub3cgaXQgd2lsbCBiZSBhc3NpZ25lZCBiZWZvcmUgdXNhZ2VcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0IGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvU2VydmljZXMgPSBvQ29tcG9uZW50Ll9nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiLCB0cnVlKS5zZXJ2aWNlcztcblx0XHRQcm9taXNlLmFsbChcblx0XHRcdE9iamVjdC5rZXlzKG9TZXJ2aWNlcylcblx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHQoc1NlcnZpY2VLZXkpID0+XG5cdFx0XHRcdFx0XHRvU2VydmljZXNbc1NlcnZpY2VLZXldLnN0YXJ0dXAgPT09IFwid2FpdEZvclwiICYmXG5cdFx0XHRcdFx0XHRvU2VydmljZXNbc1NlcnZpY2VLZXldLmZhY3RvcnlOYW1lICE9PSBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkFzeW5jQ29tcG9uZW50U2VydmljZVwiXG5cdFx0XHRcdClcblx0XHRcdFx0Lm1hcChhc3luYyAoc1NlcnZpY2VLZXk6IHN0cmluZyk6IFByb21pc2U8U2VydmljZTx1bmtub3duPj4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LmdldFNlcnZpY2Uoc1NlcnZpY2VLZXkpLnRoZW4oKG9TZXJ2aWNlSW5zdGFuY2U6IFNlcnZpY2U8dW5rbm93bj4pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNNZXRob2ROYW1lID0gYGdldCR7c1NlcnZpY2VLZXlbMF0udG9VcHBlckNhc2UoKX0ke3NTZXJ2aWNlS2V5LnN1YnN0cmluZygxKX1gO1xuXHRcdFx0XHRcdFx0aWYgKCFvQ29tcG9uZW50Lmhhc093blByb3BlcnR5KHNNZXRob2ROYW1lKSkge1xuXHRcdFx0XHRcdFx0XHQob0NvbXBvbmVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9TZXJ2aWNlSW5zdGFuY2U7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1NlcnZpY2VJbnN0YW5jZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHQpXG5cdFx0XHQudGhlbihhc3luYyAoYWxsU2VydmljZXMpID0+IHtcblx0XHRcdFx0YXdhaXQgKG9Db21wb25lbnQgYXMgeyBwUm9vdENvbnRyb2xMb2FkZWQ/OiBQcm9taXNlPGJvb2xlYW4+IH0pLnBSb290Q29udHJvbExvYWRlZDtcblx0XHRcdFx0cmV0dXJuIGFsbFNlcnZpY2VzO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChhbGxTZXJ2aWNlcykgPT4ge1xuXHRcdFx0XHQvLyBub3RpZml5IHRoZSBjb21wb25lbnRcblx0XHRcdFx0aWYgKG9Db21wb25lbnQub25TZXJ2aWNlc1N0YXJ0ZWQpIHtcblx0XHRcdFx0XHRvQ29tcG9uZW50Lm9uU2VydmljZXNTdGFydGVkKGFsbFNlcnZpY2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnJlc29sdmVGbih0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCh0aGlzLnJlamVjdEZuKTtcblx0fVxufVxuXG5jbGFzcyBBc3luY0NvbXBvbmVudFNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8QXN5bmNDb21wb25lbnRTZXR0aW5ncz4ge1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PEFzeW5jQ29tcG9uZW50U2V0dGluZ3M+KTogUHJvbWlzZTxBc3luY0NvbXBvbmVudFNlcnZpY2U+IHtcblx0XHRjb25zdCBhc3luY0NvbXBvbmVudFNlcnZpY2UgPSBuZXcgQXN5bmNDb21wb25lbnRTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGFzeW5jQ29tcG9uZW50U2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBc3luY0NvbXBvbmVudFNlcnZpY2VGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7TUFPTUEscUJBQXFCLDBCQUFBQyxRQUFBO0lBQUEsU0FBQUQsc0JBQUE7TUFBQSxPQUFBQyxRQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLGNBQUEsQ0FBQUoscUJBQUEsRUFBQUMsUUFBQTtJQUFBLElBQUFJLE1BQUEsR0FBQUwscUJBQUEsQ0FBQU0sU0FBQTtJQU0xQjtJQUFBRCxNQUFBLENBRUFFLElBQUksR0FBSixTQUFBQSxJQUFJQSxDQUFBLEVBQVM7TUFDWixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDbkQsSUFBSSxDQUFDQyxTQUFTLEdBQUdGLE9BQU87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
|