@sapui5/sap.fe.core 1.134.0 → 1.136.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 +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseController", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ManifestHelper", "sap/fe/core/helpers/SizeHelper", "sap/ui/base/BindingParser", "sap/ui/core/Element", "sap/ui/core/routing/HashChanger", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/thirdparty/URI", "../controls/Any"], function (Log, ClassSupport, BaseController, CommonUtils, Placeholder, ViewState, ManifestHelper, SizeHelper, BindingParser, Element, HashChanger, JSONModel, AnnotationHelper, URI, Any) {
|
|
6
6
|
"use strict";
|
|
@@ -37,10 +37,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
37
37
|
};
|
|
38
38
|
_proto.attachRouteMatchers = function attachRouteMatchers() {
|
|
39
39
|
this.oPlaceholder.attachRouteMatchers();
|
|
40
|
-
this.getAppComponent().getRoutingService().attachAfterRouteMatched({}, this.
|
|
40
|
+
this.getAppComponent().getRoutingService().attachAfterRouteMatched({}, this.onAfterRouteMatched, this);
|
|
41
41
|
};
|
|
42
42
|
_proto.onExit = function onExit() {
|
|
43
|
-
this.getAppComponent().getRoutingService().detachAfterRouteMatched(this.
|
|
43
|
+
this.getAppComponent().getRoutingService().detachAfterRouteMatched(this.onAfterRouteMatched, this);
|
|
44
44
|
this.oRouter = undefined;
|
|
45
45
|
SizeHelper.exit();
|
|
46
46
|
|
|
@@ -153,45 +153,45 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
153
153
|
* - update the shell title.
|
|
154
154
|
* - update table scroll.
|
|
155
155
|
* - call onPageReady on the rightMostView.
|
|
156
|
-
* @param
|
|
156
|
+
* @param event
|
|
157
|
+
* @returns A promise for the current navigation
|
|
157
158
|
*/;
|
|
158
|
-
_proto.
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
_proto.onAfterRouteMatched = async function onAfterRouteMatched(event) {
|
|
160
|
+
try {
|
|
161
|
+
const view = await this.waitForRightMostViewReady(event);
|
|
162
|
+
if (this.getVisibleViews().includes(view)) {
|
|
161
163
|
// The autoFocus is initially disabled on the navContainer or the FCL, so that the focus stays on the Shell menu
|
|
162
164
|
// even if the app takes a long time to launch
|
|
163
165
|
// The first time the view is displayed, we need to enable the autofocus so that it's managed properly during navigation
|
|
164
|
-
const
|
|
165
|
-
if (
|
|
166
|
-
|
|
166
|
+
const rootControl = this.getView().getContent()[0];
|
|
167
|
+
if (rootControl && rootControl.getAutoFocus && !rootControl.getAutoFocus()) {
|
|
168
|
+
rootControl.setProperty("autoFocus", true, true); // Do not mark the container as invalid, otherwise it's re-rendered
|
|
167
169
|
}
|
|
168
|
-
const
|
|
170
|
+
const appComponent = this.getAppComponent();
|
|
169
171
|
this._scrollTablesToLastNavigatedItems();
|
|
170
|
-
if (
|
|
171
|
-
this.computeTitleHierarchy(
|
|
172
|
+
if (appComponent.getEnvironmentCapabilities().getCapabilities().UShell) {
|
|
173
|
+
this.computeTitleHierarchy(view);
|
|
172
174
|
}
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
if (
|
|
176
|
-
|
|
177
|
-
forceFocus:
|
|
175
|
+
const forceFocus = appComponent.getRouterProxy().isFocusForced();
|
|
176
|
+
appComponent.getRouterProxy().setFocusForced(false); // reset
|
|
177
|
+
if (view.getController() && view.getParent().onPageReady) {
|
|
178
|
+
view.getParent().onPageReady({
|
|
179
|
+
forceFocus: forceFocus
|
|
178
180
|
});
|
|
179
181
|
}
|
|
180
182
|
if (history.state.focusInfo) {
|
|
181
183
|
this.restoreFocusFromHistory();
|
|
182
|
-
} else if (!
|
|
184
|
+
} else if (!forceFocus) {
|
|
183
185
|
// Try to restore the focus on where it was when we last visited the current hash
|
|
184
|
-
|
|
186
|
+
appComponent.getRouterProxy().restoreFocusForCurrentHash();
|
|
185
187
|
}
|
|
186
188
|
if (this.onContainerReady) {
|
|
187
189
|
this.onContainerReady();
|
|
188
190
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
this._oRouteMatchedPromise = undefined;
|
|
194
|
-
});
|
|
191
|
+
}
|
|
192
|
+
return view;
|
|
193
|
+
} catch (error) {
|
|
194
|
+
Log.error("An error occurs while computing the title hierarchy and calling focus method", error);
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
@@ -219,11 +219,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
219
219
|
* @param title The application's title
|
|
220
220
|
* @param subtitle The application's subTitle
|
|
221
221
|
* @param sIntent The intent path to be redirected to
|
|
222
|
+
* @param description The application's description
|
|
222
223
|
* @param icon The application's icon
|
|
223
224
|
* @returns The title information
|
|
224
225
|
*/;
|
|
225
|
-
_proto._computeTitleInfo = function _computeTitleInfo(title, subtitle, sIntent) {
|
|
226
|
-
let icon = arguments.length >
|
|
226
|
+
_proto._computeTitleInfo = function _computeTitleInfo(title, subtitle, sIntent, description) {
|
|
227
|
+
let icon = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
|
|
227
228
|
const aParts = sIntent.split("/");
|
|
228
229
|
if (!aParts[aParts.length - 1].includes("?")) {
|
|
229
230
|
sIntent += "?restoreHistory=true";
|
|
@@ -234,7 +235,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
234
235
|
title: title,
|
|
235
236
|
subtitle: subtitle,
|
|
236
237
|
intent: sIntent,
|
|
237
|
-
icon: icon
|
|
238
|
+
icon: icon,
|
|
239
|
+
description: description
|
|
238
240
|
};
|
|
239
241
|
};
|
|
240
242
|
_proto._formatTitle = function _formatTitle(displayMode, titleValue, titleDescription) {
|
|
@@ -423,6 +425,56 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
423
425
|
return sTargetType;
|
|
424
426
|
}
|
|
425
427
|
|
|
428
|
+
/**
|
|
429
|
+
* Helper method to determine the format of the browser title based on the current view.
|
|
430
|
+
* @param titleInfoHierarchyShell TitleInformation array
|
|
431
|
+
* @param pageTitleInformation TitleInformation object
|
|
432
|
+
* @returns An object with a header text and an additional context
|
|
433
|
+
*/;
|
|
434
|
+
_proto._getBrowserTitle = function _getBrowserTitle(titleInfoHierarchyShell, pageTitleInformation) {
|
|
435
|
+
const breadcrumbTexts = [];
|
|
436
|
+
let firstPart = "",
|
|
437
|
+
secondPart = "";
|
|
438
|
+
const titleInfoHierarchy = [...titleInfoHierarchyShell];
|
|
439
|
+
if (titleInfoHierarchy.length > 1) {
|
|
440
|
+
titleInfoHierarchy.pop();
|
|
441
|
+
titleInfoHierarchy.forEach(titleInfo => {
|
|
442
|
+
if (titleInfo.subtitle) {
|
|
443
|
+
breadcrumbTexts.push(titleInfo.subtitle);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
if (pageTitleInformation.title) {
|
|
448
|
+
breadcrumbTexts.push(pageTitleInformation.title);
|
|
449
|
+
}
|
|
450
|
+
if (pageTitleInformation.description) {
|
|
451
|
+
firstPart = `${pageTitleInformation.subtitle}(${pageTitleInformation.description})`;
|
|
452
|
+
} else {
|
|
453
|
+
firstPart = `${pageTitleInformation.subtitle}`;
|
|
454
|
+
}
|
|
455
|
+
secondPart = breadcrumbTexts.join(" - ");
|
|
456
|
+
return {
|
|
457
|
+
headerText: secondPart ? `${firstPart} - ${secondPart}` : firstPart
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Calculate the browser title and menu title, then trigger the set API of the shell.
|
|
463
|
+
* @param appTitle Application title
|
|
464
|
+
* @param titleInfoHierarchyShell An object for title information
|
|
465
|
+
* @param pageTitleInformation TitleInformation object
|
|
466
|
+
*/;
|
|
467
|
+
_proto._setTitles = async function _setTitles(appTitle, titleInfoHierarchyShell, pageTitleInformation) {
|
|
468
|
+
// Get the title of the browser
|
|
469
|
+
let browserTitle;
|
|
470
|
+
const appComponent = this.getAppComponent(),
|
|
471
|
+
title = pageTitleInformation.title ?? "";
|
|
472
|
+
if (titleInfoHierarchyShell.length) {
|
|
473
|
+
browserTitle = this._getBrowserTitle(titleInfoHierarchyShell, pageTitleInformation);
|
|
474
|
+
}
|
|
475
|
+
await this._setShellMenuTitle(appComponent, title, appTitle, browserTitle);
|
|
476
|
+
}
|
|
477
|
+
|
|
426
478
|
/**
|
|
427
479
|
* This function updates the shell title after each navigation.
|
|
428
480
|
* @param view The current view
|
|
@@ -470,7 +522,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
470
522
|
|
|
471
523
|
// Current page
|
|
472
524
|
pageTitleInformation = currentPage._getPageTitleInformation();
|
|
473
|
-
pageTitleInformation = this._computeTitleInfo(pageTitleInformation.title ?? "", pageTitleInformation.subtitle ?? "", appSpecificHash + this._getHash());
|
|
525
|
+
pageTitleInformation = this._computeTitleInfo(pageTitleInformation.title ?? "", pageTitleInformation.subtitle ?? "", appSpecificHash + this._getHash(), pageTitleInformation.description);
|
|
474
526
|
if (context && newPath) {
|
|
475
527
|
this._getTitleHierarchyCache()[newPath] = pageTitleInformation;
|
|
476
528
|
} else {
|
|
@@ -485,7 +537,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
485
537
|
title = pageTitleInformation.title ?? "";
|
|
486
538
|
titleInfoHierarchyShell.reverse();
|
|
487
539
|
await appComponent.getShellServices().setHierarchy(titleInfoHierarchyShell);
|
|
488
|
-
await this.
|
|
540
|
+
await this._setTitles(appTitle, titleInfoHierarchyShell, pageTitleInformation);
|
|
489
541
|
return;
|
|
490
542
|
}).catch(function (errorMessage) {
|
|
491
543
|
Log.error(errorMessage);
|
|
@@ -510,7 +562,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
510
562
|
// The title info is already stored in the cache
|
|
511
563
|
return Promise.resolve(oTitleHierarchyCache[appSpecificHash]);
|
|
512
564
|
} else {
|
|
513
|
-
return Promise.resolve(this._computeTitleInfo(appTitle, appSubTitle, appSpecificHash, appIcon));
|
|
565
|
+
return Promise.resolve(this._computeTitleInfo(appTitle, appSubTitle, appSpecificHash, undefined, appIcon));
|
|
514
566
|
}
|
|
515
567
|
}
|
|
516
568
|
|
|
@@ -569,9 +621,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
569
621
|
|
|
570
622
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
571
623
|
;
|
|
572
|
-
_proto._setShellMenuTitle = async function _setShellMenuTitle(oAppComponent, sTitle, sAppTitle) {
|
|
624
|
+
_proto._setShellMenuTitle = async function _setShellMenuTitle(oAppComponent, sTitle, sAppTitle, additionalInformation) {
|
|
573
625
|
// To be overriden by FclController
|
|
574
|
-
await oAppComponent.getShellServices().setTitle(sTitle);
|
|
626
|
+
await oAppComponent.getShellServices().setTitle(sTitle, additionalInformation);
|
|
575
627
|
};
|
|
576
628
|
_proto.getAppContentContainer = function getAppContentContainer() {
|
|
577
629
|
const oAppComponent = this.getAppComponent();
|
|
@@ -592,4 +644,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
|
|
|
592
644
|
}), _class2)) || _class);
|
|
593
645
|
return RootViewBaseController;
|
|
594
646
|
}, false);
|
|
595
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiU2l6ZUhlbHBlciIsImluaXQiLCJfYUhlbHBlck1vZGVscyIsImdldFBsYWNlaG9sZGVyIiwib1BsYWNlaG9sZGVyIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJfb25BZnRlclJvdXRlTWF0Y2hlZCIsIm9uRXhpdCIsImRldGFjaEFmdGVyUm91dGVNYXRjaGVkIiwib1JvdXRlciIsInVuZGVmaW5lZCIsImV4aXQiLCJmb3JFYWNoIiwib01vZGVsIiwiZGVzdHJveSIsImdldFZpZXdGcm9tQ29udGFpbmVyIiwiY29udGFpbmVyIiwicmVzdWx0IiwiaXNBIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFZpZXdzRnJvbVBhZ2VzIiwicGFnZXMiLCJ2aWV3cyIsInBhZ2UiLCJ2aWV3IiwicHVzaCIsImdldFJlc291cmNlQnVuZGxlIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRNb2RlbCIsImdldFJvdXRlciIsIl9jcmVhdGVIZWxwZXJNb2RlbCIsIkpTT05Nb2RlbCIsInJvdXRpbmdJc0NvbXBsZXRlIiwiX29Sb3V0ZU1hdGNoZWRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5Iiwib0V2ZW50IiwiYUNvbnRhaW5lcnMiLCJnZXRQYXJhbWV0ZXIiLCJhRkVDb250YWluZXJzIiwib0NvbnRhaW5lciIsIm9WaWV3Iiwib0NvbXBvbmVudEluc3RhbmNlIiwiZ2V0Q29udHJvbGxlciIsInBhZ2VSZWFkeSIsIm9SaWdodE1vc3RGRVZpZXciLCJpc1BhZ2VSZWFkeSIsImF0dGFjaEV2ZW50T25jZSIsInJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5IiwiaGlzdG9yeSIsInN0YXRlIiwiZm9jdXNJbmZvIiwidHlwZSIsInRhYmxlIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwidGFibGVJZCIsInBvcyIsImdldFJvd0JpbmRpbmciLCJnZXRDdXJyZW50Q29udGV4dHMiLCJmaW5kSW5kZXgiLCJjb250ZXh0IiwiZ2V0UGF0aCIsImNvbnRleHRQYXRoRm9jdXMiLCJmb2N1c1JvdyIsImNvbnRyb2xJZCIsImZvY3VzIiwicmVwbGFjZVN0YXRlIiwiT2JqZWN0IiwiYXNzaWduIiwidGhlbiIsIm9Sb290Q29udHJvbCIsImdldFZpZXciLCJnZXRDb250ZW50IiwiZ2V0QXV0b0ZvY3VzIiwic2V0UHJvcGVydHkiLCJvQXBwQ29tcG9uZW50IiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJVU2hlbGwiLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJiRm9yY2VGb2N1cyIsImdldFJvdXRlclByb3h5IiwiaXNGb2N1c0ZvcmNlZCIsInNldEZvY3VzRm9yY2VkIiwib25QYWdlUmVhZHkiLCJnZXRQYXJlbnQiLCJmb3JjZUZvY3VzIiwicmVzdG9yZUZvY3VzRm9yQ3VycmVudEhhc2giLCJvbkNvbnRhaW5lclJlYWR5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpbmFsbHkiLCJfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9UaXRsZUhpZXJhcmNoeUNhY2hlIiwiY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlIiwicGF0aCIsIl9jb21wdXRlVGl0bGVJbmZvIiwidGl0bGUiLCJzdWJ0aXRsZSIsInNJbnRlbnQiLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbmNsdWRlcyIsImludGVudCIsIl9mb3JtYXRUaXRsZSIsImRpc3BsYXlNb2RlIiwidGl0bGVWYWx1ZSIsInRpdGxlRGVzY3JpcHRpb24iLCJmb3JtYXR0ZWRUaXRsZSIsIl9mZXRjaFRpdGxlVmFsdWUiLCJhcHBDb21wb25lbnQiLCJtb2RlbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJiaW5kaW5nVmlld0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiIsImdldE9iamVjdCIsInZhbHVlRXhwcmVzc2lvbiIsIkFubm90YXRpb25IZWxwZXIiLCJmb3JtYXQiLCIkRnVuY3Rpb24iLCJhbnlPYmplY3QiLCJBbnkiLCJhbnkiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwidGV4dEJpbmRpbmciLCJnZXRCaW5kaW5nIiwiYWxsIiwiZ2V0QmluZGluZ3MiLCJtYXAiLCJiaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwiaW5mb1RpdGxlIiwiZ2V0QW55IiwidGV4dEV4cHJlc3Npb24iLCJwcm9wZXJ0eUNvbnRleHQiLCJwcm9taXNlcyIsInBhcnNlZHZhbHVlRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwicHJvbWlzZUZvckRpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJ2YWx1ZVBhdGgiLCJwYXJ0cyIsImZuVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJ2YWx1ZUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCIkJGdyb3VwSWQiLCJpbml0aWFsaXplIiwicHJvbWlzZUZvclRpdGxlVmFsdWUiLCJmbkNoYW5nZSIsImV2ZW50IiwidGFyZ2V0VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRWYWx1ZSIsImRldGFjaENoYW5nZSIsImF0dGFjaENoYW5nZSIsInBhcnNlZFRleHRFeHByZXNzaW9uIiwidGV4dFBhdGgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiZm5UZXh0Rm9ybWF0dGVyIiwicHJvbWlzZUZvclRpdGxlVGV4dCIsInRhcmdldFRleHQiLCJ0aXRsZUluZm8iLCJnZXRBcHBTcGVjaWZpY0hhc2giLCJoYXNoQ2hhbmdlciIsIkhhc2hDaGFuZ2VyIiwiZ2V0SW5zdGFuY2UiLCJocmVmRm9yQXBwU3BlY2lmaWNIYXNoIiwiVVJJIiwiZGVjb2RlIiwiX2dldEhhc2giLCJnZXRIYXNoIiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJzUGF0aCIsIm9NZXRhTW9kZWwiLCJzRW50aXR5UGF0aCIsInNUeXBlTmFtZSIsInNBcHBTcGVjaWZpY0hhc2giLCJzVGl0bGUiLCJvVGl0bGVJbmZvIiwiX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyIsImFIaWVyYXJjaHkiLCJhSGllcmFyY2h5U2hlbGwiLCJsZXZlbCIsIm9IaWVyYXJjaHkiLCJvU2hlbGxIaWVyYXJjaHkiLCJrZXkiLCJTdHJpbmciLCJfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoIiwic0hhc2giLCJzVGFyZ2V0VHlwZSIsImFSb3V0ZXMiLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsInJvdXRlcyIsInJvdXRlIiwib1JvdXRlIiwiZ2V0Um91dGUiLCJuYW1lIiwibWF0Y2giLCJzVGFyZ2V0IiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInRhcmdldCIsImdldFRhcmdldCIsIl9vT3B0aW9ucyIsImdldEJpbmRpbmdDb250ZXh0IiwiY3VycmVudFBhZ2UiLCJ0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJhcHBTcGVjaWZpY0hhc2giLCJtYW5pZmVzdEFwcFNldHRpbmdzIiwiYXBwVGl0bGUiLCJhcHBTdWJUaXRsZSIsInN1YlRpdGxlIiwiYXBwSWNvbiIsInBhZ2VUaXRsZUluZm9ybWF0aW9uIiwibmV3UGF0aCIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsImdldFJvb3RMZXZlbFRpdGxlSW5mb3JtYXRpb24iLCJwYXRoUGFydHMiLCJzaGlmdCIsInBvcCIsInBhdGhQYXJ0IiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsImlzUGFyYW1ldGVyaXplZCIsInJlamVjdCIsInRpdGxlSW5mb0hpZXJhcmNoeSIsInRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvbkNvbnRleHRCb3VuZFRvVmlldyIsIm9Db250ZXh0Iiwic0RlZXBlc3RQYXRoIiwiZ2V0UHJvcGVydHkiLCJzVmlld0NvbnRleHRQYXRoIiwiaW5kZXhPZiIsImRpc3BsYXlFcnJvclBhZ2UiLCJfZXJyb3JNZXNzYWdlIiwiX3BhcmFtZXRlcnMiLCJfRkNMTGV2ZWwiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIkZDTExldmVsIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJnZXRWaXNpYmxlVmlld3MiLCJpc0ZjbEVuYWJsZWQiLCJzQXBwVGl0bGUiLCJzZXRUaXRsZSIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJhcHBDb250ZW50SWQiLCJjb25maWciLCJieUlkIiwiQmFzZUNvbnRyb2xsZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvb3RWaWV3QmFzZUNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9VUklcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcblxuZXhwb3J0IHR5cGUgVGl0bGVJbmZvcm1hdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YnRpdGxlPzogc3RyaW5nO1xuXHRpY29uPzogc3RyaW5nO1xuXHRpbnRlbnQ/OiBzdHJpbmc7XG59O1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5yb290Vmlldy5Sb290Vmlld0Jhc2VDb250cm9sbGVyXCIpXG5jbGFzcyBSb290Vmlld0Jhc2VDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdG9QbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRwcml2YXRlIF9hSGVscGVyTW9kZWxzITogSlNPTk1vZGVsW107XG5cblx0cHJpdmF0ZSBvUm91dGVyPzogUm91dGVyO1xuXG5cdHByaXZhdGUgX29Sb3V0ZU1hdGNoZWRQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIG9UaXRsZUhpZXJhcmNoeUNhY2hlPzogUmVjb3JkPHN0cmluZywgVGl0bGVJbmZvcm1hdGlvbj47XG5cblx0cHJpdmF0ZSBiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdFNpemVIZWxwZXIuaW5pdCgpO1xuXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscyA9IFtdO1xuXHR9XG5cblx0Z2V0UGxhY2Vob2xkZXIoKTogUGxhY2Vob2xkZXIge1xuXHRcdHJldHVybiB0aGlzLm9QbGFjZWhvbGRlcjtcblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5vUGxhY2Vob2xkZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5hdHRhY2hBZnRlclJvdXRlTWF0Y2hlZCh7fSwgdGhpcy5fb25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaEFmdGVyUm91dGVNYXRjaGVkKHRoaXMuX29uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlciA9IHVuZGVmaW5lZDtcblxuXHRcdFNpemVIZWxwZXIuZXhpdCgpO1xuXG5cdFx0Ly8gRGVzdHJveSBhbGwgSlNPTiBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSBmb3IgdGhlIHZpZXdzXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdFx0b01vZGVsLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldFZpZXdGcm9tQ29udGFpbmVyKGNvbnRhaW5lcjogQ29udHJvbCk6IFZpZXcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnRhaW5lci5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKVxuXHRcdFx0PyBjb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS5nZXRSb290Q29udHJvbCgpXG5cdFx0XHQ6IGNvbnRhaW5lcjtcblxuXHRcdHJldHVybiByZXN1bHQ/LmlzQTxWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuYWx5emUgdGhlIHBhZ2VzIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmlld3MuXG5cdCAqIEBwYXJhbSBwYWdlcyBUaGUgcGFnZXMgdG8gYmUgYW5hbHl6ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3c1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzOiBDb250cm9sW10pOiBWaWV3W10ge1xuXHRcdGNvbnN0IHZpZXdzOiBWaWV3W10gPSBbXTtcblxuXHRcdHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXG5cdFx0XHRpZiAodmlldyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZpZXdzLnB1c2godmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmlld3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIHJlc291cmNlTW9kZWwgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0Z2V0UmVzb3VyY2VCdW5kbGUoKTogUmVzb3VyY2VCdW5kbGUgfCBQcm9taXNlPFJlc291cmNlQnVuZGxlPiB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cblxuXHRnZXRSb3V0ZXIoKTogUm91dGVyIHtcblx0XHRpZiAoIXRoaXMub1JvdXRlcikge1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXIoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyO1xuXHR9XG5cblx0X2NyZWF0ZUhlbHBlck1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gV2Uga2VlcCBhIHJlZmVyZW5jZSBvbiB0aGUgbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHksIGFzIHRoZXkgZG9uJ3QgZ2V0IGRlc3Ryb3llZFxuXHRcdC8vIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBpcyBkZXN0cm95ZWQuXG5cdFx0Ly8gVGhpcyBpcyBkb25lIGR1cmluZyBvbkV4aXRcblx0XHRjb25zdCBvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5wdXNoKG9Nb2RlbCk7XG5cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0YXN5bmMgcm91dGluZ0lzQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgKHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB3YWl0aW5nIGZvciB0aGUgUmlnaHQgbW9zdCB2aWV3IHRvIGJlIHJlYWR5LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFJlZmVyZW5jZSBhbiBFdmVudCBwYXJhbWV0ZXIgY29taW5nIGZyb20gcm91dGVNYXRjaGVkIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHJpZ2h0IG1vc3QgdmlldyBpcyByZWFkeVxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3PiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IEZFVmlldykgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgYUNvbnRhaW5lcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIikgPz8gW10sXG5cdFx0XHRcdC8vIFRoZXJlIGNhbiBhbHNvIGJlIHJldXNlIGNvbXBvbmVudHMgaW4gdGhlIHZpZXcsIHJlbW92ZSB0aGVtIGJlZm9yZSBwcm9jZXNzaW5nLlxuXHRcdFx0XHRhRkVDb250YWluZXJzOiBGRVZpZXdbXSA9IFtdO1xuXHRcdFx0YUNvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRhaW5lcjogVmlldyB8IENvbXBvbmVudENvbnRhaW5lciB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsZXQgb1ZpZXcgPSBvQ29udGFpbmVyIGFzIEZFVmlldyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Db250YWluZXIgJiYgKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db21wb25lbnRJbnN0YW5jZSA9IChvQ29udGFpbmVyIGFzIENvbXBvbmVudENvbnRhaW5lcikuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdFx0XHRvVmlldyA9IG9Db21wb25lbnRJbnN0YW5jZS5nZXRSb290Q29udHJvbCgpIGFzIEZFVmlldztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRhRkVDb250YWluZXJzLnB1c2gob1ZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9SaWdodE1vc3RGRVZpZXcgPSBhRkVDb250YWluZXJzW2FGRUNvbnRhaW5lcnMubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAob1JpZ2h0TW9zdEZFVmlldyAmJiBvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuaXNQYWdlUmVhZHkoKSkge1xuXHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0fSBlbHNlIGlmIChvUmlnaHRNb3N0RkVWaWV3KSB7XG5cdFx0XHRcdG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIGZyb20gdGhlIGhpc3RvcnkgT2JqZWN0LlxuXHQgKi9cblx0cHJvdGVjdGVkIHJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udHlwZSkge1xuXHRcdFx0Y2FzZSBcIlJvd1wiOlxuXHRcdFx0XHRjb25zdCB0YWJsZSA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udGFibGVJZCkgYXMgVGFibGU7XG5cdFx0XHRcdGNvbnN0IHBvcyA9IHRhYmxlXG5cdFx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0XHRcdC5maW5kSW5kZXgoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpID09PSBoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250ZXh0UGF0aEZvY3VzKTtcblx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHR0YWJsZS5mb2N1c1Jvdyhwb3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0RWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdH1cblx0XHQvL29uY2UgYXBwbGllZCwgdGhlIGZvY3VzIGluZm8gaXMgcmVtb3ZlZCB0byBwcmV2ZW50IGZvY3VzaW5nIG9uIGl0IGVhY2ggdGltZSB0aGUgdXNlciBkbyBhIGJhY2sgbmF2aWdhdGlvbiB0byB0aGlzIHBhZ2Vcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKGhpc3Rvcnkuc3RhdGUsIHsgZm9jdXNJbmZvOiBudWxsIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUuXG5cdCAqIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogLSB1cGRhdGUgdGFibGUgc2Nyb2xsLlxuXHQgKiAtIGNhbGwgb25QYWdlUmVhZHkgb24gdGhlIHJpZ2h0TW9zdFZpZXcuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vbkFmdGVyUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgPSB0aGlzLndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkob0V2ZW50KVxuXHRcdFx0XHQudGhlbigob1ZpZXc6IFZpZXcpID0+IHtcblx0XHRcdFx0XHQvLyBUaGUgYXV0b0ZvY3VzIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiB0aGUgbmF2Q29udGFpbmVyIG9yIHRoZSBGQ0wsIHNvIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBTaGVsbCBtZW51XG5cdFx0XHRcdFx0Ly8gZXZlbiBpZiB0aGUgYXBwIHRha2VzIGEgbG9uZyB0aW1lIHRvIGxhdW5jaFxuXHRcdFx0XHRcdC8vIFRoZSBmaXJzdCB0aW1lIHRoZSB2aWV3IGlzIGRpc3BsYXllZCwgd2UgbmVlZCB0byBlbmFibGUgdGhlIGF1dG9mb2N1cyBzbyB0aGF0IGl0J3MgbWFuYWdlZCBwcm9wZXJseSBkdXJpbmcgbmF2aWdhdGlvblxuXHRcdFx0XHRcdGNvbnN0IG9Sb290Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXTtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdChvUm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cyAmJlxuXHRcdFx0XHRcdFx0IShvUm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cygpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2wuc2V0UHJvcGVydHkoXCJhdXRvRm9jdXNcIiwgdHJ1ZSwgdHJ1ZSk7IC8vIERvIG5vdCBtYXJrIHRoZSBjb250YWluZXIgYXMgaW52YWxpZCwgb3RoZXJ3aXNlIGl0J3MgcmUtcmVuZGVyZWRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHR0aGlzLl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpO1xuXHRcdFx0XHRcdGlmIChvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuVVNoZWxsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJGb3JjZUZvY3VzID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJlxuXHRcdFx0XHRcdFx0KG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikub25QYWdlUmVhZHkgJiZcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHkoeyBmb3JjZUZvY3VzOiBiRm9yY2VGb2N1cyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghYkZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRcdC8vIFRyeSB0byByZXN0b3JlIHRoZSBmb2N1cyBvbiB3aGVyZSBpdCB3YXMgd2hlbiB3ZSBsYXN0IHZpc2l0ZWQgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyB0aGUgdGl0bGUgaGllcmFyY2h5IGFuZCBjYWxsaW5nIGZvY3VzIG1ldGhvZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSAoIG9yIGluaXRpYWxpemVzIGl0IGlmIHVuZGVmaW5lZCkuXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk6IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRpZiAoIXRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUpIHtcblx0XHRcdHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjbGVhciB0aGUgVGl0bGVIaWVyYXJjaHkgY2FjaGUgZm9yIHRoZSBnaXZlbiBjb250ZXh0IHBhdGguXG5cdCAqIEBwYXJhbSAgcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBjbGVhciB0aGUgY2FjaGUgZm9yXG5cdCAqL1xuXHRjbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUocGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtwYXRoXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0aXRsZUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGVcblx0ICogQHBhcmFtIHN1YnRpdGxlIFRoZSBhcHBsaWNhdGlvbidzIHN1YlRpdGxlXG5cdCAqIEBwYXJhbSBzSW50ZW50IFRoZSBpbnRlbnQgcGF0aCB0byBiZSByZWRpcmVjdGVkIHRvXG5cdCAqIEBwYXJhbSBpY29uIFRoZSBhcHBsaWNhdGlvbidzIGljb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqL1xuXHRfY29tcHV0ZVRpdGxlSW5mbyh0aXRsZTogc3RyaW5nLCBzdWJ0aXRsZTogc3RyaW5nLCBzSW50ZW50OiBzdHJpbmcsIGljb24gPSBcIlwiKTogVGl0bGVJbmZvcm1hdGlvbiB7XG5cdFx0Y29uc3QgYVBhcnRzID0gc0ludGVudC5zcGxpdChcIi9cIik7XG5cdFx0aWYgKCFhUGFydHNbYVBhcnRzLmxlbmd0aCAtIDFdLmluY2x1ZGVzKFwiP1wiKSkge1xuXHRcdFx0c0ludGVudCArPSBcIj9yZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNJbnRlbnQgKz0gXCImcmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0c3VidGl0bGU6IHN1YnRpdGxlLFxuXHRcdFx0aW50ZW50OiBzSW50ZW50LFxuXHRcdFx0aWNvbjogaWNvblxuXHRcdH07XG5cdH1cblxuXHRfZm9ybWF0VGl0bGUoZGlzcGxheU1vZGU6IHN0cmluZywgdGl0bGVWYWx1ZTogc3RyaW5nLCB0aXRsZURlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVWYWx1ZX1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVWYWx1ZX0gKCR7dGl0bGVEZXNjcmlwdGlvbn0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259ICgke3RpdGxlVmFsdWV9KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaXRsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgSGVhZGVySW5mbyB0aXRsZSBmb3IgYSBnaXZlbiBwYXRoLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgZW50aXR5XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgdGl0bGUsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyBIZWFkZXJJbmZvIHRpdGxlIGFubm90YXRpb24gaXMgYXZhaWxhYmxlXG5cdCAqL1xuXHRhc3luYyBfZmV0Y2hUaXRsZVZhbHVlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSxcblx0XHRcdG1ldGFNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpLFxuXHRcdFx0YmluZGluZ1ZpZXdDb250ZXh0ID0gbW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQocGF0aCksXG5cdFx0XHRoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24gPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZWApLFxuXHRcdFx0dmFsdWVFeHByZXNzaW9uID0gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQoaGVhZGVySW5mb1RpdGxlVmFsdWVBbm5vdGF0aW9uLCB7IGNvbnRleHQ6IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgfSk7XG5cdFx0aWYgKCF2YWx1ZUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdFx0fVxuXHRcdGlmIChoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24uJEZ1bmN0aW9uID09PSBcIm9kYXRhLmNvbmNhdFwiKSB7XG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55OiB2YWx1ZUV4cHJlc3Npb24gfSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGJpbmRpbmdWaWV3Q29udGV4dCk7XG5cdFx0XHRjb25zdCB0ZXh0QmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55XCIpO1xuXHRcdFx0aWYgKHRleHRCaW5kaW5nPy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbCh0ZXh0QmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmZvVGl0bGUgPSBhbnlPYmplY3QuZ2V0QW55KCk7XG5cdFx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShpbmZvVGl0bGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0Y29uc3QgdGV4dEV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChcblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHttZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgXG5cdFx0XHRcdCksXG5cdFx0XHRcdHsgY29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSB9XG5cdFx0XHQpLFxuXHRcdFx0cHJvcGVydHlDb250ZXh0ID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHttZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWUvJFBhdGhAYCksXG5cdFx0XHRwcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXSxcblx0XHRcdHBhcnNlZHZhbHVlRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcih2YWx1ZUV4cHJlc3Npb24pLFxuXHRcdFx0cHJvbWlzZUZvckRpc3BsYXlNb2RlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKHByb3BlcnR5Q29udGV4dCk7XG5cdFx0XHRcdHJlc29sdmUoZGlzcGxheU1vZGUpO1xuXHRcdFx0fSk7XG5cdFx0cHJvbWlzZXMucHVzaChwcm9taXNlRm9yRGlzcGxheU1vZGUpO1xuXHRcdGNvbnN0IHZhbHVlUGF0aCA9IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5wYXJ0cyA/IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5wYXJ0c1swXS5wYXRoIDogcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhdGgsXG5cdFx0XHRmblZhbHVlRm9ybWF0dGVyID0gcGFyc2VkdmFsdWVFeHByZXNzaW9uLmZvcm1hdHRlcixcblx0XHRcdHZhbHVlQmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eSh2YWx1ZVBhdGgsIGJpbmRpbmdWaWV3Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdFx0dmFsdWVCaW5kaW5nLmluaXRpYWxpemUoKTtcblx0XHRjb25zdCBwcm9taXNlRm9yVGl0bGVWYWx1ZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgZm5DaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQ6IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFZhbHVlID0gZm5WYWx1ZUZvcm1hdHRlciA/IGZuVmFsdWVGb3JtYXR0ZXIoZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSkgOiBldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdHZhbHVlQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0XHRyZXNvbHZlKHRhcmdldFZhbHVlKTtcblx0XHRcdH07XG5cdFx0XHR2YWx1ZUJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHR9KTtcblx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JUaXRsZVZhbHVlKTtcblxuXHRcdGlmICh0ZXh0RXhwcmVzc2lvbikge1xuXHRcdFx0Y29uc3QgcGFyc2VkVGV4dEV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIodGV4dEV4cHJlc3Npb24pO1xuXHRcdFx0bGV0IHRleHRQYXRoID0gcGFyc2VkVGV4dEV4cHJlc3Npb24ucGFydHMgPyBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXJ0c1swXS5wYXRoIDogcGFyc2VkVGV4dEV4cHJlc3Npb24ucGF0aDtcblx0XHRcdHRleHRQYXRoID0gdmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IC0xID8gYCR7dmFsdWVQYXRoLnNsaWNlKDAsIHZhbHVlUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpfS8ke3RleHRQYXRofWAgOiB0ZXh0UGF0aDtcblxuXHRcdFx0Y29uc3QgZm5UZXh0Rm9ybWF0dGVyID0gcGFyc2VkVGV4dEV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0XHR0ZXh0QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eSh0ZXh0UGF0aCwgYmluZGluZ1ZpZXdDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0XHRcdHRleHRCaW5kaW5nLmluaXRpYWxpemUoKTtcblx0XHRcdGNvbnN0IHByb21pc2VGb3JUaXRsZVRleHQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZm5DaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQ6IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IGZuVGV4dEZvcm1hdHRlciA/IGZuVGV4dEZvcm1hdHRlcihldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0XHR0ZXh0QmluZGluZy5kZXRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0XHRcdHJlc29sdmUodGFyZ2V0VGV4dCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGV4dEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdH0pO1xuXHRcdFx0cHJvbWlzZXMucHVzaChwcm9taXNlRm9yVGl0bGVUZXh0KTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRpdGxlSW5mbzogc3RyaW5nW10gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdFx0aWYgKHR5cGVvZiB0aXRsZUluZm8gIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSB0aGlzLl9mb3JtYXRUaXRsZSh0aXRsZUluZm9bMF0sIHRpdGxlSW5mb1sxXSwgdGl0bGVJbmZvWzJdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmb3JtYXR0ZWRUaXRsZTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgdGhlIHRpdGxlIGZyb20gdGhlIGhlYWRlciBpbmZvIDpcIiArIGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBkZWNvZGVkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhhc2guXG5cdCAqIEByZXR1cm5zIERlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaFxuXHQgKi9cblx0Z2V0QXBwU3BlY2lmaWNIYXNoKCk6IHN0cmluZyB7XG5cdFx0Ly8gSGFzaENoYW5nZWQgaXNTaGVsbE5hdmlnYXRpb25IYXNoQ2hhbmdlclxuXHRcdGNvbnN0IGhhc2hDaGFuZ2VyID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gaGFzaENoYW5nZXIuaHJlZkZvckFwcFNwZWNpZmljSGFzaCA/IFVSSS5kZWNvZGUoaGFzaENoYW5nZXIuaHJlZkZvckFwcFNwZWNpZmljSGFzaChcIlwiKSkgOiBcIiMvXCI7XG5cdH1cblxuXHRfZ2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGl0bGVJbmZvcm1hdGlvbiBmcm9tIGEgcGF0aC5cblx0ICogSXQgdXBkYXRlcyB0aGUgY2FjaGUgdG8gc3RvcmUgdGl0bGUgaW5mb3JtYXRpb24gaWYgbmVjZXNzYXJ5XG5cdCAqIEBwYXJhbSB7Kn0gc1BhdGggcGF0aCBvZiB0aGUgY29udGV4dCB0byByZXRyaWV2ZSB0aXRsZSBpbmZvcm1hdGlvbiBmcm9tIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gIG9UaXRsZWluZm9ybWF0aW9uIHJldHVybmVkIGFzIHByb21pc2Vcblx0ICovXG5cblx0YXN5bmMgZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGg6IHN0cmluZyk6IFByb21pc2U8VGl0bGVJbmZvcm1hdGlvbj4ge1xuXHRcdGNvbnN0IG9UaXRsZUhpZXJhcmNoeUNhY2hlID0gdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpO1xuXG5cdFx0aWYgKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSkge1xuXHRcdFx0Ly8gVGhlIHRpdGxlIGluZm8gaXMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGNhY2hlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBzVHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVHlwZU5hbWVgKTtcblx0XHRjb25zdCBzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5nZXRBcHBTcGVjaWZpY0hhc2goKTtcblx0XHRjb25zdCBzSW50ZW50ID0gc0FwcFNwZWNpZmljSGFzaCArIHNQYXRoLnNsaWNlKDEpO1xuXHRcdHJldHVybiB0aGlzLl9mZXRjaFRpdGxlVmFsdWUoc1BhdGgpLnRoZW4oKHNUaXRsZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRjb25zdCBvVGl0bGVJbmZvID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhzVHlwZU5hbWUsIHNUaXRsZSwgc0ludGVudCk7XG5cdFx0XHRvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0gPSBvVGl0bGVJbmZvO1xuXHRcdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5zdXJlIHRoYXQgdGhlIHVzaGVsbCBzZXJ2aWNlIHJlY2VpdmVzIGFsbCBlbGVtZW50c1xuXHQgKiAodGl0bGUsIHN1YnRpdGxlLCBpbnRlbnQsIGljb24pIGFzIHN0cmluZ3MuXG5cdCAqXG5cdCAqIEFubm90YXRpb24gSGVhZGVySW5mbyBhbGxvd3MgZm9yIGJpbmRpbmcgb2YgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG5cdCAqICh3aGljaCBhcmUgdXNlZCBoZXJlIGFzIHRpdGxlIGFuZCBzdWJ0aXRsZSkgdG8gYW55IGVsZW1lbnQgaW4gdGhlIGVudGl0eVxuXHQgKiAoc3VjaCB0eXBlcyBhcyBCb29sZWFuLCB0aW1lc3RhbXAsIGRvdWJsZSwgYW5kIG90aGVycyBhcmUgcG9zc2libGUpXG5cdCAqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaGllcmFyY2h5IGFuZCBjb252ZXJ0cyBub24tc3RyaW5nIHR5cGVzIHRvIHN0cmluZy5cblx0ICogQHBhcmFtIGFIaWVyYXJjaHkgU2hlbGwgdGl0bGUgaGllcmFyY2h5XG5cdCAqIEByZXR1cm5zIENvcHkgb2Ygc2hlbGwgdGl0bGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIGFzIHN0cmluZ3Ncblx0ICovXG5cdF9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYUhpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogb2JqZWN0W10ge1xuXHRcdGNvbnN0IGFIaWVyYXJjaHlTaGVsbCA9IFtdO1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgaW4gYUhpZXJhcmNoeSkge1xuXHRcdFx0Y29uc3Qgb0hpZXJhcmNoeSA9IGFIaWVyYXJjaHlbbGV2ZWxdO1xuXHRcdFx0Y29uc3Qgb1NoZWxsSGllcmFyY2h5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvSGllcmFyY2h5KSB7XG5cdFx0XHRcdG9TaGVsbEhpZXJhcmNoeVtrZXldID0gKFxuXHRcdFx0XHRcdHR5cGVvZiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSAhPT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0PyBTdHJpbmcob0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0pXG5cdFx0XHRcdFx0XHQ6IG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dXG5cdFx0XHRcdCkgYXMgc3RyaW5nO1xuXHRcdFx0fVxuXHRcdFx0YUhpZXJhcmNoeVNoZWxsLnB1c2gob1NoZWxsSGllcmFyY2h5KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFIaWVyYXJjaHlTaGVsbDtcblx0fVxuXG5cdF9nZXRUYXJnZXRUeXBlRnJvbUhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0bGV0IHNUYXJnZXRUeXBlID0gXCJcIjtcblxuXHRcdGNvbnN0IGFSb3V0ZXMgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc/LnJvdXRlcyA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHJvdXRlIG9mIGFSb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGUocm91dGUubmFtZSk7XG5cdFx0XHRpZiAob1JvdXRlPy5tYXRjaChzSGFzaCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RhcmdldCA9IGdldFJvdXRlVGFyZ2V0TmFtZXMocm91dGUudGFyZ2V0KVswXTtcblx0XHRcdFx0c1RhcmdldFR5cGUgPSAob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoc1RhcmdldCkgYXMgdW5rbm93biBhcyB7IF9vT3B0aW9uczogeyBuYW1lOiBzdHJpbmcgfSB9KS5fb09wdGlvbnMubmFtZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNUYXJnZXRUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgc2hlbGwgdGl0bGUgYWZ0ZXIgZWFjaCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG1lbnUgaXMgZmlsbGVkIHByb3Blcmx5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBjb21wdXRlVGl0bGVIaWVyYXJjaHkodmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0Y3VycmVudFBhZ2UgPSB2aWV3LmdldFBhcmVudCgpLFxuXHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzID0gW10sXG5cdFx0XHRhcHBTcGVjaWZpY0hhc2ggPSB0aGlzLmdldEFwcFNwZWNpZmljSGFzaCgpLFxuXHRcdFx0bWFuaWZlc3RBcHBTZXR0aW5ncyA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdGFwcFRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy50aXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwU3ViVGl0bGUgPSBtYW5pZmVzdEFwcFNldHRpbmdzLnN1YlRpdGxlIHx8IFwiXCIsXG5cdFx0XHRhcHBJY29uID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5pY29uIHx8IFwiXCI7XG5cdFx0bGV0IHBhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uLCBuZXdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoY3VycmVudFBhZ2UgJiYgKGN1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24pIHtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBhIExSLCB1c2UgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRpZiAodGhpcy5fZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKFwiXCIpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzLnB1c2godGhpcy5nZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uKGFwcFNwZWNpZmljSGFzaCwgYXBwVGl0bGUsIGFwcFN1YlRpdGxlLCBhcHBJY29uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGVuIG1hbmFnZSBvdGhlciBwYWdlc1xuXHRcdFx0XHRuZXdQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IHBhdGhQYXJ0cyA9IG5ld1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRsZXQgcGF0aCA9IFwiXCI7XG5cblx0XHRcdFx0cGF0aFBhcnRzLnNoaWZ0KCk7IC8vIFJlbW92ZSB0aGUgZmlyc3Qgc2VnbWVudCAoZW1wdHkgc3RyaW5nKSBhcyBpdCBoYXMgYmVlbiBtYW5hZ2VkIGFib3ZlXG5cdFx0XHRcdHBhdGhQYXJ0cy5wb3AoKTsgLy8gUmVtb3ZlIHRoZSBsYXN0IHNlZ21lbnQgYXMgaXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcGFnZSBhbmQgc2hvdWxkbid0IGFwcGVhciBpbiB0aGUgbWVudVxuXHRcdFx0XHRwYXRoUGFydHMuZm9yRWFjaCgocGF0aFBhcnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHBhdGggKz0gYC8ke3BhdGhQYXJ0fWA7XG5cdFx0XHRcdFx0Ly9pZiB0aGUgYXNzb2NpYXRlZCB0YXJnZXQgaXMgbm90IGRlY2xhcmVkIGluIHRoZSByb3V0ZXMsIHdlIHNraXAgaXRcblx0XHRcdFx0XHRpZiAoIWFwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZUluZm9CeUhhc2gocGF0aCkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKSxcblx0XHRcdFx0XHRcdGlzUGFyYW1ldGVyaXplZCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdFx0aWYgKCFpc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdFx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZ2V0VGl0bGVJbmZvRnJvbVBhdGgocGF0aCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEN1cnJlbnQgcGFnZVxuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSAoY3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRhcHBTcGVjaWZpY0hhc2ggKyB0aGlzLl9nZXRIYXNoKClcblx0XHRcdCk7XG5cblx0XHRcdGlmIChjb250ZXh0ICYmIG5ld1BhdGgpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW25ld1BhdGhdID0gcGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbYXBwU3BlY2lmaWNIYXNoXSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChQcm9taXNlLnJlamVjdChcIlRpdGxlIGluZm9ybWF0aW9uIG1pc3NpbmcgaW4gSGVhZGVySW5mb1wiKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMpXG5cdFx0XHQudGhlbihhc3luYyAodGl0bGVJbmZvSGllcmFyY2h5OiBUaXRsZUluZm9ybWF0aW9uW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igc2hlbGwgd2hpY2ggaXMgZXhwZWN0aW5nIGFsbCBlbGVtZW50cyBiZWluZyBvZiB0eXBlIHN0cmluZ1xuXHRcdFx0XHRjb25zdCB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCA9IHRoaXMuX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyh0aXRsZUluZm9IaWVyYXJjaHkpLFxuXHRcdFx0XHRcdHRpdGxlID0gcGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIjtcblx0XHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5U2hlbGwucmV2ZXJzZSgpO1xuXHRcdFx0XHRhd2FpdCBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEhpZXJhcmNoeSh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCk7XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0U2hlbGxNZW51VGl0bGUoYXBwQ29tcG9uZW50LCB0aXRsZSwgYXBwVGl0bGUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yTWVzc2FnZSBhcyBzdHJpbmcpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5iSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yTWVzc2FnZSBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHRpdGxlIGluZm9ybWF0aW9uIGZvciB0aGUgcm9vdCBsZXZlbC5cblx0ICogQHBhcmFtIGFwcFNwZWNpZmljSGFzaCBUaGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaFxuXHQgKiBAcGFyYW0gYXBwVGl0bGUgVGhlIGFwcGxpY2F0aW9uIHRpdGxlXG5cdCAqIEBwYXJhbSBhcHBTdWJUaXRsZSBUaGUgYXBwbGljYXRpb24gc3VidGl0bGVcblx0ICogQHBhcmFtIGFwcEljb24gVGhlIGFwcGxpY2F0aW9uIGljb25cblx0ICogQHJldHVybnMgQSBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFJvb3RMZXZlbFRpdGxlSW5mb3JtYXRpb24oXG5cdFx0YXBwU3BlY2lmaWNIYXNoOiBzdHJpbmcsXG5cdFx0YXBwVGl0bGU6IHN0cmluZyxcblx0XHRhcHBTdWJUaXRsZTogc3RyaW5nLFxuXHRcdGFwcEljb246IHN0cmluZ1xuXHQpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRjb25zdCBvVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKTtcblxuXHRcdGlmIChvVGl0bGVIaWVyYXJjaHlDYWNoZVthcHBTcGVjaWZpY0hhc2hdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbYXBwU3BlY2lmaWNIYXNoXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhhcHBUaXRsZSwgYXBwU3ViVGl0bGUsIGFwcFNwZWNpZmljSGFzaCwgYXBwSWNvbikpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIGFmdGVyIGEgdmlldyBoYXMgYmVlbiBib3VuZCB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIGJvdW5kIHRvIGEgdmlld1xuXHQgKi9cblx0b25Db250ZXh0Qm91bmRUb1ZpZXcob0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBzRGVlcGVzdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIpLFxuXHRcdFx0XHRzVmlld0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAoIXNEZWVwZXN0UGF0aCB8fCBzRGVlcGVzdFBhdGguaW5kZXhPZihzVmlld0NvbnRleHRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHQvLyBUaGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBkZWVwZXN0IHJlYWNoZWQgcGF0aCwgb3IgdGhlIHBhdGhcblx0XHRcdFx0Ly8gZm9yIHRoZSB2aWV3IGlzbid0IGEgc3VicGF0aCBvZiB0aGUgcHJldmlvdXMgZGVlcGVzdCBwYXRoIC0tPiB1cGRhdGVcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiLCBzVmlld0NvbnRleHRQYXRoLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoX2Vycm9yTWVzc2FnZTogc3RyaW5nLCBfcGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCBfRkNMTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBGRVZpZXcsIEZDTExldmVsOiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbGwgdmlzaWJsZSB2aWV3cy5cblx0ICogQHJldHVybnMgVGhlIHZpc2libGUgdmlld3Ncblx0ICovXG5cdGdldFZpc2libGVWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc1RpdGxlOiBzdHJpbmcsIHNBcHBUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuIGJ5IEZjbENvbnRyb2xsZXJcblx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0Z2V0QXBwQ29udGVudENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwQ29udGVudElkID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5jb25maWc/LmNvbnRyb2xJZCA/PyBcImFwcENvbnRlbnRcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChhcHBDb250ZW50SWQpIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG59XG5pbnRlcmZhY2UgUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdG9uQ29udGFpbmVyUmVhZHk/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUEyQ01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxTQUFTLENBQUMsRUFBQU4sSUFBQSxDQUFBTyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGVBQUE7SUFBQSxTQUFBVix1QkFBQTtNQUFBLElBQUFXLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELGVBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsa0JBQUFTLFdBQUEsRUFBQVQsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGVBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBQSxLQUFBLENBV2xCVyx5QkFBeUIsR0FBRyxLQUFLO01BQUEsT0FBQVgsS0FBQTtJQUFBO0lBQUFZLGNBQUEsQ0FBQXZCLHNCQUFBLEVBQUFVLGVBQUE7SUFBQSxJQUFBYyxNQUFBLEdBQUF4QixzQkFBQSxDQUFBeUIsU0FBQTtJQUFBRCxN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
|
|
647
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiU2l6ZUhlbHBlciIsImluaXQiLCJfYUhlbHBlck1vZGVscyIsImdldFBsYWNlaG9sZGVyIiwib1BsYWNlaG9sZGVyIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkFmdGVyUm91dGVNYXRjaGVkIiwib25FeGl0IiwiZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvUm91dGVyIiwidW5kZWZpbmVkIiwiZXhpdCIsImZvckVhY2giLCJvTW9kZWwiLCJkZXN0cm95IiwiZ2V0Vmlld0Zyb21Db250YWluZXIiLCJjb250YWluZXIiLCJyZXN1bHQiLCJpc0EiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsImdldFJvb3RDb250cm9sIiwiZ2V0Vmlld3NGcm9tUGFnZXMiLCJwYWdlcyIsInZpZXdzIiwicGFnZSIsInZpZXciLCJwdXNoIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJnZXRPd25lckNvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0Um91dGVyIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiSlNPTk1vZGVsIiwicm91dGluZ0lzQ29tcGxldGUiLCJfb1JvdXRlTWF0Y2hlZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkiLCJvRXZlbnQiLCJhQ29udGFpbmVycyIsImdldFBhcmFtZXRlciIsImFGRUNvbnRhaW5lcnMiLCJvQ29udGFpbmVyIiwib1ZpZXciLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwib1JpZ2h0TW9zdEZFVmlldyIsImlzUGFnZVJlYWR5IiwiYXR0YWNoRXZlbnRPbmNlIiwicmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkiLCJoaXN0b3J5Iiwic3RhdGUiLCJmb2N1c0luZm8iLCJ0eXBlIiwidGFibGUiLCJFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YWJsZUlkIiwicG9zIiwiZ2V0Um93QmluZGluZyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZpbmRJbmRleCIsImNvbnRleHQiLCJnZXRQYXRoIiwiY29udGV4dFBhdGhGb2N1cyIsImZvY3VzUm93IiwiY29udHJvbElkIiwiZm9jdXMiLCJyZXBsYWNlU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJldmVudCIsImdldFZpc2libGVWaWV3cyIsImluY2x1ZGVzIiwicm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5IiwiYXBwQ29tcG9uZW50IiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJVU2hlbGwiLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJmb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJnZXRQYXJlbnQiLCJvblBhZ2VSZWFkeSIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwib25Db250YWluZXJSZWFkeSIsImVycm9yIiwiTG9nIiwiX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvVGl0bGVIaWVyYXJjaHlDYWNoZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInBhdGgiLCJfY29tcHV0ZVRpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJzSW50ZW50IiwiZGVzY3JpcHRpb24iLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbnRlbnQiLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwibW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiYmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24iLCJnZXRPYmplY3QiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwiJEZ1bmN0aW9uIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsInRleHRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFsbCIsImdldEJpbmRpbmdzIiwibWFwIiwiYmluZGluZyIsInJlcXVlc3RWYWx1ZSIsImluZm9UaXRsZSIsImdldEFueSIsInRleHRFeHByZXNzaW9uIiwicHJvcGVydHlDb250ZXh0IiwicHJvbWlzZXMiLCJwYXJzZWR2YWx1ZUV4cHJlc3Npb24iLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsInByb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwidmFsdWVQYXRoIiwicGFydHMiLCJmblZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0dGVyIiwidmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiJCRncm91cElkIiwiaW5pdGlhbGl6ZSIsInByb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJ0YXJnZXRWYWx1ZSIsImdldFNvdXJjZSIsImdldFZhbHVlIiwiZGV0YWNoQ2hhbmdlIiwiYXR0YWNoQ2hhbmdlIiwicGFyc2VkVGV4dEV4cHJlc3Npb24iLCJ0ZXh0UGF0aCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJmblRleHRGb3JtYXR0ZXIiLCJwcm9taXNlRm9yVGl0bGVUZXh0IiwidGFyZ2V0VGV4dCIsInRpdGxlSW5mbyIsImdldEFwcFNwZWNpZmljSGFzaCIsImhhc2hDaGFuZ2VyIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJVUkkiLCJkZWNvZGUiLCJfZ2V0SGFzaCIsImdldEhhc2giLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInNQYXRoIiwib01ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwic1R5cGVOYW1lIiwic0FwcFNwZWNpZmljSGFzaCIsInRoZW4iLCJzVGl0bGUiLCJvVGl0bGVJbmZvIiwiX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyIsImFIaWVyYXJjaHkiLCJhSGllcmFyY2h5U2hlbGwiLCJsZXZlbCIsIm9IaWVyYXJjaHkiLCJvU2hlbGxIaWVyYXJjaHkiLCJrZXkiLCJTdHJpbmciLCJfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoIiwic0hhc2giLCJvQXBwQ29tcG9uZW50Iiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRpbmciLCJyb3V0ZXMiLCJyb3V0ZSIsIm9Sb3V0ZSIsImdldFJvdXRlIiwibmFtZSIsIm1hdGNoIiwic1RhcmdldCIsImdldFJvdXRlVGFyZ2V0TmFtZXMiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJfb09wdGlvbnMiLCJfZ2V0QnJvd3NlclRpdGxlIiwidGl0bGVJbmZvSGllcmFyY2h5U2hlbGwiLCJwYWdlVGl0bGVJbmZvcm1hdGlvbiIsImJyZWFkY3J1bWJUZXh0cyIsImZpcnN0UGFydCIsInNlY29uZFBhcnQiLCJ0aXRsZUluZm9IaWVyYXJjaHkiLCJwb3AiLCJqb2luIiwiaGVhZGVyVGV4dCIsIl9zZXRUaXRsZXMiLCJhcHBUaXRsZSIsImJyb3dzZXJUaXRsZSIsIl9zZXRTaGVsbE1lbnVUaXRsZSIsImdldEJpbmRpbmdDb250ZXh0IiwiY3VycmVudFBhZ2UiLCJ0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJhcHBTcGVjaWZpY0hhc2giLCJtYW5pZmVzdEFwcFNldHRpbmdzIiwiYXBwU3ViVGl0bGUiLCJzdWJUaXRsZSIsImFwcEljb24iLCJuZXdQYXRoIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwiZ2V0Um9vdExldmVsVGl0bGVJbmZvcm1hdGlvbiIsInBhdGhQYXJ0cyIsInNoaWZ0IiwicGF0aFBhcnQiLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJwYXJhbWV0ZXJQYXRoIiwiaXNQYXJhbWV0ZXJpemVkIiwicmVqZWN0IiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJjYXRjaCIsImVycm9yTWVzc2FnZSIsImZpbmFsbHkiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvbkNvbnRleHRCb3VuZFRvVmlldyIsIm9Db250ZXh0Iiwic0RlZXBlc3RQYXRoIiwiZ2V0UHJvcGVydHkiLCJzVmlld0NvbnRleHRQYXRoIiwiaW5kZXhPZiIsImRpc3BsYXlFcnJvclBhZ2UiLCJfZXJyb3JNZXNzYWdlIiwiX3BhcmFtZXRlcnMiLCJfRkNMTGV2ZWwiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIkZDTExldmVsIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJpc0ZjbEVuYWJsZWQiLCJzQXBwVGl0bGUiLCJhZGRpdGlvbmFsSW5mb3JtYXRpb24iLCJzZXRUaXRsZSIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJhcHBDb250ZW50SWQiLCJjb25maWciLCJieUlkIiwiQmFzZUNvbnRyb2xsZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvb3RWaWV3QmFzZUNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgeyB0eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFVSSSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvVVJJXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IEFueSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5cbmV4cG9ydCB0eXBlIFRpdGxlSW5mb3JtYXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJ0aXRsZT86IHN0cmluZztcblx0aWNvbj86IHN0cmluZztcblx0aW50ZW50Pzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LlJvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0b1BsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByaXZhdGUgX2FIZWxwZXJNb2RlbHMhOiBKU09OTW9kZWxbXTtcblxuXHRwcml2YXRlIG9Sb3V0ZXI/OiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRlTWF0Y2hlZFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgb1RpdGxlSGllcmFyY2h5Q2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBUaXRsZUluZm9ybWF0aW9uPjtcblxuXHRwcml2YXRlIGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0U2l6ZUhlbHBlci5pbml0KCk7XG5cblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzID0gW107XG5cdH1cblxuXHRnZXRQbGFjZWhvbGRlcigpOiBQbGFjZWhvbGRlciB7XG5cdFx0cmV0dXJuIHRoaXMub1BsYWNlaG9sZGVyO1xuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpOiB2b2lkIHtcblx0XHR0aGlzLm9QbGFjZWhvbGRlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKHt9LCB0aGlzLm9uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5kZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCh0aGlzLm9uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlciA9IHVuZGVmaW5lZDtcblxuXHRcdFNpemVIZWxwZXIuZXhpdCgpO1xuXG5cdFx0Ly8gRGVzdHJveSBhbGwgSlNPTiBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSBmb3IgdGhlIHZpZXdzXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdFx0b01vZGVsLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldFZpZXdGcm9tQ29udGFpbmVyKGNvbnRhaW5lcjogQ29udHJvbCk6IFZpZXcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnRhaW5lci5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKVxuXHRcdFx0PyBjb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS5nZXRSb290Q29udHJvbCgpXG5cdFx0XHQ6IGNvbnRhaW5lcjtcblxuXHRcdHJldHVybiByZXN1bHQ/LmlzQTxWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuYWx5emUgdGhlIHBhZ2VzIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmlld3MuXG5cdCAqIEBwYXJhbSBwYWdlcyBUaGUgcGFnZXMgdG8gYmUgYW5hbHl6ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3c1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzOiBDb250cm9sW10pOiBWaWV3W10ge1xuXHRcdGNvbnN0IHZpZXdzOiBWaWV3W10gPSBbXTtcblxuXHRcdHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXG5cdFx0XHRpZiAodmlldyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZpZXdzLnB1c2godmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmlld3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIHJlc291cmNlTW9kZWwgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0Z2V0UmVzb3VyY2VCdW5kbGUoKTogUmVzb3VyY2VCdW5kbGUgfCBQcm9taXNlPFJlc291cmNlQnVuZGxlPiB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cblxuXHRnZXRSb3V0ZXIoKTogUm91dGVyIHtcblx0XHRpZiAoIXRoaXMub1JvdXRlcikge1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXIoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyO1xuXHR9XG5cblx0X2NyZWF0ZUhlbHBlck1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gV2Uga2VlcCBhIHJlZmVyZW5jZSBvbiB0aGUgbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHksIGFzIHRoZXkgZG9uJ3QgZ2V0IGRlc3Ryb3llZFxuXHRcdC8vIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBpcyBkZXN0cm95ZWQuXG5cdFx0Ly8gVGhpcyBpcyBkb25lIGR1cmluZyBvbkV4aXRcblx0XHRjb25zdCBvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5wdXNoKG9Nb2RlbCk7XG5cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0YXN5bmMgcm91dGluZ0lzQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgKHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB3YWl0aW5nIGZvciB0aGUgUmlnaHQgbW9zdCB2aWV3IHRvIGJlIHJlYWR5LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFJlZmVyZW5jZSBhbiBFdmVudCBwYXJhbWV0ZXIgY29taW5nIGZyb20gcm91dGVNYXRjaGVkIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHJpZ2h0IG1vc3QgdmlldyBpcyByZWFkeVxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3PiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IEZFVmlldykgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgYUNvbnRhaW5lcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIikgPz8gW10sXG5cdFx0XHRcdC8vIFRoZXJlIGNhbiBhbHNvIGJlIHJldXNlIGNvbXBvbmVudHMgaW4gdGhlIHZpZXcsIHJlbW92ZSB0aGVtIGJlZm9yZSBwcm9jZXNzaW5nLlxuXHRcdFx0XHRhRkVDb250YWluZXJzOiBGRVZpZXdbXSA9IFtdO1xuXHRcdFx0YUNvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRhaW5lcjogVmlldyB8IENvbXBvbmVudENvbnRhaW5lciB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsZXQgb1ZpZXcgPSBvQ29udGFpbmVyIGFzIEZFVmlldyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Db250YWluZXIgJiYgKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db21wb25lbnRJbnN0YW5jZSA9IChvQ29udGFpbmVyIGFzIENvbXBvbmVudENvbnRhaW5lcikuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdFx0XHRvVmlldyA9IG9Db21wb25lbnRJbnN0YW5jZS5nZXRSb290Q29udHJvbCgpIGFzIEZFVmlldztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRhRkVDb250YWluZXJzLnB1c2gob1ZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9SaWdodE1vc3RGRVZpZXcgPSBhRkVDb250YWluZXJzW2FGRUNvbnRhaW5lcnMubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAob1JpZ2h0TW9zdEZFVmlldyAmJiBvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuaXNQYWdlUmVhZHkoKSkge1xuXHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0fSBlbHNlIGlmIChvUmlnaHRNb3N0RkVWaWV3KSB7XG5cdFx0XHRcdG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIGZyb20gdGhlIGhpc3RvcnkgT2JqZWN0LlxuXHQgKi9cblx0cHJvdGVjdGVkIHJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udHlwZSkge1xuXHRcdFx0Y2FzZSBcIlJvd1wiOlxuXHRcdFx0XHRjb25zdCB0YWJsZSA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udGFibGVJZCkgYXMgVGFibGU7XG5cdFx0XHRcdGNvbnN0IHBvcyA9IHRhYmxlXG5cdFx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0XHRcdC5maW5kSW5kZXgoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpID09PSBoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250ZXh0UGF0aEZvY3VzKTtcblx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHR0YWJsZS5mb2N1c1Jvdyhwb3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0RWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdH1cblx0XHQvL29uY2UgYXBwbGllZCwgdGhlIGZvY3VzIGluZm8gaXMgcmVtb3ZlZCB0byBwcmV2ZW50IGZvY3VzaW5nIG9uIGl0IGVhY2ggdGltZSB0aGUgdXNlciBkbyBhIGJhY2sgbmF2aWdhdGlvbiB0byB0aGlzIHBhZ2Vcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKGhpc3Rvcnkuc3RhdGUsIHsgZm9jdXNJbmZvOiBudWxsIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUuXG5cdCAqIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogLSB1cGRhdGUgdGFibGUgc2Nyb2xsLlxuXHQgKiAtIGNhbGwgb25QYWdlUmVhZHkgb24gdGhlIHJpZ2h0TW9zdFZpZXcuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb25cblx0ICovXG5cdGFzeW5jIG9uQWZ0ZXJSb3V0ZU1hdGNoZWQoZXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3IHwgdW5kZWZpbmVkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZpZXcgPSBhd2FpdCB0aGlzLndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkoZXZlbnQpO1xuXG5cdFx0XHRpZiAodGhpcy5nZXRWaXNpYmxlVmlld3MoKS5pbmNsdWRlcyh2aWV3KSkge1xuXHRcdFx0XHQvLyBUaGUgYXV0b0ZvY3VzIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiB0aGUgbmF2Q29udGFpbmVyIG9yIHRoZSBGQ0wsIHNvIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBTaGVsbCBtZW51XG5cdFx0XHRcdC8vIGV2ZW4gaWYgdGhlIGFwcCB0YWtlcyBhIGxvbmcgdGltZSB0byBsYXVuY2hcblx0XHRcdFx0Ly8gVGhlIGZpcnN0IHRpbWUgdGhlIHZpZXcgaXMgZGlzcGxheWVkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXV0b2ZvY3VzIHNvIHRoYXQgaXQncyBtYW5hZ2VkIHByb3Blcmx5IGR1cmluZyBuYXZpZ2F0aW9uXG5cdFx0XHRcdGNvbnN0IHJvb3RDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cm9vdENvbnRyb2wgJiZcblx0XHRcdFx0XHQocm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cyAmJlxuXHRcdFx0XHRcdCEocm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cygpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJvb3RDb250cm9sLnNldFByb3BlcnR5KFwiYXV0b0ZvY3VzXCIsIHRydWUsIHRydWUpOyAvLyBEbyBub3QgbWFyayB0aGUgY29udGFpbmVyIGFzIGludmFsaWQsIG90aGVyd2lzZSBpdCdzIHJlLXJlbmRlcmVkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHR0aGlzLl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpO1xuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuVVNoZWxsKSB7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlVGl0bGVIaWVyYXJjaHkodmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm9yY2VGb2N1cyA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRpZiAodmlldy5nZXRDb250cm9sbGVyKCkgJiYgKHZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5KSB7XG5cdFx0XHRcdFx0KHZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5KHsgZm9yY2VGb2N1czogZm9yY2VGb2N1cyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8pIHtcblx0XHRcdFx0XHR0aGlzLnJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHQvLyBUcnkgdG8gcmVzdG9yZSB0aGUgZm9jdXMgb24gd2hlcmUgaXQgd2FzIHdoZW4gd2UgbGFzdCB2aXNpdGVkIHRoZSBjdXJyZW50IGhhc2hcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5yZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHR0aGlzLm9uQ29udGFpbmVyUmVhZHkoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgdGhlIHRpdGxlIGhpZXJhcmNoeSBhbmQgY2FsbGluZyBmb2N1cyBtZXRob2RcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSAoIG9yIGluaXRpYWxpemVzIGl0IGlmIHVuZGVmaW5lZCkuXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk6IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRpZiAoIXRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUpIHtcblx0XHRcdHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjbGVhciB0aGUgVGl0bGVIaWVyYXJjaHkgY2FjaGUgZm9yIHRoZSBnaXZlbiBjb250ZXh0IHBhdGguXG5cdCAqIEBwYXJhbSAgcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBjbGVhciB0aGUgY2FjaGUgZm9yXG5cdCAqL1xuXHRjbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUocGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtwYXRoXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0aXRsZUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGVcblx0ICogQHBhcmFtIHN1YnRpdGxlIFRoZSBhcHBsaWNhdGlvbidzIHN1YlRpdGxlXG5cdCAqIEBwYXJhbSBzSW50ZW50IFRoZSBpbnRlbnQgcGF0aCB0byBiZSByZWRpcmVjdGVkIHRvXG5cdCAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgYXBwbGljYXRpb24ncyBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gaWNvbiBUaGUgYXBwbGljYXRpb24ncyBpY29uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUluZm8odGl0bGU6IHN0cmluZywgc3VidGl0bGU6IHN0cmluZywgc0ludGVudDogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgaWNvbiA9IFwiXCIpOiBUaXRsZUluZm9ybWF0aW9uIHtcblx0XHRjb25zdCBhUGFydHMgPSBzSW50ZW50LnNwbGl0KFwiL1wiKTtcblx0XHRpZiAoIWFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiP3Jlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0ludGVudCArPSBcIiZyZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogc3VidGl0bGUsXG5cdFx0XHRpbnRlbnQ6IHNJbnRlbnQsXG5cdFx0XHRpY29uOiBpY29uLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG5cdFx0fTtcblx0fVxuXG5cdF9mb3JtYXRUaXRsZShkaXNwbGF5TW9kZTogc3RyaW5nLCB0aXRsZVZhbHVlOiBzdHJpbmcsIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfSAoJHt0aXRsZURlc2NyaXB0aW9ufSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn0gKCR7dGl0bGVWYWx1ZX0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBIZWFkZXJJbmZvIHRpdGxlIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0bW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRiaW5kaW5nVmlld0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwYXRoKSxcblx0XHRcdGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHR2YWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24sIHsgY29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSB9KTtcblx0XHRpZiAoIXZhbHVlRXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0aWYgKGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbi4kRnVuY3Rpb24gPT09IFwib2RhdGEuY29uY2F0XCIpIHtcblx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnk6IHZhbHVlRXhwcmVzc2lvbiB9KTtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChtb2RlbCk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluZm9UaXRsZSA9IGFueU9iamVjdC5nZXRBbnkoKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGluZm9UaXRsZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0KSxcblx0XHRcdFx0eyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH1cblx0XHRcdCksXG5cdFx0XHRwcm9wZXJ0eUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBgKSxcblx0XHRcdHByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdLFxuXHRcdFx0cGFyc2VkdmFsdWVFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRwcm9taXNlRm9yRGlzcGxheU1vZGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUocHJvcGVydHlDb250ZXh0KTtcblx0XHRcdFx0cmVzb2x2ZShkaXNwbGF5TW9kZSk7XG5cdFx0XHR9KTtcblx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JEaXNwbGF5TW9kZSk7XG5cdFx0Y29uc3QgdmFsdWVQYXRoID0gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGF0aCxcblx0XHRcdGZuVmFsdWVGb3JtYXR0ZXIgPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0dmFsdWVCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHZhbHVlUGF0aCwgYmluZGluZ1ZpZXdDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0XHR2YWx1ZUJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdGNvbnN0IHByb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmblZhbHVlRm9ybWF0dGVyID8gZm5WYWx1ZUZvcm1hdHRlcihldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0dmFsdWVCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdHJlc29sdmUodGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHZhbHVlQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHRleHRFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRUZXh0RXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcih0ZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgdGV4dFBhdGggPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXJ0cyA/IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXRoO1xuXHRcdFx0dGV4dFBhdGggPSB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHt2YWx1ZVBhdGguc2xpY2UoMCwgdmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSl9LyR7dGV4dFBhdGh9YCA6IHRleHRQYXRoO1xuXG5cdFx0XHRjb25zdCBmblRleHRGb3JtYXR0ZXIgPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRcdHRleHRCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHRleHRQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdFx0dGV4dEJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVGV4dCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gZm5UZXh0Rm9ybWF0dGVyID8gZm5UZXh0Rm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRcdHRleHRCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRUZXh0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0ZXh0QmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JUaXRsZVRleHQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVJbmZvOiBzdHJpbmdbXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlSW5mbyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IHRoaXMuX2Zvcm1hdFRpdGxlKHRpdGxlSW5mb1swXSwgdGl0bGVJbmZvWzFdLCB0aXRsZUluZm9bMl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIGRlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaC5cblx0ICogQHJldHVybnMgRGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqL1xuXHRnZXRBcHBTcGVjaWZpY0hhc2goKTogc3RyaW5nIHtcblx0XHQvLyBIYXNoQ2hhbmdlZCBpc1NoZWxsTmF2aWdhdGlvbkhhc2hDaGFuZ2VyXG5cdFx0Y29uc3QgaGFzaENoYW5nZXIgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdHJldHVybiBoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gVVJJLmRlY29kZShoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpKSA6IFwiIy9cIjtcblx0fVxuXG5cdF9nZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aXRsZUluZm9ybWF0aW9uIGZyb20gYSBwYXRoLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBjYWNoZSB0byBzdG9yZSB0aXRsZSBpbmZvcm1hdGlvbiBpZiBuZWNlc3Nhcnlcblx0ICogQHBhcmFtIHsqfSBzUGF0aCBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIHJldHJpZXZlIHRpdGxlIGluZm9ybWF0aW9uIGZyb20gTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSAgb1RpdGxlaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcHJvbWlzZVxuXHQgKi9cblxuXHRhc3luYyBnZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aDogc3RyaW5nKTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IHNUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UeXBlTmFtZWApO1xuXHRcdGNvbnN0IHNBcHBTcGVjaWZpY0hhc2ggPSB0aGlzLmdldEFwcFNwZWNpZmljSGFzaCgpO1xuXHRcdGNvbnN0IHNJbnRlbnQgPSBzQXBwU3BlY2lmaWNIYXNoICsgc1BhdGguc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoVGl0bGVWYWx1ZShzUGF0aCkudGhlbigoc1RpdGxlOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0IG9UaXRsZUluZm8gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKHNUeXBlTmFtZSwgc1RpdGxlLCBzSW50ZW50KTtcblx0XHRcdG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSA9IG9UaXRsZUluZm87XG5cdFx0XHRyZXR1cm4gb1RpdGxlSW5mbztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmUgdGhhdCB0aGUgdXNoZWxsIHNlcnZpY2UgcmVjZWl2ZXMgYWxsIGVsZW1lbnRzXG5cdCAqICh0aXRsZSwgc3VidGl0bGUsIGludGVudCwgaWNvbikgYXMgc3RyaW5ncy5cblx0ICpcblx0ICogQW5ub3RhdGlvbiBIZWFkZXJJbmZvIGFsbG93cyBmb3IgYmluZGluZyBvZiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cblx0ICogKHdoaWNoIGFyZSB1c2VkIGhlcmUgYXMgdGl0bGUgYW5kIHN1YnRpdGxlKSB0byBhbnkgZWxlbWVudCBpbiB0aGUgZW50aXR5XG5cdCAqIChzdWNoIHR5cGVzIGFzIEJvb2xlYW4sIHRpbWVzdGFtcCwgZG91YmxlLCBhbmQgb3RoZXJzIGFyZSBwb3NzaWJsZSlcblx0ICpcblx0ICogQ3JlYXRlcyBhIG5ldyBoaWVyYXJjaHkgYW5kIGNvbnZlcnRzIG5vbi1zdHJpbmcgdHlwZXMgdG8gc3RyaW5nLlxuXHQgKiBAcGFyYW0gYUhpZXJhcmNoeSBTaGVsbCB0aXRsZSBoaWVyYXJjaHlcblx0ICogQHJldHVybnMgQ29weSBvZiBzaGVsbCB0aXRsZSBoaWVyYXJjaHkgY29udGFpbmluZyBhbGwgZWxlbWVudHMgYXMgc3RyaW5nc1xuXHQgKi9cblx0X2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyhhSGllcmFyY2h5OiBUaXRsZUluZm9ybWF0aW9uW10pOiBvYmplY3RbXSB7XG5cdFx0Y29uc3QgYUhpZXJhcmNoeVNoZWxsID0gW107XG5cdFx0Zm9yIChjb25zdCBsZXZlbCBpbiBhSGllcmFyY2h5KSB7XG5cdFx0XHRjb25zdCBvSGllcmFyY2h5ID0gYUhpZXJhcmNoeVtsZXZlbF07XG5cdFx0XHRjb25zdCBvU2hlbGxIaWVyYXJjaHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG9IaWVyYXJjaHkpIHtcblx0XHRcdFx0b1NoZWxsSGllcmFyY2h5W2tleV0gPSAoXG5cdFx0XHRcdFx0dHlwZW9mIG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dICE9PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHQ/IFN0cmluZyhvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSlcblx0XHRcdFx0XHRcdDogb0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl1cblx0XHRcdFx0KSBhcyBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0XHRhSGllcmFyY2h5U2hlbGwucHVzaChvU2hlbGxIaWVyYXJjaHkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUhpZXJhcmNoeVNoZWxsO1xuXHR9XG5cblx0X2dldFRhcmdldFR5cGVGcm9tSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRsZXQgc1RhcmdldFR5cGUgPSBcIlwiO1xuXG5cdFx0Y29uc3QgYVJvdXRlcyA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZz8ucm91dGVzID8/IFtdO1xuXHRcdGZvciAoY29uc3Qgcm91dGUgb2YgYVJvdXRlcykge1xuXHRcdFx0Y29uc3Qgb1JvdXRlID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZShyb3V0ZS5uYW1lKTtcblx0XHRcdGlmIChvUm91dGU/Lm1hdGNoKHNIYXNoKSkge1xuXHRcdFx0XHRjb25zdCBzVGFyZ2V0ID0gZ2V0Um91dGVUYXJnZXROYW1lcyhyb3V0ZS50YXJnZXQpWzBdO1xuXHRcdFx0XHRzVGFyZ2V0VHlwZSA9IChvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChzVGFyZ2V0KSBhcyB1bmtub3duIGFzIHsgX29PcHRpb25zOiB7IG5hbWU6IHN0cmluZyB9IH0pLl9vT3B0aW9ucy5uYW1lO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc1RhcmdldFR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIGZvcm1hdCBvZiB0aGUgYnJvd3NlciB0aXRsZSBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3LlxuXHQgKiBAcGFyYW0gdGl0bGVJbmZvSGllcmFyY2h5U2hlbGwgVGl0bGVJbmZvcm1hdGlvbiBhcnJheVxuXHQgKiBAcGFyYW0gcGFnZVRpdGxlSW5mb3JtYXRpb24gVGl0bGVJbmZvcm1hdGlvbiBvYmplY3Rcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBoZWFkZXIgdGV4dCBhbmQgYW4gYWRkaXRpb25hbCBjb250ZXh0XG5cdCAqL1xuXHRfZ2V0QnJvd3NlclRpdGxlKHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsOiBUaXRsZUluZm9ybWF0aW9uW10sIHBhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uKTogeyBoZWFkZXJUZXh0OiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgYnJlYWRjcnVtYlRleHRzID0gW107XG5cdFx0bGV0IGZpcnN0UGFydCA9IFwiXCIsXG5cdFx0XHRzZWNvbmRQYXJ0ID0gXCJcIjtcblxuXHRcdGNvbnN0IHRpdGxlSW5mb0hpZXJhcmNoeSA9IFsuLi50aXRsZUluZm9IaWVyYXJjaHlTaGVsbF07XG5cdFx0aWYgKHRpdGxlSW5mb0hpZXJhcmNoeS5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aXRsZUluZm9IaWVyYXJjaHkucG9wKCk7XG5cdFx0XHR0aXRsZUluZm9IaWVyYXJjaHkuZm9yRWFjaCgodGl0bGVJbmZvKSA9PiB7XG5cdFx0XHRcdGlmICh0aXRsZUluZm8uc3VidGl0bGUpIHtcblx0XHRcdFx0XHRicmVhZGNydW1iVGV4dHMucHVzaCh0aXRsZUluZm8uc3VidGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHBhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlKSB7XG5cdFx0XHRicmVhZGNydW1iVGV4dHMucHVzaChwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSk7XG5cdFx0fVxuXHRcdGlmIChwYWdlVGl0bGVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0Zmlyc3RQYXJ0ID0gYCR7cGFnZVRpdGxlSW5mb3JtYXRpb24uc3VidGl0bGV9KCR7cGFnZVRpdGxlSW5mb3JtYXRpb24uZGVzY3JpcHRpb259KWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpcnN0UGFydCA9IGAke3BhZ2VUaXRsZUluZm9ybWF0aW9uLnN1YnRpdGxlfWA7XG5cdFx0fVxuXHRcdHNlY29uZFBhcnQgPSBicmVhZGNydW1iVGV4dHMuam9pbihcIiAtIFwiKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRoZWFkZXJUZXh0OiBzZWNvbmRQYXJ0ID8gYCR7Zmlyc3RQYXJ0fSAtICR7c2Vjb25kUGFydH1gIDogZmlyc3RQYXJ0XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGUgdGhlIGJyb3dzZXIgdGl0bGUgYW5kIG1lbnUgdGl0bGUsIHRoZW4gdHJpZ2dlciB0aGUgc2V0IEFQSSBvZiB0aGUgc2hlbGwuXG5cdCAqIEBwYXJhbSBhcHBUaXRsZSBBcHBsaWNhdGlvbiB0aXRsZVxuXHQgKiBAcGFyYW0gdGl0bGVJbmZvSGllcmFyY2h5U2hlbGwgQW4gb2JqZWN0IGZvciB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gcGFnZVRpdGxlSW5mb3JtYXRpb24gVGl0bGVJbmZvcm1hdGlvbiBvYmplY3Rcblx0ICovXG5cdGFzeW5jIF9zZXRUaXRsZXMoYXBwVGl0bGU6IHN0cmluZywgdGl0bGVJbmZvSGllcmFyY2h5U2hlbGw6IFRpdGxlSW5mb3JtYXRpb25bXSwgcGFnZVRpdGxlSW5mb3JtYXRpb246IFRpdGxlSW5mb3JtYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBHZXQgdGhlIHRpdGxlIG9mIHRoZSBicm93c2VyXG5cdFx0bGV0IGJyb3dzZXJUaXRsZTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0dGl0bGUgPSBwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiO1xuXHRcdGlmICh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbC5sZW5ndGgpIHtcblx0XHRcdGJyb3dzZXJUaXRsZSA9IHRoaXMuX2dldEJyb3dzZXJUaXRsZSh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCwgcGFnZVRpdGxlSW5mb3JtYXRpb24pO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLl9zZXRTaGVsbE1lbnVUaXRsZShhcHBDb21wb25lbnQsIHRpdGxlLCBhcHBUaXRsZSwgYnJvd3NlclRpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHNoZWxsIHRpdGxlIGFmdGVyIGVhY2ggbmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBtZW51IGlzIGZpbGxlZCBwcm9wZXJseVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgY29tcHV0ZVRpdGxlSGllcmFyY2h5KHZpZXc6IFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0Y29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdGN1cnJlbnRQYWdlID0gdmlldy5nZXRQYXJlbnQoKSxcblx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcyA9IFtdLFxuXHRcdFx0YXBwU3BlY2lmaWNIYXNoID0gdGhpcy5nZXRBcHBTcGVjaWZpY0hhc2goKSxcblx0XHRcdG1hbmlmZXN0QXBwU2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRhcHBUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3MudGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcFN1YlRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwSWNvbiA9IG1hbmlmZXN0QXBwU2V0dGluZ3MuaWNvbiB8fCBcIlwiO1xuXHRcdGxldCBwYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbiwgbmV3UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGN1cnJlbnRQYWdlICYmIChjdXJyZW50UGFnZSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKSB7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgYSBMUiwgdXNlIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0aWYgKHRoaXMuX2dldFRhcmdldFR5cGVGcm9tSGFzaChcIlwiKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZ2V0Um9vdExldmVsVGl0bGVJbmZvcm1hdGlvbihhcHBTcGVjaWZpY0hhc2gsIGFwcFRpdGxlLCBhcHBTdWJUaXRsZSwgYXBwSWNvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhlbiBtYW5hZ2Ugb3RoZXIgcGFnZXNcblx0XHRcdFx0bmV3UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBwYXRoUGFydHMgPSBuZXdQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0bGV0IHBhdGggPSBcIlwiO1xuXG5cdFx0XHRcdHBhdGhQYXJ0cy5zaGlmdCgpOyAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnQgKGVtcHR5IHN0cmluZykgYXMgaXQgaGFzIGJlZW4gbWFuYWdlZCBhYm92ZVxuXHRcdFx0XHRwYXRoUGFydHMucG9wKCk7IC8vIFJlbW92ZSB0aGUgbGFzdCBzZWdtZW50IGFzIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHNob3VsZG4ndCBhcHBlYXIgaW4gdGhlIG1lbnVcblx0XHRcdFx0cGF0aFBhcnRzLmZvckVhY2goKHBhdGhQYXJ0OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRwYXRoICs9IGAvJHtwYXRoUGFydH1gO1xuXHRcdFx0XHRcdC8vaWYgdGhlIGFzc29jaWF0ZWQgdGFyZ2V0IGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgcm91dGVzLCB3ZSBza2lwIGl0XG5cdFx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlclBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRcdFx0XHRpc1BhcmFtZXRlcml6ZWQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRcdGlmICghaXNQYXJhbWV0ZXJpemVkKSB7XG5cdFx0XHRcdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmdldFRpdGxlSW5mb0Zyb21QYXRoKHBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50IHBhZ2Vcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gKGN1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTtcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIixcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24uc3VidGl0bGUgPz8gXCJcIixcblx0XHRcdFx0YXBwU3BlY2lmaWNIYXNoICsgdGhpcy5fZ2V0SGFzaCgpLFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvblxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNvbnRleHQgJiYgbmV3UGF0aCkge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbbmV3UGF0aF0gPSBwYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVthcHBTcGVjaWZpY0hhc2hdID0gcGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVqZWN0KFwiVGl0bGUgaW5mb3JtYXRpb24gbWlzc2luZyBpbiBIZWFkZXJJbmZvXCIpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcylcblx0XHRcdC50aGVuKGFzeW5jICh0aXRsZUluZm9IaWVyYXJjaHk6IFRpdGxlSW5mb3JtYXRpb25bXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIGZvciBzaGVsbCB3aGljaCBpcyBleHBlY3RpbmcgYWxsIGVsZW1lbnRzIGJlaW5nIG9mIHR5cGUgc3RyaW5nXG5cdFx0XHRcdGNvbnN0IHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsID0gdGhpcy5fZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKHRpdGxlSW5mb0hpZXJhcmNoeSksXG5cdFx0XHRcdFx0dGl0bGUgPSBwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiO1xuXHRcdFx0XHR0aXRsZUluZm9IaWVyYXJjaHlTaGVsbC5yZXZlcnNlKCk7XG5cdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0SGllcmFyY2h5KHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsKTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRUaXRsZXMoYXBwVGl0bGUsIHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsLCBwYWdlVGl0bGVJbmZvcm1hdGlvbik7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3JNZXNzYWdlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3JNZXNzYWdlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB0aXRsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJvb3QgbGV2ZWwuXG5cdCAqIEBwYXJhbSBhcHBTcGVjaWZpY0hhc2ggVGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhhc2hcblx0ICogQHBhcmFtIGFwcFRpdGxlIFRoZSBhcHBsaWNhdGlvbiB0aXRsZVxuXHQgKiBAcGFyYW0gYXBwU3ViVGl0bGUgVGhlIGFwcGxpY2F0aW9uIHN1YnRpdGxlXG5cdCAqIEBwYXJhbSBhcHBJY29uIFRoZSBhcHBsaWNhdGlvbiBpY29uXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBjb250YWluaW5nIHRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uKFxuXHRcdGFwcFNwZWNpZmljSGFzaDogc3RyaW5nLFxuXHRcdGFwcFRpdGxlOiBzdHJpbmcsXG5cdFx0YXBwU3ViVGl0bGU6IHN0cmluZyxcblx0XHRhcHBJY29uOiBzdHJpbmdcblx0KTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbYXBwU3BlY2lmaWNIYXNoXSkge1xuXHRcdFx0Ly8gVGhlIHRpdGxlIGluZm8gaXMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGNhY2hlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9UaXRsZUhpZXJhcmNoeUNhY2hlW2FwcFNwZWNpZmljSGFzaF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oYXBwVGl0bGUsIGFwcFN1YlRpdGxlLCBhcHBTcGVjaWZpY0hhc2gsIHVuZGVmaW5lZCwgYXBwSWNvbikpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIGFmdGVyIGEgdmlldyBoYXMgYmVlbiBib3VuZCB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIGJvdW5kIHRvIGEgdmlld1xuXHQgKi9cblx0b25Db250ZXh0Qm91bmRUb1ZpZXcob0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBzRGVlcGVzdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIpLFxuXHRcdFx0XHRzVmlld0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAoIXNEZWVwZXN0UGF0aCB8fCBzRGVlcGVzdFBhdGguaW5kZXhPZihzVmlld0NvbnRleHRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHQvLyBUaGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBkZWVwZXN0IHJlYWNoZWQgcGF0aCwgb3IgdGhlIHBhdGhcblx0XHRcdFx0Ly8gZm9yIHRoZSB2aWV3IGlzbid0IGEgc3VicGF0aCBvZiB0aGUgcHJldmlvdXMgZGVlcGVzdCBwYXRoIC0tPiB1cGRhdGVcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiLCBzVmlld0NvbnRleHRQYXRoLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoX2Vycm9yTWVzc2FnZTogc3RyaW5nLCBfcGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCBfRkNMTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBGRVZpZXcsIEZDTExldmVsOiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbGwgdmlzaWJsZSB2aWV3cy5cblx0ICogQHJldHVybnMgVGhlIHZpc2libGUgdmlld3Ncblx0ICovXG5cdGdldFZpc2libGVWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKFxuXHRcdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRzVGl0bGU6IHN0cmluZyxcblx0XHRzQXBwVGl0bGU6IHN0cmluZyxcblx0XHRhZGRpdGlvbmFsSW5mb3JtYXRpb24/OiBUaXRsZUFkZGl0aW9uYWxJbmZvXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSBGY2xDb250cm9sbGVyXG5cdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlLCBhZGRpdGlvbmFsSW5mb3JtYXRpb24pO1xuXHR9XG5cblx0Z2V0QXBwQ29udGVudENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwQ29udGVudElkID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5jb25maWc/LmNvbnRyb2xJZCA/PyBcImFwcENvbnRlbnRcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChhcHBDb250ZW50SWQpIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG59XG5pbnRlcmZhY2UgUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdG9uQ29udGFpbmVyUmVhZHk/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0Q01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxTQUFTLENBQUMsRUFBQU4sSUFBQSxDQUFBTyxNQUFBLElBQUFDLE9BQUEs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
|