@sapui5/sap.fe.core 1.127.2 → 1.129.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 +3 -9
- package/src/sap/fe/core/ActionRuntime.ts +3 -7
- package/src/sap/fe/core/AppComponent.js +9 -19
- package/src/sap/fe/core/AppComponent.ts +2 -12
- package/src/sap/fe/core/AppStateHandler.js +3 -11
- package/src/sap/fe/core/AppStateHandler.ts +0 -7
- package/src/sap/fe/core/BaseController.js +4 -8
- package/src/sap/fe/core/BaseController.ts +0 -5
- package/src/sap/fe/core/CommonUtils.js +1 -9
- package/src/sap/fe/core/CommonUtils.ts +4 -8
- package/src/sap/fe/core/ExtensionAPI.js +10 -25
- package/src/sap/fe/core/ExtensionAPI.ts +4 -19
- package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
- package/src/sap/fe/core/PageController.js +7 -10
- package/src/sap/fe/core/PageController.ts +0 -3
- package/src/sap/fe/core/ResourceModel.js +3 -5
- package/src/sap/fe/core/ResourceModel.ts +0 -2
- package/src/sap/fe/core/ReuseComponent.js +8 -14
- package/src/sap/fe/core/ReuseComponent.ts +0 -6
- package/src/sap/fe/core/TemplateComponent.js +37 -9
- package/src/sap/fe/core/TemplateComponent.ts +3 -2
- package/src/sap/fe/core/TemplateModel.js +5 -5
- package/src/sap/fe/core/TemplateModel.ts +0 -1
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +44 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
- package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
- package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
- package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
- package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
- package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +17 -11
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
- package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
- package/src/sap/fe/core/controls/Any.js +1 -2
- package/src/sap/fe/core/controls/Any.ts +0 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -2
- package/src/sap/fe/core/controls/AnyElement.ts +0 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
- package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
- package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
- package/src/sap/fe/core/converters/ConverterContext.js +8 -30
- package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
- package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
- package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
- package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
- package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
- package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
- package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
- package/src/sap/fe/core/converters/helpers/ID.js +1 -2
- package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -5
- package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
- package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
- package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
- package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
- package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
- package/src/sap/fe/core/fpm/Component.js +14 -17
- package/src/sap/fe/core/fpm/Component.ts +7 -10
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
- package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
- package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
- package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
- package/src/sap/fe/core/helpers/MetaPath.js +1 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
- package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
- package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
- package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
- package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
- package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
- package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
- package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
- package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
- package/src/sap/fe/core/helpers/WebSocket.js +1 -1
- package/src/sap/fe/core/library.js +10 -44
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +8 -45
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
- package/src/sap/fe/core/messagebundle.properties +12 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -0
- package/src/sap/fe/core/messagebundle_bg.properties +8 -0
- package/src/sap/fe/core/messagebundle_ca.properties +8 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
- package/src/sap/fe/core/messagebundle_cs.properties +9 -1
- package/src/sap/fe/core/messagebundle_cy.properties +8 -0
- package/src/sap/fe/core/messagebundle_da.properties +8 -0
- package/src/sap/fe/core/messagebundle_de.properties +8 -0
- package/src/sap/fe/core/messagebundle_el.properties +8 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
- package/src/sap/fe/core/messagebundle_es.properties +9 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
- package/src/sap/fe/core/messagebundle_et.properties +8 -0
- package/src/sap/fe/core/messagebundle_fi.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
- package/src/sap/fe/core/messagebundle_hi.properties +9 -1
- package/src/sap/fe/core/messagebundle_hr.properties +8 -0
- package/src/sap/fe/core/messagebundle_hu.properties +8 -0
- package/src/sap/fe/core/messagebundle_id.properties +12 -4
- package/src/sap/fe/core/messagebundle_it.properties +8 -0
- package/src/sap/fe/core/messagebundle_iw.properties +8 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -0
- package/src/sap/fe/core/messagebundle_kk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ko.properties +8 -0
- package/src/sap/fe/core/messagebundle_lt.properties +8 -0
- package/src/sap/fe/core/messagebundle_lv.properties +8 -0
- package/src/sap/fe/core/messagebundle_mk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ms.properties +8 -0
- package/src/sap/fe/core/messagebundle_nl.properties +16 -8
- package/src/sap/fe/core/messagebundle_no.properties +8 -0
- package/src/sap/fe/core/messagebundle_pl.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
- package/src/sap/fe/core/messagebundle_ro.properties +8 -0
- package/src/sap/fe/core/messagebundle_ru.properties +8 -0
- package/src/sap/fe/core/messagebundle_sh.properties +8 -0
- package/src/sap/fe/core/messagebundle_sk.properties +8 -0
- package/src/sap/fe/core/messagebundle_sl.properties +8 -0
- package/src/sap/fe/core/messagebundle_sr.properties +8 -0
- package/src/sap/fe/core/messagebundle_sv.properties +8 -0
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +8 -0
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
- package/src/sap/fe/core/operationsHelper.js +22 -7
- package/src/sap/fe/core/operationsHelper.ts +24 -5
- package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
- package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
- package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
- 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 +4 -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 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
- package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
- package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
- 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 -31
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
- package/src/sap/fe/core/templating/UIFormatters.js +18 -14
- package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
- package/src/sap/fe/core/type/Date.js +3 -6
- package/src/sap/fe/core/type/Date.ts +0 -3
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/FiscalDate.js +3 -9
- package/src/sap/fe/core/type/FiscalDate.ts +0 -6
- package/src/sap/fe/core/type/InputMask.js +3 -7
- package/src/sap/fe/core/type/InputMask.ts +0 -4
|
@@ -16,12 +16,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
16
16
|
var finalExtension = ClassSupport.finalExtension;
|
|
17
17
|
var extensible = ClassSupport.extensible;
|
|
18
18
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
19
|
-
function _inheritsLoose(
|
|
20
|
-
function _setPrototypeOf(
|
|
21
|
-
function _applyDecoratedDescriptor(
|
|
19
|
+
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
20
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
21
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
22
|
+
/**
|
|
23
|
+
* Navigation Parameters used during navigation
|
|
24
|
+
*/
|
|
22
25
|
/**
|
|
23
26
|
* {@link sap.ui.core.mvc.ControllerExtension Controller extension}
|
|
24
|
-
*
|
|
25
27
|
* @since 1.84.0
|
|
26
28
|
*/
|
|
27
29
|
let InternalIntentBasedNavigation = (_dec = defineUI5Class("sap.fe.core.controllerextensions.InternalInternalBasedNavigation"), _dec2 = methodOverride(), _dec3 = publicExtension(), _dec4 = finalExtension(), _dec5 = publicExtension(), _dec6 = finalExtension(), _dec7 = publicExtension(), _dec8 = extensible(OverrideExecution.Instead), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec11 = privateExtension(), _dec12 = publicExtension(), _dec13 = finalExtension(), _dec14 = publicExtension(), _dec15 = finalExtension(), _dec16 = publicExtension(), _dec17 = finalExtension(), _dec18 = publicExtension(), _dec19 = finalExtension(), _dec20 = publicExtension(), _dec21 = finalExtension(), _dec22 = publicExtension(), _dec23 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
@@ -41,7 +43,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
41
43
|
* Enables intent-based navigation (SemanticObject-Action) with the provided context.
|
|
42
44
|
* If semantic object mapping is provided, this is also applied to the selection variant after the adaptation by a consumer.
|
|
43
45
|
* This takes care of removing any technical parameters and determines if an explace or inplace navigation should take place.
|
|
44
|
-
*
|
|
45
46
|
* @param semanticObject Semantic object for the target app
|
|
46
47
|
* @param action Action for the target app
|
|
47
48
|
* @param [navigationParameters] Optional parameters to be passed to the external navigation
|
|
@@ -183,7 +184,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
183
184
|
|
|
184
185
|
/**
|
|
185
186
|
* Prepare attributes to be passed to external navigation.
|
|
186
|
-
*
|
|
187
187
|
* @param oSemanticAttributes Context data after removing all sensitive information.
|
|
188
188
|
* @param oContext Actual context from which the semanticAttributes were derived.
|
|
189
189
|
* @returns Object of prepared attributes for external navigation and no conflict properties.
|
|
@@ -287,7 +287,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
287
287
|
|
|
288
288
|
/**
|
|
289
289
|
* Get Navigation mode.
|
|
290
|
-
*
|
|
291
290
|
* @returns The navigation mode
|
|
292
291
|
*/;
|
|
293
292
|
_proto.getNavigationMode = function getNavigationMode() {
|
|
@@ -298,10 +297,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
298
297
|
* Allows for navigation to a given intent (SemanticObject-Action) with the provided context, using a dialog that shows the contexts which cannot be passed
|
|
299
298
|
* If semantic object mapping is provided, this setting is also applied to the selection variant after adaptation by a consumer.
|
|
300
299
|
* This setting also removes any technical parameters and determines if an inplace or explace navigation should take place.
|
|
301
|
-
*
|
|
302
300
|
* @param sSemanticObject Semantic object for the target app
|
|
303
301
|
* @param sAction Action for the target app
|
|
304
302
|
* @param [mNavigationParameters] Optional parameters to be passed to the external navigation
|
|
303
|
+
* @param source
|
|
305
304
|
*/;
|
|
306
305
|
_proto.navigateWithConfirmationDialog = async function navigateWithConfirmationDialog(sSemanticObject, sAction, mNavigationParameters, source) {
|
|
307
306
|
var _mNavigationParameter;
|
|
@@ -336,7 +335,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
336
335
|
|
|
337
336
|
/**
|
|
338
337
|
* Get targeted Entity set.
|
|
339
|
-
*
|
|
340
338
|
* @returns Entity set name
|
|
341
339
|
*/;
|
|
342
340
|
_proto.getEntitySet = function getEntitySet() {
|
|
@@ -345,7 +343,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
345
343
|
|
|
346
344
|
/**
|
|
347
345
|
* Removes sensitive data from the semantic attribute with respect to the entitySet.
|
|
348
|
-
*
|
|
349
346
|
* @param oAttributes Context data
|
|
350
347
|
* @param sMetaPath Meta path to reach the entitySet in the MetaModel
|
|
351
348
|
* @returns Array of semantic Attributes
|
|
@@ -392,7 +389,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
392
389
|
|
|
393
390
|
/**
|
|
394
391
|
* Remove the attribute from navigation data if it is a measure.
|
|
395
|
-
*
|
|
396
392
|
* @param aggregates Array of Aggregates
|
|
397
393
|
* @param sProp Attribute name
|
|
398
394
|
* @param oAttributes SemanticAttributes
|
|
@@ -405,7 +401,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
405
401
|
|
|
406
402
|
/**
|
|
407
403
|
* Returns the property annotations.
|
|
408
|
-
*
|
|
409
404
|
* @param sProp
|
|
410
405
|
* @param sMetaPath
|
|
411
406
|
* @param oAttributes
|
|
@@ -424,7 +419,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
424
419
|
|
|
425
420
|
/**
|
|
426
421
|
* Returns the aggregates part of the EntitySet or EntityType.
|
|
427
|
-
*
|
|
428
422
|
* @param sMetaPath
|
|
429
423
|
* @param oView
|
|
430
424
|
* @param oDiagnostics
|
|
@@ -460,7 +454,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
460
454
|
|
|
461
455
|
/**
|
|
462
456
|
* Returns converterContext.
|
|
463
|
-
*
|
|
464
457
|
* @param sMetaPath
|
|
465
458
|
* @param oView
|
|
466
459
|
* @param oDiagnostics
|
|
@@ -478,7 +471,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
478
471
|
|
|
479
472
|
/**
|
|
480
473
|
* Check if path-based FieldControl evaluates to inapplicable.
|
|
481
|
-
*
|
|
482
474
|
* @param sFieldControlPath Field control path
|
|
483
475
|
* @param oAttribute SemanticAttributes
|
|
484
476
|
* @returns `true` if inapplicable
|
|
@@ -497,7 +489,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
497
489
|
|
|
498
490
|
/**
|
|
499
491
|
* Method to replace Local Properties with Semantic Object mappings.
|
|
500
|
-
*
|
|
501
492
|
* @param oSelectionVariant SelectionVariant consisting of filterbar, Table and Page Context
|
|
502
493
|
* @param vMappings A string representation of semantic object mapping
|
|
503
494
|
* @returns - Modified SelectionVariant with LocalProperty replaced with SemanticObjectProperties.
|
|
@@ -545,7 +536,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
545
536
|
|
|
546
537
|
/**
|
|
547
538
|
* Navigates to an Outbound provided in the manifest.
|
|
548
|
-
*
|
|
549
539
|
* @param sOutbound Identifier to location the outbound in the manifest
|
|
550
540
|
* @param mNavigationParameters Optional map containing key/value pairs to be passed to the intent
|
|
551
541
|
* @since 1.86.0
|
|
@@ -595,7 +585,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
595
585
|
|
|
596
586
|
/**
|
|
597
587
|
* Method to apply outbound parameters defined in the manifest.
|
|
598
|
-
*
|
|
599
588
|
* @param oSelectionVariant SelectionVariant consisting of a filter bar, a table, and a page context
|
|
600
589
|
* @param vOutboundParams Outbound Properties defined in the manifest
|
|
601
590
|
* @returns - The modified SelectionVariant with outbound parameters.
|
|
@@ -613,7 +602,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
613
602
|
|
|
614
603
|
/**
|
|
615
604
|
* Method to get the outbound parameters defined in the manifest.
|
|
616
|
-
*
|
|
617
605
|
* @param oOutboundParams Parameters defined in the outbounds. Only "plain" is supported
|
|
618
606
|
* @returns Parameters with the key-Value pair
|
|
619
607
|
*/;
|
|
@@ -637,7 +625,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
637
625
|
|
|
638
626
|
/**
|
|
639
627
|
* Triggers an outbound navigation when a user chooses the chevron.
|
|
640
|
-
*
|
|
641
628
|
* @param {object} oController
|
|
642
629
|
* @param {string} sOutboundTarget Name of the outbound target (needs to be defined in the manifest)
|
|
643
630
|
* @param oContext The context that contains the data for the target app
|
|
@@ -694,7 +681,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
694
681
|
|
|
695
682
|
/**
|
|
696
683
|
* Process the semantic attributes based on the navigation properties.
|
|
697
|
-
*
|
|
698
684
|
* @param context Context
|
|
699
685
|
* @param semanticAttributes Semantic attributes
|
|
700
686
|
* @param pathsToRetain Navigation properties to be retained in case of links
|
|
@@ -711,7 +697,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
711
697
|
|
|
712
698
|
/**
|
|
713
699
|
* Check if navigation properties has to be considered for the external navigation.
|
|
714
|
-
*
|
|
715
700
|
* @returns `true` if navigation properties has to be considered
|
|
716
701
|
*/;
|
|
717
702
|
_proto.keepNavigationPropertiesForNavigation = function keepNavigationPropertiesForNavigation() {
|
|
@@ -724,7 +709,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
724
709
|
|
|
725
710
|
/**
|
|
726
711
|
* Get semantic attributes from context.
|
|
727
|
-
*
|
|
728
712
|
* @param context Context
|
|
729
713
|
* @param pathsToRetain Navigation properties to be retained in case of links
|
|
730
714
|
* @returns Semantic Attributes
|
|
@@ -763,7 +747,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
763
747
|
|
|
764
748
|
/**
|
|
765
749
|
* Retrieve the navigation properties from entityType using metamodel.
|
|
766
|
-
*
|
|
767
750
|
* @param metaModel MetaModel
|
|
768
751
|
* @param metaPath MetaPath
|
|
769
752
|
* @returns Navigation properties
|
|
@@ -777,4 +760,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
777
760
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareContextForExternalNavigation", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareContextForExternalNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getNavigationMode", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getNavigationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateWithConfirmationDialog", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateWithConfirmationDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getEntitySet", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "getEntitySet"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeSensitiveData", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "removeSensitiveData"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateOutbound", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateOutbound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getOutboundParams", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "getOutboundParams"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onChevronPressNavigateOutBound", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onChevronPressNavigateOutBound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties"), _class2.prototype)), _class2)) || _class);
|
|
778
761
|
return InternalIntentBasedNavigation;
|
|
779
762
|
}, false);
|
|
780
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIl9vTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIl9vVmlldyIsImdldFZpZXciLCJuYXZpZ2F0ZSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJzb3VyY2UiLCJfZG9OYXZpZ2F0ZSIsInZOYXZpZ2F0aW9uQ29udGV4dHMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJhTmF2aWdhdGlvbkNvbnRleHRzIiwiQXJyYXkiLCJpc0FycmF5IiwidlNlbWFudGljT2JqZWN0TWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsInZPdXRib3VuZFBhcmFtcyIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9UYXJnZXRJbmZvIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJhU2VtYW50aWNBdHRyaWJ1dGVzIiwib1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwibGVuZ3RoIiwiZm9yRWFjaCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsIm9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dCIsIm9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0IiwiaXNBIiwib1NlbWFudGljQXR0cmlidXRlcyIsImdldE9iamVjdCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImZpbmFsU2VtYW50aWNBdHRyaWJ1dGVzIiwicHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvTmF2Q29udGV4dCIsInByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInB1c2giLCJzZW1hbnRpY0F0dHJpYnV0ZXMiLCJkYXRhIiwibWV0YVBhdGgiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsIm9Nb2RlbCIsInNFbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJzQ29udGV4dFVybCIsImNvbnN0cnVjdENvbnRleHRVcmwiLCJ1bmRlZmluZWQiLCJzZXRGaWx0ZXJDb250ZXh0VXJsIiwiX2FwcGx5T3V0Ym91bmRQYXJhbXMiLCJpbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJhZGFwdE5hdmlnYXRpb25Db250ZXh0IiwiX2FwcGx5U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIl9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzIiwic05hdk1vZGUiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJtUmVmcmVzaFN0cmF0ZWdpZXMiLCJyZWZyZXNoU3RyYXRlZ2llcyIsIm9JbnRlcm5hbE1vZGVsIiwiZ2V0Vmlld0RhdGEiLCJyZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmUiLCJtVmlld1JlZnJlc2hTdHJhdGVnaWVzIiwibWVyZ2VPYmplY3RzIiwibVJlZnJlc2hTdHJhdGVneSIsIktlZXBBbGl2ZUhlbHBlciIsImdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCIsInNldFByb3BlcnR5IiwibmF2TW9kZSIsIm9uRXJyb3IiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJNZXNzYWdlQm94Q2xhc3MiLCJvUmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJlcnJvciIsImdldFRleHQiLCJ0aXRsZSIsIkVycm9yIiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvTWV0YU1vZGVsIiwiY29udmVydGVyVHlwZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsImJpbmQiLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsIk5hdmlnYXRpb25UeXBlIiwiRm9yd2FyZE5hdmlnYXRpb24iLCJvQ29udGV4dCIsIm9EaXN0aW5jdEtleXMiLCJzQ29udGV4dFBhdGgiLCJhTWV0YVBhdGhQYXJ0cyIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsIl9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QiLCJMb29rVXBPYmplY3QiLCJzTG9va1VwT2JqZWN0TWV0YVBhdGgiLCJzS2V5Iiwib05ld0xvb2tVcE9iamVjdCIsInNNYWluRW50aXR5U2V0TmFtZSIsInNNYWluRW50aXR5VHlwZU5hbWUiLCJvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInNNYWluRW50aXR5VmFsdWVQYXRoIiwic0N1cnJlbnRWYWx1ZVBhdGgiLCJzTGFzdFZhbHVlUGF0aCIsInNEaXN0aW5jdEtleSIsImFDb25mbGljdGluZ1BhdGhzIiwic1dpbm5lclZhbHVlUGF0aCIsImkiLCJzUGF0aCIsInNQYXRoSW5Db250ZXh0IiwicmVwbGFjZSIsInNFbnRpdHlUeXBlTmFtZSIsInNWYWx1ZSIsImpvaW4iLCJnZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsIm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsInNTZW1hbnRpY09iamVjdCIsInNBY3Rpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJzaG91bGRDb250aW51ZSIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsIm1ldGFNb2RlbCIsImVudGl0eVNldFBhdGgiLCJjb252ZXJ0ZWRNZXRhZGF0YSIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldCIsInJlc29sdmVQYXRoIiwidGFyZ2V0Iiwibm90QXBwbGljYWJsZUNvbnRleHRzRGlhbG9nIiwiTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2ciLCJlbnRpdHlUeXBlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJvcGVuIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwib0F0dHJpYnV0ZXMiLCJ0cmFuc0FnZ3JlZ2F0aW9ucyIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJfZ2V0QWdncmVnYXRlcyIsImdldERpYWdub3N0aWNzIiwiYVByb3BlcnRpZXMiLCJPYmplY3QiLCJrZXlzIiwiZWxlbWVudCIsImluY2x1ZGVzIiwiX2RlbGV0ZUFnZ3JlZ2F0ZXMiLCJhUHJvcGVydHlBbm5vdGF0aW9ucyIsIl9nZXRQcm9wZXJ0eUFubm90YXRpb25zIiwiUGVyc29uYWxEYXRhIiwiSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSIsIlVJIiwiRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dCIsIkFuYWx5dGljcyIsIk1lYXN1cmUiLCJDb21tb24iLCJGaWVsZENvbnRyb2wiLCJvRmllbGRDb250cm9sIiwiX2lzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsImFnZ3JlZ2F0ZXMiLCJzUHJvcCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0Z1bGxDb250ZXh0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJvRGlhZ25vc3RpY3MiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2dldENvbnZlcnRlckNvbnRleHQiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidHJhbnNBZ2dyZWdhdGlvbnNQcmVwcm9jZXNzaW5nIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJtYXAiLCJ0cmFuc0FnZyIsIk5hbWUiLCJWYWx1ZSIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiY3VzdG9tQWdncmVnYXRlIiwicXVhbGlmaWVyIiwib1ZpZXdEYXRhIiwiY29udGV4dFBhdGgiLCJmdWxsQ29udGV4dFBhdGgiLCJDb21tb25VdGlscyIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic0ZpZWxkQ29udHJvbFBhdGgiLCJvQXR0cmlidXRlIiwiYkluYXBwbGljYWJsZSIsImFQYXJ0cyIsImhhc093blByb3BlcnR5Iiwidk1hcHBpbmdzIiwib01hcHBpbmdzIiwiSlNPTiIsInBhcnNlIiwiaXRlbSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVuYW1lU2VsZWN0T3B0aW9uIiwic3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkiLCJmb2N1c0luZm8iLCJmb2N1c0NvbnRyb2wiLCJFbGVtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImZvY3VzQ29udHJvbElkIiwiZ2V0SWQiLCJmb2N1c01EQ1RhYmxlIiwiRlBNSGVscGVyIiwiZ2V0TWRjVGFibGUiLCJ0eXBlIiwiY29udHJvbElkIiwidGFibGVJZCIsImNvbnRleHRQYXRoRm9jdXMiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwiYXNzaWduIiwic3RhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwic091dGJvdW5kIiwiYU5hdlBhcmFtcyIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9PdXRib3VuZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIkxvZyIsIm91dGJvdW5kUGFyYW1zIiwicGFyYW1ldGVycyIsImdldE91dGJvdW5kUGFyYW1zIiwia2V5Iiwib1BhcmFtcyIsIm5hdlBhcmFtZXRlclZhbHVlIiwiYVBhcmFtZXRlcnMiLCJhU2VsZWN0UHJvcGVydGllcyIsImdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiYWRkU2VsZWN0T3B0aW9uIiwib091dGJvdW5kUGFyYW1zIiwib1BhcmFtc01hcHBpbmciLCJvTWFwcGluZyIsInZhbHVlIiwiZm9ybWF0Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvT3V0Ym91bmRzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvRGlzcGxheU91dGJvdW5kIiwib1JlZnJlc2hTdHJhdGVnaWVzIiwiaW50ZW50cyIsIm9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5IiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwiUmVmcmVzaFN0cmF0ZWd5VHlwZSIsIlNlbGYiLCJfZmVEZWZhdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb250ZXh0IiwicGF0aHNUb1JldGFpbiIsImJLZWVwTmF2UHJvcGVydGllcyIsImtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24iLCJnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYW5pZmVzdCIsImFwcCIsImNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJyZXQiLCJuYXZQcm9wZXJ0aWVzIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZSIsIm5hdlByb3AiLCJuYXZQcm9wTmFtZSIsIm5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9Ob3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZ1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWZyZXNoU3RyYXRlZ2llcywgU09SZWZyZXNoU3RyYXRlZ3kgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB7IFJlZnJlc2hTdHJhdGVneVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeVBhcmFtZXRlciB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vY29udmVydGVycy9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5cbi8qKlxuICogTmF2aWdhdGlvbiBQYXJhbWV0ZXJzIHVzZWQgZHVyaW5nIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKi9cblx0bmF2aWdhdGlvbkNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBTZW1hbnRpY09iamVjdE1hcHBpbmcgb3IgU2VtYW50aWNPYmplY3RNYXBwaW5nIHRoYXQgYXBwbGllcyB0byB0aGlzIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdGRlZmF1bHRSZWZyZXNoU3RyYXRlZ3k/OiBvYmplY3Q7XG5cdHJlZnJlc2hTdHJhdGVnaWVzPzogUmVmcmVzaFN0cmF0ZWdpZXM7XG5cdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50IGFuZCBmb3Igd2hpY2ggdGhlIElCTiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0YXBwbGljYWJsZUNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFNpbmdsZSBpbnN0YW5jZSBvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSwgb3IgYWx0ZXJuYXRpdmVseSBhbiBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cywgd2hpY2ggY2Fubm90IGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKiBcdGlmIGFuIGFycmF5IG9mIGNvbnRleHRzIGlzIHBhc3NlZCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YSBwYXRoIGFuZCBhY2NvcmRpbmdseSByZW1vdmUgdGhlIHNlbnNpdGl2ZSBkYXRhXG5cdCAqIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgZm9sbG93aW5nIGZvcm1hdCBpcyBleHBlY3RlZDpcblx0ICoge1xuXHQgKiBcdGRhdGE6IHtcblx0ICogXHRcdFByb2R1Y3RJRDogNzYzNCxcblx0ICogXHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKiBcdH0sXG5cdCAqIFx0bWV0YVBhdGg6IFwiL1NhbGVzT3JkZXJNYW5hZ2VcIlxuXHQgKiB9XG5cdCAqIFRoZSBtZXRhUGF0aCBpcyB1c2VkIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEuXG5cdCAqL1xuXHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdGxhYmVsPzogc3RyaW5nO1xuXHRuYXZNb2RlPzogc3RyaW5nO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICpcbiAqIEBzaW5jZSAxLjg0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxJbnRlcm5hbEJhc2VkTmF2aWdhdGlvblwiKVxuY2xhc3MgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIF9vTmF2aWdhdGlvblNlcnZpY2UhOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdHRoaXMuX29NZXRhTW9kZWwgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGVzIGludGVudC1iYXNlZCBuYXZpZ2F0aW9uIChTZW1hbnRpY09iamVjdC1BY3Rpb24pIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqIElmIHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIHByb3ZpZGVkLCB0aGlzIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgdGhlIGFkYXB0YXRpb24gYnkgYSBjb25zdW1lci5cblx0ICogVGhpcyB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBleHBsYWNlIG9yIGlucGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICpcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdCBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIGFjdGlvbiAgQWN0aW9uIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0c10gVXNlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudDpcblx0ICogICAgYSBzaW5nbGUgaW5zdGFuY2Ugb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuXHQgKlx0XHQgIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YVBhdGggYW5kIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGFcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXggZXhwZWN0ZWQ6XG5cdCAqXHRcdCAge1xuXHQgKlx0XHRcdGRhdGE6IHtcblx0ICpcdCBcdFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqXHRcdFx0XHROYW1lOiBcIkxhcHRvcFwiXG5cdCAqXHRcdFx0IH0sXG5cdCAqXHRcdFx0IG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogICAgICAgIH1cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmddIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuZGVmYXVsdFJlZnJlc2hTdHJhdGVneV0gRGVmYXVsdCByZWZyZXNoIHN0cmF0ZWd5IHRvIGJlIHVzZWQgaW4gY2FzZSBubyByZWZyZXNoIHN0cmF0ZWd5IGlzIHNwZWNpZmllZCBmb3IgdGhlIGludGVudCBpbiB0aGUgdmlldy5cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llc11cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNdIEFkZGl0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIGNyb3NzQXBwTmF2aWdhdGlvbiBvdXRib3VuZCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBjb250cm9sIG9iamVjdCBvZiB0aGUgbmF2aWdhdGlvbiBzb3VyY2UuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUoc2VtYW50aWNPYmplY3Q6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcnMsIHNvdXJjZT86IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBfZG9OYXZpZ2F0ZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IHZOYXZpZ2F0aW9uQ29udGV4dHM6IG9iamVjdCB8IE9EYXRhVjRDb250ZXh0W10gfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHM7XG5cdFx0XHRjb25zdCBhTmF2aWdhdGlvbkNvbnRleHRzOiB1bmRlZmluZWQgfCAoT0RhdGFWNENvbnRleHQgfCBvYmplY3QpW10gPVxuXHRcdFx0XHR2TmF2aWdhdGlvbkNvbnRleHRzICYmICFBcnJheS5pc0FycmF5KHZOYXZpZ2F0aW9uQ29udGV4dHMpID8gW3ZOYXZpZ2F0aW9uQ29udGV4dHNdIDogdk5hdmlnYXRpb25Db250ZXh0cztcblx0XHRcdGNvbnN0IHZTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdHZPdXRib3VuZFBhcmFtcyA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0b1RhcmdldEluZm86IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0gPSB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdGFjdGlvbjogYWN0aW9uXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKSxcblx0XHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRcdGlmIChzZW1hbnRpY09iamVjdCAmJiBhY3Rpb24pIHtcblx0XHRcdFx0bGV0IGFTZW1hbnRpY0F0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50ID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdFx0Ly8gMS4gZ2V0IFNlbWFudGljQXR0cmlidXRlcyBmb3IgbmF2aWdhdGlvblxuXHRcdFx0XHRpZiAoYU5hdmlnYXRpb25Db250ZXh0cyAmJiBhTmF2aWdhdGlvbkNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uQ29udGV4dHMuZm9yRWFjaCgob05hdmlnYXRpb25Db250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyAxLjEuYSBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgaW5zdGFuY2Ugb2Ygc2FwLnVpLm1vZGUub2RhdGEudjQuQ29udGV4dFxuXHRcdFx0XHRcdFx0Ly8gZWxzZSBjaGVjayBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgb2YgdHlwZSBvYmplY3Rcblx0XHRcdFx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dCA9IG9OYXZpZ2F0aW9uQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0ID0gb05hdmlnYXRpb25Db250ZXh0IGFzXG5cdFx0XHRcdFx0XHRcdHwgeyBkYXRhOiB1bmtub3duW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgbWV0YVBhdGg6IHN0cmluZyB9XG5cdFx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0EgJiZcblx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmlzQTxPRGF0YVY0Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YVxuXHRcdFx0XHRcdFx0XHRsZXQgb1NlbWFudGljQXR0cmlidXRlcyA9IG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gdGhpcy5fb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogYWxzbyByZW1vdmUgc2Vuc2l0aXZlIGRhdGEgZnJvbSAgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbmFsU2VtYW50aWNBdHRyaWJ1dGVzID0gdGhpcy5wcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzKFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEoZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OYXZDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRmaW5hbFNlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b1RhcmdldEluZm9bXCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0XCJdID0gb05hdkNvbnRleHQucHJvcGVydGllc1dpdGhvdXRDb25mbGljdDtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcy5wdXNoKG9OYXZDb250ZXh0LnNlbWFudGljQXR0cmlidXRlcyk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0ICYmIEFycmF5LmlzQXJyYXkob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSkpICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBvTmF2aWdhdGlvbkNvbnRleHQgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHQvLyAxLjEuYiByZW1vdmUgc2Vuc2l0aXZlIGRhdGEgZnJvbSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhLCBvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5tZXRhUGF0aClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBvTmF2aWdhdGlvbkNvbnRleHQuZGF0YSBjYW4gYmUgYXJyYXkgYWxyZWFkeSBleCA6IFt7Q3VzdG9tZXI6IFwiMTAwMDFcIn0sIHtDdXN0b21lcjogXCIxMDA5MVwifV1cblx0XHRcdFx0XHRcdFx0Ly8gaGVuY2UgYXNzaWduaW5nIGl0IHRvIHRoZSBhU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEoXG5cdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSxcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5tZXRhUGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIDIuMSBNZXJnZSBiYXNlIHNlbGVjdGlvbiB2YXJpYW50IGFuZCBzYW5pdGl6ZWQgc2VtYW50aWMgYXR0cmlidXRlcyBpbnRvIG9uZSBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdGlmIChhU2VtYW50aWNBdHRyaWJ1dGVzICYmIGFTZW1hbnRpY0F0dHJpYnV0ZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gMy4gQWRkIGZpbHRlckNvbnRleHRVcmwgdG8gU1Ygc28gdGhlIE5hdmlnYXRpb25IYW5kbGVyIGNhbiByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhIGJhc2VkIG9uIHZpZXcgZW50aXR5U2V0XG5cdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0c0VudGl0eVNldCA9IHRoaXMuZ2V0RW50aXR5U2V0KCksXG5cdFx0XHRcdFx0c0NvbnRleHRVcmwgPSBzRW50aXR5U2V0ID8gdGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlLmNvbnN0cnVjdENvbnRleHRVcmwoc0VudGl0eVNldCwgb01vZGVsKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHNDb250ZXh0VXJsKSB7XG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBPdXRib3VuZCBQYXJhbWV0ZXJzIHRvIHRoZSBTVlxuXHRcdFx0XHRpZiAodk91dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlPdXRib3VuZFBhcmFtcyhvU2VsZWN0aW9uVmFyaWFudCwgdk91dGJvdW5kUGFyYW1zKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDQuIGdpdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBpbmZsdWVuY2UgdGhlIFNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0b0NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uLmFkYXB0TmF2aWdhdGlvbkNvbnRleHQob1NlbGVjdGlvblZhcmlhbnQsIG9UYXJnZXRJbmZvKTtcblxuXHRcdFx0XHQvLyA1LiBBcHBseSBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MgdG8gdGhlIFNWXG5cdFx0XHRcdGlmICh2U2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50LCB2U2VtYW50aWNPYmplY3RNYXBwaW5nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDYuIHJlbW92ZSB0ZWNobmljYWwgcGFyYW1ldGVycyBmcm9tIFNlbGVjdGlvbiBWYXJpYW50XG5cdFx0XHRcdHRoaXMuX3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQpO1xuXG5cdFx0XHRcdC8vIDcuIGNoZWNrIGlmIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreSBhbmQgcGFnZSBpcyBlZGl0YWJsZVxuXHRcdFx0XHRsZXQgc05hdk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0TmF2aWdhdGlvbk1vZGUoKTtcblxuXHRcdFx0XHQvLyA4LiBVcGRhdGluZyByZWZyZXNoIHN0cmF0ZWd5IGluIGludGVybmFsIG1vZGVsXG5cdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ2llcyA9IChuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llcykgfHwge30sXG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWwgPSBvVmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWwpIHtcblx0XHRcdFx0XHRpZiAoKG9WaWV3ICYmIG9WaWV3LmdldFZpZXdEYXRhKCkpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbVZpZXdSZWZyZXNoU3RyYXRlZ2llcyA9IG9WaWV3LmdldFZpZXdEYXRhKCkucmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlIHx8IHt9O1xuXHRcdFx0XHRcdFx0bWVyZ2VPYmplY3RzKG1SZWZyZXNoU3RyYXRlZ2llcywgbVZpZXdSZWZyZXNoU3RyYXRlZ2llcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KG1SZWZyZXNoU3RyYXRlZ2llcywgc2VtYW50aWNPYmplY3QsIGFjdGlvbik7XG5cdFx0XHRcdFx0aWYgKG1SZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3JlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZVwiLCBtUmVmcmVzaFN0cmF0ZWd5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyA5LiBDaGVjayBpZiBuYXZNb2RlIHBhcmFtZXRlciBpcyBzZXQgYW5kIHVzZSBpdFxuXHRcdFx0XHRzTmF2TW9kZSA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID8gbmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgOiBzTmF2TW9kZTtcblxuXHRcdFx0XHQvLyAxMC4gTmF2aWdhdGUgdmlhIE5hdmlnYXRpb25IYW5kbGVyXG5cdFx0XHRcdGNvbnN0IG9uRXJyb3IgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vTWVzc2FnZUJveFwiXSwgZnVuY3Rpb24gKE1lc3NhZ2VCb3hDbGFzczogdHlwZW9mIE1lc3NhZ2VCb3gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94Q2xhc3MuZXJyb3Iob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9IRUxQRVJfTkFWSUdBVElPTl9FUlJPUl9NRVNTQUdFXCIpLCB7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlLm5hdmlnYXRlKFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0b25FcnJvcixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c05hdk1vZGVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlbWFudGljIE9iamVjdC9hY3Rpb24gaXMgbm90IHByb3ZpZGVkXCIpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIpKSByZXR1cm47IC8vZGVib3VuY2luZyB0aGUgSUJOIG5hdmlnYXRpb25cblx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCB0cnVlKTtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgJiZcblx0XHRcdG9NZXRhTW9kZWwgJiZcblx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCkgJiZcblx0XHRcdCEobmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgPT09IFwiZXhwbGFjZVwiKVxuXHRcdCkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdF9kb05hdmlnYXRlLmJpbmQodGhpcyksXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfZG9OYXZpZ2F0ZSgpO1xuXHRcdH1cblx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZSBhdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1NlbWFudGljQXR0cmlidXRlcyBDb250ZXh0IGRhdGEgYWZ0ZXIgcmVtb3ZpbmcgYWxsIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIG9Db250ZXh0IEFjdHVhbCBjb250ZXh0IGZyb20gd2hpY2ggdGhlIHNlbWFudGljQXR0cmlidXRlcyB3ZXJlIGRlcml2ZWQuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBhdHRyaWJ1dGVzIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9Db250ZXh0OiBDb250ZXh0XG5cdCk6IHsgc2VtYW50aWNBdHRyaWJ1dGVzOiB1bmtub3duOyBwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0ge1xuXHRcdC8vIDEuIEZpbmQgYWxsIGRpc3RpbmN0IGtleXMgaW4gdGhlIG9iamVjdCBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHQvLyBTdG9yZSBtZXRhIHBhdGggZm9yIGVhY2ggb2NjdXJlbmNlIG9mIHRoZSBrZXlcblx0XHRjb25zdCBvRGlzdGluY3RLZXlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzQ29udGV4dFBhdGgpLFxuXHRcdFx0YU1ldGFQYXRoUGFydHMgPSBzTWV0YVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcblxuXHRcdGZ1bmN0aW9uIF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QoTG9va1VwT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc0xvb2tVcE9iamVjdE1ldGFQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBMb29rVXBPYmplY3QpIHtcblx0XHRcdFx0Ly8gbnVsbCBjYXNlPz9cblx0XHRcdFx0aWYgKExvb2tVcE9iamVjdFtzS2V5XSA9PT0gbnVsbCB8fCB0eXBlb2YgTG9va1VwT2JqZWN0W3NLZXldICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RLZXlzW3NLZXldKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBrZXkgaXMgZm91bmQgZm9yIHRoZSBmaXJzdCB0aW1lIHRoZW4gY3JlYXRlIGFycmF5XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHB1c2ggcGF0aCB0byBhcnJheVxuXHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0ucHVzaChzTG9va1VwT2JqZWN0TWV0YVBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIGEgbmVzdGVkIG9iamVjdCBpcyBmb3VuZFxuXHRcdFx0XHRcdGNvbnN0IG9OZXdMb29rVXBPYmplY3QgPSBMb29rVXBPYmplY3Rbc0tleV07XG5cdFx0XHRcdFx0X2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChvTmV3TG9va1VwT2JqZWN0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBgJHtzTG9va1VwT2JqZWN0TWV0YVBhdGh9LyR7c0tleX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob1NlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblxuXHRcdC8vIDIuIERldGVybWluZSBkaXN0aW5jdCBrZXkgdmFsdWUgYW5kIGFkZCBjb25mbGljdGVkIHBhdGhzIHRvIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0XHRjb25zdCBzTWFpbkVudGl0eVNldE5hbWUgPSBhTWV0YVBhdGhQYXJ0c1swXSxcblx0XHRcdHNNYWluRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c01haW5FbnRpdHlTZXROYW1lfS9Ac2FwdWkubmFtZWApLFxuXHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRsZXQgc01haW5FbnRpdHlWYWx1ZVBhdGgsIHNDdXJyZW50VmFsdWVQYXRoLCBzTGFzdFZhbHVlUGF0aDtcblx0XHRmb3IgKGNvbnN0IHNEaXN0aW5jdEtleSBpbiBvRGlzdGluY3RLZXlzKSB7XG5cdFx0XHRjb25zdCBhQ29uZmxpY3RpbmdQYXRocyA9IG9EaXN0aW5jdEtleXNbc0Rpc3RpbmN0S2V5XTtcblx0XHRcdGxldCBzV2lubmVyVmFsdWVQYXRoO1xuXHRcdFx0Ly8gRmluZCB3aW5uZXIgdmFsdWUgZm9yIGVhY2ggZGlzdGluY3Qga2V5IGluIGNhc2Ugb2YgY29uZmxpY3QgYnkgdGhlIGZvbGxvd2luZyBydWxlOlxuXG5cdFx0XHQvLyAtPiBBLiBpZiBhbnkgbWV0YSBwYXRoIGZvciBhIGRpc3RpbmN0IGtleSBpcyB0aGUgc2FtZSBhcyBtYWluIGVudGl0eSB0YWtlIHRoYXQgYXMgdGhlIHZhbHVlXG5cdFx0XHQvLyAtPiBCLiBpZiBBIGlzIG5vdCBtZXQga2VlcCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0IChzTWV0YVBhdGggPT09IHBhdGggb2YgZGlzdGluY2Uga2V5KVxuXHRcdFx0Ly8gLT4gQy4gaWYgQSwgQiBvciBDIGFyZSBub3QgbWV0IHRha2UgdGhlIGxhc3QgcGF0aCBmb3IgdmFsdWVcblx0XHRcdGlmIChhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdC8vIGNvbmZsaWN0XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGFDb25mbGljdGluZ1BhdGhzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbaV07XG5cdFx0XHRcdFx0bGV0IHNQYXRoSW5Db250ZXh0ID0gc1BhdGgucmVwbGFjZShzUGF0aCA9PT0gc01ldGFQYXRoID8gc01ldGFQYXRoIDogYCR7c01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHRcdFx0XHRzUGF0aEluQ29udGV4dCA9IChzUGF0aEluQ29udGV4dCA9PT0gXCJcIiA/IHNQYXRoSW5Db250ZXh0IDogYCR7c1BhdGhJbkNvbnRleHR9L2ApICsgc0Rpc3RpbmN0S2V5O1xuXHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBBXG5cdFx0XHRcdFx0aWYgKHNFbnRpdHlUeXBlTmFtZSA9PT0gc01haW5FbnRpdHlUeXBlTmFtZSkge1xuXHRcdFx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIEJcblx0XHRcdFx0XHRpZiAoc1BhdGggPT09IHNNZXRhUGF0aCkge1xuXHRcdFx0XHRcdFx0c0N1cnJlbnRWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIENcblx0XHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHNQYXRoSW5Db250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gYWRkIGNvbmZsaWN0ZWQgcGF0aCB0byBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGF0aCBwb2ludHMgdG8gbWFpbiBlbnRpdHkgYW5kIHByZWZpeCBhdHRyaWJ1dGUgbmFtZXMgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW1xuXHRcdFx0XHRcdFx0YCR7c01ldGFQYXRofS8ke3NQYXRoSW5Db250ZXh0fWBcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIuXCIpXG5cdFx0XHRcdFx0XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBBIHx8IEIgfHwgQ1xuXHRcdFx0XHRzV2lubmVyVmFsdWVQYXRoID0gc01haW5FbnRpdHlWYWx1ZVBhdGggfHwgc0N1cnJlbnRWYWx1ZVBhdGggfHwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNXaW5uZXJWYWx1ZVBhdGggYXMgc3RyaW5nKTtcblx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vIGNvbmZsaWN0LCBhZGQgZGlzdGluY3Qga2V5IHdpdGhvdXQgYWRkaW5nIHBhdGhzXG5cdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbMF07IC8vIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgYW5kIGhlbmNlIG5vIGNvbmZsaWN0XG5cdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdHNQYXRoSW5Db250ZXh0ID0gKHNQYXRoSW5Db250ZXh0ID09PSBcIlwiID8gc1BhdGhJbkNvbnRleHQgOiBgJHtzUGF0aEluQ29udGV4dH0vYCkgKyBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0Rpc3RpbmN0S2V5XSA9IGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIi5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIDMuIFJlbW92ZSBhbGwgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gb1NlbWFudGljQXR0cmlidXRlcykge1xuXHRcdFx0aWYgKG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGRlbGV0ZSBvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE5hdmlnYXRpb24gbW9kZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gbW9kZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldE5hdmlnYXRpb25Nb2RlKCk6IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgZm9yIG5hdmlnYXRpb24gdG8gYSBnaXZlbiBpbnRlbnQgKFNlbWFudGljT2JqZWN0LUFjdGlvbikgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgdXNpbmcgYSBkaWFsb2cgdGhhdCBzaG93cyB0aGUgY29udGV4dHMgd2hpY2ggY2Fubm90IGJlIHBhc3NlZFxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBzZXR0aW5nIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgYWRhcHRhdGlvbiBieSBhIGNvbnN1bWVyLlxuXHQgKiBUaGlzIHNldHRpbmcgYWxzbyByZW1vdmVzIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBpbnBsYWNlIG9yIGV4cGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICpcblx0ICogQHBhcmFtIHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBzQWN0aW9uICBBY3Rpb24gZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRzU2VtYW50aWNPYmplY3Q6IHN0cmluZyxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0c291cmNlPzogQ29udHJvbFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc2hvdWxkQ29udGludWUgPSB0cnVlO1xuXHRcdGlmIChzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiKSkgcmV0dXJuOyAvL2RlYm91bmNpbmcgdGhlIElCTiBuYXZpZ2F0aW9uXG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgdHJ1ZSk7XG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycz8ubm90QXBwbGljYWJsZUNvbnRleHRzICYmIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHM/Lmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlTZXQ+KGVudGl0eVNldFBhdGgpLnRhcmdldCE7XG5cdFx0XHQvLyBTaG93IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBhbmQgd2lsbCBub3QgdGhlcmVmb3JlIGJlIHByb2Nlc3NlZFxuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZUNvbnRleHRzRGlhbG9nID0gbmV3IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nKHtcblx0XHRcdFx0dGl0bGU6IFwiXCIsXG5cdFx0XHRcdGVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKSxcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzOiBtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzXG5cdFx0XHR9KTtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzO1xuXHRcdFx0c2hvdWxkQ29udGludWUgPSBhd2FpdCBub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2cub3Blbih0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdGlmIChzaG91bGRDb250aW51ZSkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZShzU2VtYW50aWNPYmplY3QsIHNBY3Rpb24sIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIsIGZhbHNlKTtcblx0fVxuXG5cdF9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLmNvbnRleHRcIik7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJTQVBfX01lc3NhZ2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXRlZCBFbnRpdHkgc2V0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBFbnRpdHkgc2V0IG5hbWVcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0Z2V0RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0ITtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHNlbnNpdGl2ZSBkYXRhIGZyb20gdGhlIHNlbWFudGljIGF0dHJpYnV0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIENvbnRleHQgZGF0YVxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIE1ldGEgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0IGluIHRoZSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0Ly8gVE8tRE8gYWRkIHVuaXQgdGVzdHMgZm9yIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHF1bml0LlxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10+KG9BdHRyaWJ1dGVzOiBULCBzTWV0YVBhdGg6IHN0cmluZyk6IFQge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KG9BdHRyaWJ1dGVzKSAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1tlbGVtZW50XSAmJiB0eXBlb2Ygb0F0dHJpYnV0ZXNbZWxlbWVudF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlc1tlbGVtZW50XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c01ldGFQYXRofS8ke2VsZW1lbnR9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbGVtZW50LmluY2x1ZGVzKFwiQG9kYXRhLnR5cGVcIikpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9kZWxldGVBZ2dyZWdhdGVzKFsuLi50cmFuc0FnZ3JlZ2F0aW9ucywgLi4uY3VzdG9tQWdncmVnYXRlc10sIGVsZW1lbnQsIG9BdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRoaXMuX2dldFByb3BlcnR5QW5ub3RhdGlvbnMoZWxlbWVudCwgc01ldGFQYXRoLCBvQXR0cmlidXRlcywgdGhpcy5fb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlBlcnNvbmFsRGF0YT8uSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5VST8uRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dCB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5BbmFseXRpY3M/Lk1lYXN1cmVcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9ucy5Db21tb24uRmllbGRDb250cm9sIGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRcdFx0XHRcdCRFbnVtTWVtYmVyPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdCRQYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgdGhpcy5faXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZXMpKVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9BdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gbmF2aWdhdGlvbiBkYXRhIGlmIGl0IGlzIGEgbWVhc3VyZS5cblx0ICpcblx0ICogQHBhcmFtIGFnZ3JlZ2F0ZXMgQXJyYXkgb2YgQWdncmVnYXRlc1xuXHQgKiBAcGFyYW0gc1Byb3AgQXR0cmlidXRlIG5hbWVcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIFNlbWFudGljQXR0cmlidXRlc1xuXHQgKi9cblx0X2RlbGV0ZUFnZ3JlZ2F0ZXMoYWdncmVnYXRlczogc3RyaW5nW10gfCB1bmRlZmluZWQsIHNQcm9wOiBzdHJpbmcsIG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRcdGlmIChhZ2dyZWdhdGVzICYmIGFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc1Byb3ApKSB7XG5cdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIC0gVGhlIHByb3BlcnR5IGFubm90YXRpb25zXG5cdCAqL1xuXHRfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhcblx0XHRzUHJvcDogc3RyaW5nLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRcdG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG9BdHRyaWJ1dGVzW3NQcm9wXSAmJiBzTWV0YVBhdGggJiYgIXNNZXRhUGF0aC5pbmNsdWRlcyhcInVuZGVmaW5lZFwiKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NNZXRhUGF0aH0vJHtzUHJvcH1gKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGNvbnN0IG9GdWxsQ29udGV4dCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KG9Db250ZXh0KTtcblx0XHRcdHJldHVybiBvRnVsbENvbnRleHQ/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFnZ3JlZ2F0ZXMgcGFydCBvZiB0aGUgRW50aXR5U2V0IG9yIEVudGl0eVR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBUaGUgYWdncmVnYXRlc1xuXHQgKi9cblx0X2dldEFnZ3JlZ2F0ZXMoXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzXG5cdCk6IHsgdHJhbnNBZ2dyZWdhdGlvbnM6IHN0cmluZ1tdOyBjdXN0b21BZ2dyZWdhdGVzOiBzdHJpbmdbXSB9IHtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5fZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGgsIG9WaWV3LCBvRGlhZ25vc3RpY3MpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRjb25zdCBpc0FuYWx5dGljc1N1cHBvcnRlZCA9IGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCk7XG5cdFx0bGV0IHRyYW5zQWdncmVnYXRpb25zOiBzdHJpbmdbXSwgY3VzdG9tQWdncmVnYXRlcztcblx0XHRpZiAoaXNBbmFseXRpY3NTdXBwb3J0ZWQpIHtcblx0XHRcdGNvbnN0IHRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cdFx0XHRpZiAodHJhbnNBZ2dyZWdhdGlvbnNQcmVwcm9jZXNzaW5nPy5sZW5ndGgpIHtcblx0XHRcdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPSB0cmFuc0FnZ3JlZ2F0aW9uc1ByZXByb2Nlc3NpbmcubWFwKCh0cmFuc0FnZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAodHJhbnNBZ2cuTmFtZSBhcyBzdHJpbmcpIHx8ICh0cmFuc0FnZyBhcyB1bmtub3duIGFzIHsgVmFsdWU6IHN0cmluZyB9KS5WYWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0XHRcdGlmIChjdXN0b21BZ2dyZWdhdGVzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlcyA9IGN1c3RvbUFnZ3JlZ2F0ZXMubWFwKChjdXN0b21BZ2dyZWdhdGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlLnF1YWxpZmllcjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRyYW5zQWdncmVnYXRpb25zID8/PSBbXTtcblx0XHRjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlcyA/IChjdXN0b21BZ2dyZWdhdGVzIGFzIHN0cmluZ1tdKSA6IFtdO1xuXHRcdHJldHVybiB7IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzIH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBjb252ZXJ0ZXJDb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc01ldGFQYXRoXG5cdCAqIEBwYXJhbSBvVmlld1xuXHQgKiBAcGFyYW0gb0RpYWdub3N0aWNzXG5cdCAqIEByZXR1cm5zIC0gQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0X2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoOiBzdHJpbmcsIG9WaWV3OiBGRVZpZXcsIG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3MpOiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0bGV0IHNFbnRpdHlTZXQgPSBvVmlld0RhdGEuZW50aXR5U2V0O1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9WaWV3RGF0YS5jb250ZXh0UGF0aDtcblx0XHRpZiAoc0NvbnRleHRQYXRoICYmICghc0VudGl0eVNldCB8fCBzRW50aXR5U2V0LmluY2x1ZGVzKFwiL1wiKSkpIHtcblx0XHRcdHNFbnRpdHlTZXQgPSBvVmlld0RhdGE/LmZ1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChzTWV0YVBhdGgsIG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIHNFbnRpdHlTZXQhLCBvRGlhZ25vc3RpY3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHBhdGgtYmFzZWQgRmllbGRDb250cm9sIGV2YWx1YXRlcyB0byBpbmFwcGxpY2FibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRmllbGRDb250cm9sUGF0aCBGaWVsZCBjb250cm9sIHBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGUgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpbmFwcGxpY2FibGVcblx0ICovXG5cdF9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoc0ZpZWxkQ29udHJvbFBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0XHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0XHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPSAhIShcblx0XHRcdFx0b0F0dHJpYnV0ZVthUGFydHNbMF1dICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgb2JqZWN0KS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPilbYVBhcnRzWzFdXSA9PT0gMFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbc0ZpZWxkQ29udHJvbFBhdGhdID09PSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gYkluYXBwbGljYWJsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmVwbGFjZSBMb2NhbCBQcm9wZXJ0aWVzIHdpdGggU2VtYW50aWMgT2JqZWN0IG1hcHBpbmdzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGZpbHRlcmJhciwgVGFibGUgYW5kIFBhZ2UgQ29udGV4dFxuXHQgKiBAcGFyYW0gdk1hcHBpbmdzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHNlbWFudGljIG9iamVjdCBtYXBwaW5nXG5cdCAqIEByZXR1cm5zIC0gTW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIExvY2FsUHJvcGVydHkgcmVwbGFjZWQgd2l0aCBTZW1hbnRpY09iamVjdFByb3BlcnRpZXMuXG5cdCAqL1xuXHRfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IG9iamVjdCB8IHN0cmluZyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG9NYXBwaW5ncykge1xuXHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0XHQoaXRlbVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgaXRlbVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0XHQoaXRlbVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0XHRpdGVtW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvbiAmJiBzTG9jYWxQcm9wZXJ0eSAhPT0gc1NlbWFudGljT2JqZWN0UHJvcGVydHkpIHtcblx0XHRcdFx0Ly9yZW1vdmUgdGhlIHNlbGVjdE9wdGlvbiB0byBiZSBvdmVyd3JpdHRlbiB0aGVuIHJlbmFtZSB0aGUgb25lIGNvbWluZyBmcm9tIHRoZSBsb2NhbCBwcm9wZXJ0eVxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW5hbWVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHksIHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdG9yZSB0aGUgZm9jdXNJbmZvcm1hdGlvbiB0byB0aGUgaGlzdG9yeSBvYmplY3QuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkoKTogdm9pZCB7XG5cdFx0bGV0IGZvY3VzSW5mbyA9IG51bGw7XG5cdFx0Y29uc3QgZm9jdXNDb250cm9sID0gRWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk7XG5cdFx0Y29uc3QgZm9jdXNDb250cm9sSWQgPSBmb2N1c0NvbnRyb2w/LmdldElkKCk7XG5cdFx0Y29uc3QgZm9jdXNNRENUYWJsZSA9IGZvY3VzQ29udHJvbCAmJiBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZm9jdXNDb250cm9sKTtcblx0XHRpZiAoZm9jdXNDb250cm9sPy5pc0EoXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdGZvY3VzSW5mbyA9IHtcblx0XHRcdFx0dHlwZTogXCJDb250cm9sXCIsXG5cdFx0XHRcdGNvbnRyb2xJZDogZm9jdXNDb250cm9sSWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChmb2N1c01EQ1RhYmxlKSB7XG5cdFx0XHRmb2N1c0luZm8gPSB7XG5cdFx0XHRcdHR5cGU6IFwiUm93XCIsXG5cdFx0XHRcdHRhYmxlSWQ6IGZvY3VzTURDVGFibGUuZ2V0SWQoKSxcblx0XHRcdFx0Y29udGV4dFBhdGhGb2N1czogZm9jdXNDb250cm9sLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgaGlzdG9yeS5zdGF0ZSwgeyBmb2N1c0luZm86IGZvY3VzSW5mbyB9KSwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGFuIE91dGJvdW5kIHByb3ZpZGVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIHNPdXRib3VuZCBJZGVudGlmaWVyIHRvIGxvY2F0aW9uIHRoZSBvdXRib3VuZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyBPcHRpb25hbCBtYXAgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnRcblx0ICogQHNpbmNlIDEuODYuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlT3V0Ym91bmQoc091dGJvdW5kOiBzdHJpbmcsIG1OYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24gfCB1bmtub3duW10+KTogdm9pZCB7XG5cdFx0dGhpcy5zdG9yZUZvY3VzSW5mb0luSGlzdG9yeSgpO1xuXHRcdGxldCBhTmF2UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb01hbmlmZXN0RW50cnkgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRvT3V0Ym91bmQgPSBvTWFuaWZlc3RFbnRyeS5jcm9zc05hdmlnYXRpb24/Lm91dGJvdW5kcz8uW3NPdXRib3VuZF07XG5cdFx0aWYgKCFvT3V0Ym91bmQpIHtcblx0XHRcdExvZy5lcnJvcihcIk91dGJvdW5kIGlzIG5vdCBkZWZpbmVkIGluIG1hbmlmZXN0ISFcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdHNBY3Rpb24gPSBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0b3V0Ym91bmRQYXJhbXMgPSBvT3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9PdXRib3VuZC5wYXJhbWV0ZXJzKTtcblxuXHRcdGlmIChtTmF2aWdhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGFOYXZQYXJhbXMgPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0bGV0IG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0XHRcdGNvbnN0IG5hdlBhcmFtZXRlclZhbHVlID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIVtrZXldO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShuYXZQYXJhbWV0ZXJWYWx1ZSkpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgbmF2UGFyYW1ldGVyVmFsdWUpIHtcblx0XHRcdFx0XHRcdG9QYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdG9QYXJhbXNba2V5XSA9IGl0ZW07XG5cdFx0XHRcdFx0XHRhTmF2UGFyYW1zPy5wdXNoKG9QYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUGFyYW1zID0ge307XG5cdFx0XHRcdFx0b1BhcmFtc1trZXldID0gbmF2UGFyYW1ldGVyVmFsdWUgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYU5hdlBhcmFtcyB8fCBvdXRib3VuZFBhcmFtcykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHtcblx0XHRcdFx0XHRkYXRhOiBhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gYXBwbHkgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvblZhcmlhbnQgY29uc2lzdGluZyBvZiBhIGZpbHRlciBiYXIsIGEgdGFibGUsIGFuZCBhIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gdk91dGJvdW5kUGFyYW1zIE91dGJvdW5kIFByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgLSBUaGUgbW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIG91dGJvdW5kIHBhcmFtZXRlcnMuXG5cdCAqL1xuXHRfYXBwbHlPdXRib3VuZFBhcmFtcyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk91dGJvdW5kUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyh2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdGNvbnN0IGFTZWxlY3RQcm9wZXJ0aWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKCFhU2VsZWN0UHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihrZXksIFwiSVwiLCBcIkVRXCIsIHZPdXRib3VuZFBhcmFtc1trZXldKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIG9PdXRib3VuZFBhcmFtcyBQYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG91dGJvdW5kcy4gT25seSBcInBsYWluXCIgaXMgc3VwcG9ydGVkXG5cdCAqIEByZXR1cm5zIFBhcmFtZXRlcnMgd2l0aCB0aGUga2V5LVZhbHVlIHBhaXJcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRPdXRib3VuZFBhcmFtcyhvT3V0Ym91bmRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeVBhcmFtZXRlcj4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcblx0XHRjb25zdCBvUGFyYW1zTWFwcGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGlmIChvT3V0Ym91bmRQYXJhbXMpIHtcblx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kUGFyYW1zKSB8fCBbXTtcblx0XHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmRQYXJhbXNba2V5XTtcblx0XHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcInBsYWluXCIpIHtcblx0XHRcdFx0XHRcdGlmICghb1BhcmFtc01hcHBpbmdba2V5XSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zTWFwcGluZ1trZXldID0gb01hcHBpbmcudmFsdWUudmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbXNNYXBwaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sbGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYXZNb2RlIE9wZW5zIGluIG5ldyB0YWIgb3Igd2luZG93IHdoZW4gc2V0IHRvICdleHBsYWNlJy5cblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCxcblx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nLFxuXHRcdG5hdk1vZGU/OiBzdHJpbmdcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb091dGJvdW5kcyA9IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKCk7XG5cdFx0Y29uc3Qgb0Rpc3BsYXlPdXRib3VuZCA9IG9PdXRib3VuZHNbc091dGJvdW5kVGFyZ2V0XTtcblx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXHRcdGlmIChvRGlzcGxheU91dGJvdW5kICYmIG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb0Rpc3BsYXlPdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdGNvbnN0IG9SZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMgPSB7XG5cdFx0XHRcdGludGVudHM6IHt9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k6IFNPUmVmcmVzaFN0cmF0ZWd5ID0ge307XG5cdFx0XHRsZXQgc01ldGFQYXRoOiBzdHJpbmc7XG5cdFx0XHRsZXQgbmF2aWdhdGlvbkNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob0NvbnRleHQpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzID0gb0NvbnRleHQ7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0WzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udGV4dC5pc0EgJiYgb0NvbnRleHQuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBbb0NvbnRleHRdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5W3NNZXRhUGF0aCFdID0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5TZWxmO1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuX2ZlRGVmYXVsdCA9IG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0NyZWF0ZVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc0tleSA9IGAke29EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3R9LSR7b0Rpc3BsYXlPdXRib3VuZC5hY3Rpb259YDtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHMhW3NLZXldID0ge307XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5pbnRlbnRzIVtzS2V5XSFbc0NyZWF0ZVBhdGhdID0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5TZWxmO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMgJiYgdGhpcy5nZXRPdXRib3VuZFBhcmFtcyhvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvRGlzcGxheU91dGJvdW5kLnNlbWFudGljT2JqZWN0LCBvRGlzcGxheU91dGJvdW5kLmFjdGlvbiwge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IG5hdmlnYXRpb25Db250ZXh0cyxcblx0XHRcdFx0cmVmcmVzaFN0cmF0ZWdpZXM6IG9SZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdG5hdk1vZGU6IG5hdk1vZGVcblx0XHRcdH0pO1xuXG5cdFx0XHQvL1RPRE86IGNoZWNrIHdoeSByZXR1cm5pbmcgYSBwcm9taXNlIGlzIHJlcXVpcmVkXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgb3V0Ym91bmQgdGFyZ2V0ICR7c091dGJvdW5kVGFyZ2V0fSBub3QgZm91bmQgaW4gY3Jvc3MgbmF2aWdhdGlvbiBkZWZpbml0aW9uIG9mIG1hbmlmZXN0YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIHNlbWFudGljIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gc2VtYW50aWNBdHRyaWJ1dGVzIFNlbWFudGljIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHBhdGhzVG9SZXRhaW4gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHJldGFpbmVkIGluIGNhc2Ugb2YgbGlua3Ncblx0ICogQHJldHVybnMgUHJvY2Vzc2VkIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0ICovXG5cdHByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHBhdGhzVG9SZXRhaW4/OiBBcnJheTxzdHJpbmc+XG5cdCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBiS2VlcE5hdlByb3BlcnRpZXMgPSB0aGlzLmtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24oKTtcblx0XHRpZiAoIWJLZWVwTmF2UHJvcGVydGllcykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGNvbnRleHQsIHBhdGhzVG9SZXRhaW4pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc2VtYW50aWNBdHRyaWJ1dGVzO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGhhcyB0byBiZSBjb25zaWRlcmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0a2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpOiBib29sZWFuIHtcblx0XHRsZXQgYktlZXBOYXZQcm9wZXJ0aWVzID0gZmFsc2U7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0XHRiS2VlcE5hdlByb3BlcnRpZXMgPSBtYW5pZmVzdD8uYXBwPy5jb25zaWRlck5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIHx8IGZhbHNlO1xuXHRcdHJldHVybiBiS2VlcE5hdlByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHNlbWFudGljIGF0dHJpYnV0ZXMgZnJvbSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXRoc1RvUmV0YWluIE5hdmlnYXRpb24gcHJvcGVydGllcyB0byBiZSByZXRhaW5lZCBpbiBjYXNlIG9mIGxpbmtzXG5cdCAqIEByZXR1cm5zIFNlbWFudGljIEF0dHJpYnV0ZXNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dDogQ29udGV4dCwgcGF0aHNUb1JldGFpbj86IEFycmF5PHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHRQYXRoKSxcblx0XHRcdHJldCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgbmF2UHJvcGVydGllcyA9IHRoaXMuZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZShtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRpZiAobmF2UHJvcGVydGllcyAmJiBuYXZQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG5hdlByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5hdlByb3BOYW1lID0gbmF2UHJvcC5uYW1lO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwYXRoc1RvUmV0YWluKSAmJiBwYXRoc1RvUmV0YWluLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBXZSBjb25zaWRlciAxLjEgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHNlbWFudGljIGxpbmtzIHRvIGJlIHBhc3NlZCBhcyBwYXJ0IG9mIGNvbnRleHRcblx0XHRcdFx0XHRpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSAmJiByZXRbbmF2UHJvcE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhyZXRbbmF2UHJvcE5hbWVdKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgJHtuYXZQcm9wTmFtZX0vJHtrZXl9YDtcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXRoc1RvUmV0YWluPy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIHJldFtuYXZQcm9wTmFtZV0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJldC5oYXNPd25Qcm9wZXJ0eShuYXZQcm9wTmFtZSkpIHtcblx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcyBmcm9tIGVudGl0eVR5cGUgdXNpbmcgbWV0YW1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gbWV0YVBhdGggTWV0YVBhdGhcblx0ICogQHJldHVybnMgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG1ldGFQYXRoOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSB7XG5cdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RW50aXR5VHlwZT4oYCR7bWV0YVBhdGh9L2ApLnRhcmdldCE7XG5cdFx0cmV0dXJuIGVudGl0eVR5cGU/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1BLDZCQUE2QixXQURsQ0MsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLFVBZWpGQyxjQUFjLEVBQUUsVUFtQ2hCQyxlQUFlLEVBQUUsVUFDakJDLGNBQWMsRUFBRSxVQTRLaEJELGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBb0hoQkQsZUFBZSxFQUFFLFVBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsVUFjckNKLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBMENoQkksZ0JBQWdCLEVBQUUsV0FhbEJMLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBeU5oQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0FrRWhCRCxlQUFlLEVBQUUsV0FDakJDLGNBQWMsRUFBRSxXQThCaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBa0ZoQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0FlaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFO0lBQUE7SUEveUJqQix5Q0FBYztNQUFBLE9BQ2IsK0JBQU87SUFDUjtJQUFDO0lBQUEsT0FFREssTUFBTSxHQUROLGtCQUNlO01BQ2QsSUFB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
|
|
763
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM0IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJfZGVjMjAiLCJfZGVjMjEiLCJfZGVjMjIiLCJfZGVjMjMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsImNhbGwiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJfb0FwcENvbXBvbmVudCIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJfb01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiX29OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiX29WaWV3IiwiZ2V0VmlldyIsIm5hdmlnYXRlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNvdXJjZSIsIl9kb05hdmlnYXRlIiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImFTZW1hbnRpY0F0dHJpYnV0ZXMiLCJvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJsZW5ndGgiLCJmb3JFYWNoIiwib05hdmlnYXRpb25Db250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QiLCJpc0EiLCJvU2VtYW50aWNBdHRyaWJ1dGVzIiwiZ2V0T2JqZWN0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMiLCJwcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9OYXZDb250ZXh0IiwicHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwicHVzaCIsInNlbWFudGljQXR0cmlidXRlcyIsImRhdGEiLCJtZXRhUGF0aCIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwib01vZGVsIiwic0VudGl0eVNldCIsImdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInVuZGVmaW5lZCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJfYXBwbHlPdXRib3VuZFBhcmFtcyIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwiX3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMiLCJzTmF2TW9kZSIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXROYXZpZ2F0aW9uTW9kZSIsIm1SZWZyZXNoU3RyYXRlZ2llcyIsInJlZnJlc2hTdHJhdGVnaWVzIiwib0ludGVybmFsTW9kZWwiLCJnZXRWaWV3RGF0YSIsInJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSIsIm1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMiLCJtZXJnZU9iamVjdHMiLCJtUmVmcmVzaFN0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50Iiwic2V0UHJvcGVydHkiLCJuYXZNb2RlIiwib25FcnJvciIsInNhcCIsInVpIiwicmVxdWlyZSIsIk1lc3NhZ2VCb3hDbGFzcyIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiRXJyb3IiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJjb252ZXJ0ZXJUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYmluZCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiIsIm9Db250ZXh0Iiwib0Rpc3RpbmN0S2V5cyIsInNDb250ZXh0UGF0aCIsImFNZXRhUGF0aFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdCIsIkxvb2tVcE9iamVjdCIsInNMb29rVXBPYmplY3RNZXRhUGF0aCIsInNLZXkiLCJvTmV3TG9va1VwT2JqZWN0Iiwic01haW5FbnRpdHlTZXROYW1lIiwic01haW5FbnRpdHlUeXBlTmFtZSIsIm9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic01haW5FbnRpdHlWYWx1ZVBhdGgiLCJzQ3VycmVudFZhbHVlUGF0aCIsInNMYXN0VmFsdWVQYXRoIiwic0Rpc3RpbmN0S2V5IiwiYUNvbmZsaWN0aW5nUGF0aHMiLCJzV2lubmVyVmFsdWVQYXRoIiwiaSIsInNQYXRoIiwic1BhdGhJbkNvbnRleHQiLCJyZXBsYWNlIiwic0VudGl0eVR5cGVOYW1lIiwic1ZhbHVlIiwiam9pbiIsImdldFByb3BlcnR5Iiwic1Byb3BlcnR5IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIl9tTmF2aWdhdGlvblBhcmFtZXRlciIsInNob3VsZENvbnRpbnVlIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0IiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2ciLCJOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsImVudGl0eVR5cGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImFwcGxpY2FibGVDb250ZXh0cyIsIm9wZW4iLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJvQXR0cmlidXRlcyIsInRyYW5zQWdncmVnYXRpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsIl9nZXRBZ2dyZWdhdGVzIiwiZ2V0RGlhZ25vc3RpY3MiLCJhUHJvcGVydGllcyIsIk9iamVjdCIsImtleXMiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJfZGVsZXRlQWdncmVnYXRlcyIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwiX2dldFByb3BlcnR5QW5ub3RhdGlvbnMiLCJfYVByb3BlcnR5QW5ub3RhdGlvbnMiLCJfYVByb3BlcnR5QW5ub3RhdGlvbnMyIiwiX2FQcm9wZXJ0eUFubm90YXRpb25zMyIsIl9hUHJvcGVydHlBbm5vdGF0aW9uczQiLCJQZXJzb25hbERhdGEiLCJJc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwiVUkiLCJFeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IiwiQW5hbHl0aWNzIiwiTWVhc3VyZSIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsIm9GaWVsZENvbnRyb2wiLCJfaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlIiwiYWdncmVnYXRlcyIsInNQcm9wIiwiX29GdWxsQ29udGV4dCR0YXJnZXRPIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRnVsbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIm9EaWFnbm9zdGljcyIsImNvbnZlcnRlckNvbnRleHQiLCJfZ2V0Q29udmVydGVyQ29udGV4dCIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJfY3VzdG9tQWdncmVnYXRlcyIsInRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwibWFwIiwidHJhbnNBZ2ciLCJOYW1lIiwiVmFsdWUiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImN1c3RvbUFnZ3JlZ2F0ZSIsInF1YWxpZmllciIsIm9WaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZnVsbENvbnRleHRQYXRoIiwiQ29tbW9uVXRpbHMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsIml0ZW0iLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5Iiwib1NlbGVjdE9wdGlvbiIsImdldFNlbGVjdE9wdGlvbiIsInJlbmFtZVNlbGVjdE9wdGlvbiIsInN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5IiwiZm9jdXNJbmZvIiwiZm9jdXNDb250cm9sIiwiRWxlbWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJmb2N1c0NvbnRyb2xJZCIsImdldElkIiwiZm9jdXNNRENUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwidHlwZSIsImNvbnRyb2xJZCIsIl9mb2N1c0NvbnRyb2wkZ2V0QmluZCIsInRhYmxlSWQiLCJjb250ZXh0UGF0aEZvY3VzIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImFzc2lnbiIsInN0YXRlIiwibmF2aWdhdGVPdXRib3VuZCIsInNPdXRib3VuZCIsIl9vTWFuaWZlc3RFbnRyeSRjcm9zcyIsIl9vTWFuaWZlc3RFbnRyeSRjcm9zczIiLCJhTmF2UGFyYW1zIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5Iiwib091dGJvdW5kIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwiTG9nIiwib3V0Ym91bmRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJrZXkiLCJvUGFyYW1zIiwibmF2UGFyYW1ldGVyVmFsdWUiLCJfYU5hdlBhcmFtcyIsIl9hTmF2UGFyYW1zMiIsImFQYXJhbWV0ZXJzIiwiYVNlbGVjdFByb3BlcnRpZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFkZFNlbGVjdE9wdGlvbiIsIm9PdXRib3VuZFBhcmFtcyIsIm9QYXJhbXNNYXBwaW5nIiwib01hcHBpbmciLCJ2YWx1ZSIsImZvcm1hdCIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib091dGJvdW5kcyIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib0Rpc3BsYXlPdXRib3VuZCIsIm9SZWZyZXNoU3RyYXRlZ2llcyIsImludGVudHMiLCJvRGVmYXVsdFJlZnJlc2hTdHJhdGVneSIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIlJlZnJlc2hTdHJhdGVneVR5cGUiLCJTZWxmIiwiX2ZlRGVmYXVsdCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dCIsInBhdGhzVG9SZXRhaW4iLCJiS2VlcE5hdlByb3BlcnRpZXMiLCJrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uIiwiZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiX21hbmlmZXN0JGFwcCIsIm1hbmlmZXN0IiwiYXBwIiwiY29uc2lkZXJOYXZpZ2F0aW9uUHJvcGVydGllc0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsInJldCIsIm5hdlByb3BlcnRpZXMiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlIiwibmF2UHJvcCIsIm5hdlByb3BOYW1lIiwibmFtZSIsInByb3BlcnR5UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9Ob3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZ1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWZyZXNoU3RyYXRlZ2llcywgU09SZWZyZXNoU3RyYXRlZ3kgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB7IFJlZnJlc2hTdHJhdGVneVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeVBhcmFtZXRlciB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vY29udmVydGVycy9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5cbi8qKlxuICogTmF2aWdhdGlvbiBQYXJhbWV0ZXJzIHVzZWQgZHVyaW5nIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKi9cblx0bmF2aWdhdGlvbkNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBTZW1hbnRpY09iamVjdE1hcHBpbmcgb3IgU2VtYW50aWNPYmplY3RNYXBwaW5nIHRoYXQgYXBwbGllcyB0byB0aGlzIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdGRlZmF1bHRSZWZyZXNoU3RyYXRlZ3k/OiBvYmplY3Q7XG5cdHJlZnJlc2hTdHJhdGVnaWVzPzogUmVmcmVzaFN0cmF0ZWdpZXM7XG5cdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50IGFuZCBmb3Igd2hpY2ggdGhlIElCTiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0YXBwbGljYWJsZUNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFNpbmdsZSBpbnN0YW5jZSBvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSwgb3IgYWx0ZXJuYXRpdmVseSBhbiBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cywgd2hpY2ggY2Fubm90IGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKiBcdGlmIGFuIGFycmF5IG9mIGNvbnRleHRzIGlzIHBhc3NlZCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YSBwYXRoIGFuZCBhY2NvcmRpbmdseSByZW1vdmUgdGhlIHNlbnNpdGl2ZSBkYXRhXG5cdCAqIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgZm9sbG93aW5nIGZvcm1hdCBpcyBleHBlY3RlZDpcblx0ICoge1xuXHQgKiBcdGRhdGE6IHtcblx0ICogXHRcdFByb2R1Y3RJRDogNzYzNCxcblx0ICogXHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKiBcdH0sXG5cdCAqIFx0bWV0YVBhdGg6IFwiL1NhbGVzT3JkZXJNYW5hZ2VcIlxuXHQgKiB9XG5cdCAqIFRoZSBtZXRhUGF0aCBpcyB1c2VkIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEuXG5cdCAqL1xuXHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdGxhYmVsPzogc3RyaW5nO1xuXHRuYXZNb2RlPzogc3RyaW5nO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICogQHNpbmNlIDEuODQuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbEludGVybmFsQmFzZWROYXZpZ2F0aW9uXCIpXG5jbGFzcyBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0cHJpdmF0ZSBfb01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdHByaXZhdGUgX29OYXZpZ2F0aW9uU2VydmljZSE6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG5cdHByaXZhdGUgX29WaWV3ITogRkVWaWV3O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHR0aGlzLl9vTWV0YU1vZGVsID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHR0aGlzLl9vVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlcyBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvbiAoU2VtYW50aWNPYmplY3QtQWN0aW9uKSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IGFmdGVyIHRoZSBhZGFwdGF0aW9uIGJ5IGEgY29uc3VtZXIuXG5cdCAqIFRoaXMgdGFrZXMgY2FyZSBvZiByZW1vdmluZyBhbnkgdGVjaG5pY2FsIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMgaWYgYW4gZXhwbGFjZSBvciBpbnBsYWNlIG5hdmlnYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG5cdCAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBhY3Rpb24gIEFjdGlvbiBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVyc10gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHNdIFVzZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnQ6XG5cdCAqICAgIGEgc2luZ2xlIGluc3RhbmNlIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9mIG9iamVjdHNcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1ldGFQYXRoIGFuZCB0byByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhXG5cdCAqXHRcdCAgSWYgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyBwYXNzZWQsIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGl4IGV4cGVjdGVkOlxuXHQgKlx0XHQgIHtcblx0ICpcdFx0XHRkYXRhOiB7XG5cdCAqXHQgXHRcdFx0UHJvZHVjdElEOiA3NjM0LFxuXHQgKlx0XHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKlx0XHRcdCB9LFxuXHQgKlx0XHRcdCBtZXRhUGF0aDogXCIvU2FsZXNPcmRlck1hbmFnZVwiXG5cdCAqICAgICAgICB9XG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nXSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFNlbWFudGljT2JqZWN0TWFwcGluZyBvciBTZW1hbnRpY09iamVjdE1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLmRlZmF1bHRSZWZyZXNoU3RyYXRlZ3ldIERlZmF1bHQgcmVmcmVzaCBzdHJhdGVneSB0byBiZSB1c2VkIGluIGNhc2Ugbm8gcmVmcmVzaCBzdHJhdGVneSBpcyBzcGVjaWZpZWQgZm9yIHRoZSBpbnRlbnQgaW4gdGhlIHZpZXcuXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMucmVmcmVzaFN0cmF0ZWdpZXNdXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXSBBZGRpdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycyBjb25maWd1cmVkIGluIHRoZSBjcm9zc0FwcE5hdmlnYXRpb24gb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHNvdXJjZSBUaGUgY29udHJvbCBvYmplY3Qgb2YgdGhlIG5hdmlnYXRpb24gc291cmNlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlKHNlbWFudGljT2JqZWN0OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBuYXZpZ2F0aW9uUGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXJzLCBzb3VyY2U/OiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgX2RvTmF2aWdhdGUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCB2TmF2aWdhdGlvbkNvbnRleHRzOiBvYmplY3QgfCBPRGF0YVY0Q29udGV4dFtdIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbmF2aWdhdGlvblBhcmFtZXRlcnMubmF2aWdhdGlvbkNvbnRleHRzO1xuXHRcdFx0Y29uc3QgYU5hdmlnYXRpb25Db250ZXh0czogdW5kZWZpbmVkIHwgKE9EYXRhVjRDb250ZXh0IHwgb2JqZWN0KVtdID1cblx0XHRcdFx0dk5hdmlnYXRpb25Db250ZXh0cyAmJiAhQXJyYXkuaXNBcnJheSh2TmF2aWdhdGlvbkNvbnRleHRzKSA/IFt2TmF2aWdhdGlvbkNvbnRleHRzXSA6IHZOYXZpZ2F0aW9uQ29udGV4dHM7XG5cdFx0XHRjb25zdCB2U2VtYW50aWNPYmplY3RNYXBwaW5nID0gbmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHR2T3V0Ym91bmRQYXJhbXMgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdG9UYXJnZXRJbmZvOiB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmc7IGFjdGlvbjogc3RyaW5nOyBwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9ID0ge1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb246IGFjdGlvblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCksXG5cdFx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0XHRpZiAoc2VtYW50aWNPYmplY3QgJiYgYWN0aW9uKSB7XG5cdFx0XHRcdGxldCBhU2VtYW50aWNBdHRyaWJ1dGVzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRcdC8vIDEuIGdldCBTZW1hbnRpY0F0dHJpYnV0ZXMgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0aWYgKGFOYXZpZ2F0aW9uQ29udGV4dHMgJiYgYU5hdmlnYXRpb25Db250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvbkNvbnRleHRzLmZvckVhY2goKG9OYXZpZ2F0aW9uQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gMS4xLmEgaWYgbmF2aWdhdGlvbiBjb250ZXh0IGlzIGluc3RhbmNlIG9mIHNhcC51aS5tb2RlLm9kYXRhLnY0LkNvbnRleHRcblx0XHRcdFx0XHRcdC8vIGVsc2UgY2hlY2sgaWYgbmF2aWdhdGlvbiBjb250ZXh0IGlzIG9mIHR5cGUgb2JqZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdFx0XHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCA9IG9OYXZpZ2F0aW9uQ29udGV4dCBhc1xuXHRcdFx0XHRcdFx0XHR8IHsgZGF0YTogdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47IG1ldGFQYXRoOiBzdHJpbmcgfVxuXHRcdFx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuaXNBICYmXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHQvLyAxLjEuYiByZW1vdmUgc2Vuc2l0aXZlIGRhdGFcblx0XHRcdFx0XHRcdFx0bGV0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IHRoaXMuX29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGFsc28gcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhIGZyb20gIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmaW5hbFNlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzID0gdGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKGZpbmFsU2VtYW50aWNBdHRyaWJ1dGVzLCBzTWV0YVBhdGgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTmF2Q29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0ZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvW1wicHJvcGVydGllc1dpdGhvdXRDb25mbGljdFwiXSA9IG9OYXZDb250ZXh0LnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMucHVzaChvTmF2Q29udGV4dC5zZW1hbnRpY0F0dHJpYnV0ZXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0IShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCAmJiBBcnJheS5pc0FycmF5KG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEpKSAmJlxuXHRcdFx0XHRcdFx0XHR0eXBlb2Ygb05hdmlnYXRpb25Db250ZXh0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gMS4xLmIgcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhIGZyb20gb2JqZWN0XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSwgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QubWV0YVBhdGgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0ICYmIEFycmF5LmlzQXJyYXkob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gb05hdmlnYXRpb25Db250ZXh0LmRhdGEgY2FuIGJlIGFycmF5IGFscmVhZHkgZXggOiBbe0N1c3RvbWVyOiBcIjEwMDAxXCJ9LCB7Q3VzdG9tZXI6IFwiMTAwOTFcIn1dXG5cdFx0XHRcdFx0XHRcdC8vIGhlbmNlIGFzc2lnbmluZyBpdCB0byB0aGUgYVNlbWFudGljQXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzID0gdGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QubWV0YVBhdGhcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAyLjEgTWVyZ2UgYmFzZSBzZWxlY3Rpb24gdmFyaWFudCBhbmQgc2FuaXRpemVkIHNlbWFudGljIGF0dHJpYnV0ZXMgaW50byBvbmUgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRpZiAoYVNlbWFudGljQXR0cmlidXRlcyAmJiBhU2VtYW50aWNBdHRyaWJ1dGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50ID0gdGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDMuIEFkZCBmaWx0ZXJDb250ZXh0VXJsIHRvIFNWIHNvIHRoZSBOYXZpZ2F0aW9uSGFuZGxlciBjYW4gcmVtb3ZlIGFueSBzZW5zaXRpdmUgZGF0YSBiYXNlZCBvbiB2aWV3IGVudGl0eVNldFxuXHRcdFx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdHNFbnRpdHlTZXQgPSB0aGlzLmdldEVudGl0eVNldCgpLFxuXHRcdFx0XHRcdHNDb250ZXh0VXJsID0gc0VudGl0eVNldCA/IHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5jb25zdHJ1Y3RDb250ZXh0VXJsKHNFbnRpdHlTZXQsIG9Nb2RlbCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChzQ29udGV4dFVybCkge1xuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgT3V0Ym91bmQgUGFyYW1ldGVycyB0byB0aGUgU1Zcblx0XHRcdFx0aWYgKHZPdXRib3VuZFBhcmFtcykge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5T3V0Ym91bmRQYXJhbXMob1NlbGVjdGlvblZhcmlhbnQsIHZPdXRib3VuZFBhcmFtcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyA0LiBnaXZlIGFuIG9wcG9ydHVuaXR5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gaW5mbHVlbmNlIHRoZSBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdG9Db250cm9sbGVyLmludGVudEJhc2VkTmF2aWdhdGlvbi5hZGFwdE5hdmlnYXRpb25Db250ZXh0KG9TZWxlY3Rpb25WYXJpYW50LCBvVGFyZ2V0SW5mbyk7XG5cblx0XHRcdFx0Ly8gNS4gQXBwbHkgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzIHRvIHRoZSBTVlxuXHRcdFx0XHRpZiAodlNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudCwgdlNlbWFudGljT2JqZWN0TWFwcGluZyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyA2LiByZW1vdmUgdGVjaG5pY2FsIHBhcmFtZXRlcnMgZnJvbSBTZWxlY3Rpb24gVmFyaWFudFxuXHRcdFx0XHR0aGlzLl9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzKG9TZWxlY3Rpb25WYXJpYW50KTtcblxuXHRcdFx0XHQvLyA3LiBjaGVjayBpZiBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kgYW5kIHBhZ2UgaXMgZWRpdGFibGVcblx0XHRcdFx0bGV0IHNOYXZNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE5hdmlnYXRpb25Nb2RlKCk7XG5cblx0XHRcdFx0Ly8gOC4gVXBkYXRpbmcgcmVmcmVzaCBzdHJhdGVneSBpbiBpbnRlcm5hbCBtb2RlbFxuXHRcdFx0XHRjb25zdCBtUmVmcmVzaFN0cmF0ZWdpZXMgPSAobmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbmF2aWdhdGlvblBhcmFtZXRlcnMucmVmcmVzaFN0cmF0ZWdpZXMpIHx8IHt9LFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsID0gb1ZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRcdFx0aWYgKChvVmlldyAmJiBvVmlldy5nZXRWaWV3RGF0YSgpKS5yZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSB8fCB7fTtcblx0XHRcdFx0XHRcdG1lcmdlT2JqZWN0cyhtUmVmcmVzaFN0cmF0ZWdpZXMsIG1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtUmVmcmVzaFN0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldFJlZnJlc2hTdHJhdGVneUZvckludGVudChtUmVmcmVzaFN0cmF0ZWdpZXMsIHNlbWFudGljT2JqZWN0LCBhY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChtUmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmVcIiwgbVJlZnJlc2hTdHJhdGVneSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gOS4gQ2hlY2sgaWYgbmF2TW9kZSBwYXJhbWV0ZXIgaXMgc2V0IGFuZCB1c2UgaXRcblx0XHRcdFx0c05hdk1vZGUgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycz8ubmF2TW9kZSA/IG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlIDogc05hdk1vZGU7XG5cblx0XHRcdFx0Ly8gMTAuIE5hdmlnYXRlIHZpYSBOYXZpZ2F0aW9uSGFuZGxlclxuXHRcdFx0XHRjb25zdCBvbkVycm9yID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL01lc3NhZ2VCb3hcIl0sIGZ1bmN0aW9uIChNZXNzYWdlQm94Q2xhc3M6IHR5cGVvZiBNZXNzYWdlQm94KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0XHRcdFx0TWVzc2FnZUJveENsYXNzLmVycm9yKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fSEVMUEVSX05BVklHQVRJT05fRVJST1JfTUVTU0FHRVwiKSwge1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZShcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCksXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdG9uRXJyb3IsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHNOYXZNb2RlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZW1hbnRpYyBPYmplY3QvYWN0aW9uIGlzIG5vdCBwcm92aWRlZFwiKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiKSkgcmV0dXJuOyAvL2RlYm91bmNpbmcgdGhlIElCTiBuYXZpZ2F0aW9uXG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgdHJ1ZSk7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiICYmXG5cdFx0XHRvTWV0YU1vZGVsICYmXG5cdFx0XHQhTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpICYmXG5cdFx0XHQhKG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID09PSBcImV4cGxhY2VcIilcblx0XHQpIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRfZG9OYXZpZ2F0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5Gb3J3YXJkTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X2RvTmF2aWdhdGUoKTtcblx0XHR9XG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByZXBhcmUgYXR0cmlidXRlcyB0byBiZSBwYXNzZWQgdG8gZXh0ZXJuYWwgbmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIG9TZW1hbnRpY0F0dHJpYnV0ZXMgQ29udGV4dCBkYXRhIGFmdGVyIHJlbW92aW5nIGFsbCBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBBY3R1YWwgY29udGV4dCBmcm9tIHdoaWNoIHRoZSBzZW1hbnRpY0F0dHJpYnV0ZXMgd2VyZSBkZXJpdmVkLlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgb2YgcHJlcGFyZWQgYXR0cmlidXRlcyBmb3IgZXh0ZXJuYWwgbmF2aWdhdGlvbiBhbmQgbm8gY29uZmxpY3QgcHJvcGVydGllcy5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvQ29udGV4dDogQ29udGV4dFxuXHQpOiB7IHNlbWFudGljQXR0cmlidXRlczogdW5rbm93bjsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9IHtcblx0XHQvLyAxLiBGaW5kIGFsbCBkaXN0aW5jdCBrZXlzIGluIHRoZSBvYmplY3QgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0Ly8gU3RvcmUgbWV0YSBwYXRoIGZvciBlYWNoIG9jY3VyZW5jZSBvZiB0aGUga2V5XG5cdFx0Y29uc3Qgb0Rpc3RpbmN0S2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0NvbnRleHRQYXRoKSxcblx0XHRcdGFNZXRhUGF0aFBhcnRzID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRmdW5jdGlvbiBfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KExvb2tVcE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNMb29rVXBPYmplY3RNZXRhUGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gTG9va1VwT2JqZWN0KSB7XG5cdFx0XHRcdC8vIG51bGwgY2FzZT8/XG5cdFx0XHRcdGlmIChMb29rVXBPYmplY3Rbc0tleV0gPT09IG51bGwgfHwgdHlwZW9mIExvb2tVcE9iamVjdFtzS2V5XSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0S2V5c1tzS2V5XSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYga2V5IGlzIGZvdW5kIGZvciB0aGUgZmlyc3QgdGltZSB0aGVuIGNyZWF0ZSBhcnJheVxuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0S2V5c1tzS2V5XSA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBwdXNoIHBhdGggdG8gYXJyYXlcblx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldLnB1c2goc0xvb2tVcE9iamVjdE1ldGFQYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiBhIG5lc3RlZCBvYmplY3QgaXMgZm91bmRcblx0XHRcdFx0XHRjb25zdCBvTmV3TG9va1VwT2JqZWN0ID0gTG9va1VwT2JqZWN0W3NLZXldO1xuXHRcdFx0XHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob05ld0xvb2tVcE9iamVjdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c0xvb2tVcE9iamVjdE1ldGFQYXRofS8ke3NLZXl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KG9TZW1hbnRpY0F0dHJpYnV0ZXMsIHNNZXRhUGF0aCk7XG5cblx0XHQvLyAyLiBEZXRlcm1pbmUgZGlzdGluY3Qga2V5IHZhbHVlIGFuZCBhZGQgY29uZmxpY3RlZCBwYXRocyB0byBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdFx0Y29uc3Qgc01haW5FbnRpdHlTZXROYW1lID0gYU1ldGFQYXRoUGFydHNbMF0sXG5cdFx0XHRzTWFpbkVudGl0eVR5cGVOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NNYWluRW50aXR5U2V0TmFtZX0vQHNhcHVpLm5hbWVgKSxcblx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0bGV0IHNNYWluRW50aXR5VmFsdWVQYXRoLCBzQ3VycmVudFZhbHVlUGF0aCwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0Zm9yIChjb25zdCBzRGlzdGluY3RLZXkgaW4gb0Rpc3RpbmN0S2V5cykge1xuXHRcdFx0Y29uc3QgYUNvbmZsaWN0aW5nUGF0aHMgPSBvRGlzdGluY3RLZXlzW3NEaXN0aW5jdEtleV07XG5cdFx0XHRsZXQgc1dpbm5lclZhbHVlUGF0aDtcblx0XHRcdC8vIEZpbmQgd2lubmVyIHZhbHVlIGZvciBlYWNoIGRpc3RpbmN0IGtleSBpbiBjYXNlIG9mIGNvbmZsaWN0IGJ5IHRoZSBmb2xsb3dpbmcgcnVsZTpcblxuXHRcdFx0Ly8gLT4gQS4gaWYgYW55IG1ldGEgcGF0aCBmb3IgYSBkaXN0aW5jdCBrZXkgaXMgdGhlIHNhbWUgYXMgbWFpbiBlbnRpdHkgdGFrZSB0aGF0IGFzIHRoZSB2YWx1ZVxuXHRcdFx0Ly8gLT4gQi4gaWYgQSBpcyBub3QgbWV0IGtlZXAgdGhlIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoc01ldGFQYXRoID09PSBwYXRoIG9mIGRpc3RpbmNlIGtleSlcblx0XHRcdC8vIC0+IEMuIGlmIEEsIEIgb3IgQyBhcmUgbm90IG1ldCB0YWtlIHRoZSBsYXN0IHBhdGggZm9yIHZhbHVlXG5cdFx0XHRpZiAoYUNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBjb25mbGljdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzW2ldO1xuXHRcdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSAoc1BhdGhJbkNvbnRleHQgPT09IFwiXCIgPyBzUGF0aEluQ29udGV4dCA6IGAke3NQYXRoSW5Db250ZXh0fS9gKSArIHNEaXN0aW5jdEtleTtcblx0XHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH0vQHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHQvLyBydWxlIEFcblxuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXHRcdFx0XHRcdGlmIChzRW50aXR5VHlwZU5hbWUgPT09IHNNYWluRW50aXR5VHlwZU5hbWUpIHtcblx0XHRcdFx0XHRcdHNNYWluRW50aXR5VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBCXG5cdFx0XHRcdFx0aWYgKHNQYXRoID09PSBzTWV0YVBhdGgpIHtcblx0XHRcdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBDXG5cdFx0XHRcdFx0c0xhc3RWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblxuXHRcdFx0XHRcdC8vIGFkZCBjb25mbGljdGVkIHBhdGggdG8gc2VtYW50aWMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhdGggcG9pbnRzIHRvIG1haW4gZW50aXR5IGFuZCBwcmVmaXggYXR0cmlidXRlIG5hbWVzIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1tcblx0XHRcdFx0XHRcdGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLlwiKVxuXHRcdFx0XHRcdF0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aEluQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQSB8fCBCIHx8IENcblx0XHRcdFx0c1dpbm5lclZhbHVlUGF0aCA9IHNNYWluRW50aXR5VmFsdWVQYXRoIHx8IHNDdXJyZW50VmFsdWVQYXRoIHx8IHNMYXN0VmFsdWVQYXRoO1xuXHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW3NEaXN0aW5jdEtleV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzV2lubmVyVmFsdWVQYXRoIGFzIHN0cmluZyk7XG5cdFx0XHRcdHNNYWluRW50aXR5VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3VycmVudFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0c0xhc3RWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBubyBjb25mbGljdCwgYWRkIGRpc3RpbmN0IGtleSB3aXRob3V0IGFkZGluZyBwYXRoc1xuXHRcdFx0XHRjb25zdCBzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzWzBdOyAvLyBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIGFuZCBoZW5jZSBubyBjb25mbGljdFxuXHRcdFx0XHRsZXQgc1BhdGhJbkNvbnRleHQgPSBzUGF0aC5yZXBsYWNlKHNQYXRoID09PSBzTWV0YVBhdGggPyBzTWV0YVBhdGggOiBgJHtzTWV0YVBhdGh9L2AsIFwiXCIpO1xuXHRcdFx0XHRzUGF0aEluQ29udGV4dCA9IChzUGF0aEluQ29udGV4dCA9PT0gXCJcIiA/IHNQYXRoSW5Db250ZXh0IDogYCR7c1BhdGhJbkNvbnRleHR9L2ApICsgc0Rpc3RpbmN0S2V5O1xuXHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW3NEaXN0aW5jdEtleV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aEluQ29udGV4dCk7XG5cdFx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NEaXN0aW5jdEtleV0gPSBgJHtzTWV0YVBhdGh9LyR7c1BhdGhJbkNvbnRleHR9YFxuXHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNWYWx1ZSAhPSBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIuXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyAzLiBSZW1vdmUgYWxsIE5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdGZvciAoY29uc3Qgc1Byb3BlcnR5IGluIG9TZW1hbnRpY0F0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV0gIT09IG51bGwgJiYgdHlwZW9mIG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRkZWxldGUgb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VtYW50aWNBdHRyaWJ1dGVzOiBvU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0cHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogb1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBOYXZpZ2F0aW9uIG1vZGUuXG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIG1vZGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXROYXZpZ2F0aW9uTW9kZSgpOiB1bmRlZmluZWQge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGZvciBuYXZpZ2F0aW9uIHRvIGEgZ2l2ZW4gaW50ZW50IChTZW1hbnRpY09iamVjdC1BY3Rpb24pIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQsIHVzaW5nIGEgZGlhbG9nIHRoYXQgc2hvd3MgdGhlIGNvbnRleHRzIHdoaWNoIGNhbm5vdCBiZSBwYXNzZWRcblx0ICogSWYgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgcHJvdmlkZWQsIHRoaXMgc2V0dGluZyBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IGFmdGVyIGFkYXB0YXRpb24gYnkgYSBjb25zdW1lci5cblx0ICogVGhpcyBzZXR0aW5nIGFsc28gcmVtb3ZlcyBhbnkgdGVjaG5pY2FsIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMgaWYgYW4gaW5wbGFjZSBvciBleHBsYWNlIG5hdmlnYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0IGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gc0FjdGlvbiAgQWN0aW9uIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVyc10gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHNvdXJjZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRzU2VtYW50aWNPYmplY3Q6IHN0cmluZyxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0c291cmNlPzogQ29udHJvbFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc2hvdWxkQ29udGludWUgPSB0cnVlO1xuXHRcdGlmIChzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiKSkgcmV0dXJuOyAvL2RlYm91bmNpbmcgdGhlIElCTiBuYXZpZ2F0aW9uXG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgdHJ1ZSk7XG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycz8ubm90QXBwbGljYWJsZUNvbnRleHRzICYmIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHM/Lmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlTZXQ+KGVudGl0eVNldFBhdGgpLnRhcmdldCE7XG5cdFx0XHQvLyBTaG93IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBhbmQgd2lsbCBub3QgdGhlcmVmb3JlIGJlIHByb2Nlc3NlZFxuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZUNvbnRleHRzRGlhbG9nID0gbmV3IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nKHtcblx0XHRcdFx0dGl0bGU6IFwiXCIsXG5cdFx0XHRcdGVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKSxcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzOiBtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzXG5cdFx0XHR9KTtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzO1xuXHRcdFx0c2hvdWxkQ29udGludWUgPSBhd2FpdCBub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2cub3Blbih0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdGlmIChzaG91bGRDb250aW51ZSkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZShzU2VtYW50aWNPYmplY3QsIHNBY3Rpb24sIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIsIGZhbHNlKTtcblx0fVxuXG5cdF9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLmNvbnRleHRcIik7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJTQVBfX01lc3NhZ2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXRlZCBFbnRpdHkgc2V0LlxuXHQgKiBAcmV0dXJucyBFbnRpdHkgc2V0IG5hbWVcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0Z2V0RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0ITtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHNlbnNpdGl2ZSBkYXRhIGZyb20gdGhlIHNlbWFudGljIGF0dHJpYnV0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGVudGl0eVNldC5cblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIENvbnRleHQgZGF0YVxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIE1ldGEgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0IGluIHRoZSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0Ly8gVE8tRE8gYWRkIHVuaXQgdGVzdHMgZm9yIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHF1bml0LlxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10+KG9BdHRyaWJ1dGVzOiBULCBzTWV0YVBhdGg6IHN0cmluZyk6IFQge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KG9BdHRyaWJ1dGVzKSAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1tlbGVtZW50XSAmJiB0eXBlb2Ygb0F0dHJpYnV0ZXNbZWxlbWVudF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlc1tlbGVtZW50XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c01ldGFQYXRofS8ke2VsZW1lbnR9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbGVtZW50LmluY2x1ZGVzKFwiQG9kYXRhLnR5cGVcIikpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9kZWxldGVBZ2dyZWdhdGVzKFsuLi50cmFuc0FnZ3JlZ2F0aW9ucywgLi4uY3VzdG9tQWdncmVnYXRlc10sIGVsZW1lbnQsIG9BdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRoaXMuX2dldFByb3BlcnR5QW5ub3RhdGlvbnMoZWxlbWVudCwgc01ldGFQYXRoLCBvQXR0cmlidXRlcywgdGhpcy5fb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlBlcnNvbmFsRGF0YT8uSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5VST8uRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dCB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5BbmFseXRpY3M/Lk1lYXN1cmVcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9ucy5Db21tb24uRmllbGRDb250cm9sIGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRcdFx0XHRcdCRFbnVtTWVtYmVyPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdCRQYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgdGhpcy5faXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZXMpKVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9BdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gbmF2aWdhdGlvbiBkYXRhIGlmIGl0IGlzIGEgbWVhc3VyZS5cblx0ICogQHBhcmFtIGFnZ3JlZ2F0ZXMgQXJyYXkgb2YgQWdncmVnYXRlc1xuXHQgKiBAcGFyYW0gc1Byb3AgQXR0cmlidXRlIG5hbWVcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIFNlbWFudGljQXR0cmlidXRlc1xuXHQgKi9cblx0X2RlbGV0ZUFnZ3JlZ2F0ZXMoYWdncmVnYXRlczogc3RyaW5nW10gfCB1bmRlZmluZWQsIHNQcm9wOiBzdHJpbmcsIG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRcdGlmIChhZ2dyZWdhdGVzICYmIGFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc1Byb3ApKSB7XG5cdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBhbm5vdGF0aW9ucy5cblx0ICogQHBhcmFtIHNQcm9wXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIC0gVGhlIHByb3BlcnR5IGFubm90YXRpb25zXG5cdCAqL1xuXHRfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhcblx0XHRzUHJvcDogc3RyaW5nLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRcdG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG9BdHRyaWJ1dGVzW3NQcm9wXSAmJiBzTWV0YVBhdGggJiYgIXNNZXRhUGF0aC5pbmNsdWRlcyhcInVuZGVmaW5lZFwiKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NNZXRhUGF0aH0vJHtzUHJvcH1gKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGNvbnN0IG9GdWxsQ29udGV4dCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KG9Db250ZXh0KTtcblx0XHRcdHJldHVybiBvRnVsbENvbnRleHQ/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFnZ3JlZ2F0ZXMgcGFydCBvZiB0aGUgRW50aXR5U2V0IG9yIEVudGl0eVR5cGUuXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBUaGUgYWdncmVnYXRlc1xuXHQgKi9cblx0X2dldEFnZ3JlZ2F0ZXMoXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzXG5cdCk6IHsgdHJhbnNBZ2dyZWdhdGlvbnM6IHN0cmluZ1tdOyBjdXN0b21BZ2dyZWdhdGVzOiBzdHJpbmdbXSB9IHtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5fZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGgsIG9WaWV3LCBvRGlhZ25vc3RpY3MpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRjb25zdCBpc0FuYWx5dGljc1N1cHBvcnRlZCA9IGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCk7XG5cdFx0bGV0IHRyYW5zQWdncmVnYXRpb25zOiBzdHJpbmdbXSwgY3VzdG9tQWdncmVnYXRlcztcblx0XHRpZiAoaXNBbmFseXRpY3NTdXBwb3J0ZWQpIHtcblx0XHRcdGNvbnN0IHRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cdFx0XHRpZiAodHJhbnNBZ2dyZWdhdGlvbnNQcmVwcm9jZXNzaW5nPy5sZW5ndGgpIHtcblx0XHRcdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPSB0cmFuc0FnZ3JlZ2F0aW9uc1ByZXByb2Nlc3NpbmcubWFwKCh0cmFuc0FnZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAodHJhbnNBZ2cuTmFtZSBhcyBzdHJpbmcpIHx8ICh0cmFuc0FnZyBhcyB1bmtub3duIGFzIHsgVmFsdWU6IHN0cmluZyB9KS5WYWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0XHRcdGlmIChjdXN0b21BZ2dyZWdhdGVzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlcyA9IGN1c3RvbUFnZ3JlZ2F0ZXMubWFwKChjdXN0b21BZ2dyZWdhdGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlLnF1YWxpZmllcjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRyYW5zQWdncmVnYXRpb25zID8/PSBbXTtcblx0XHRjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlcyA/IChjdXN0b21BZ2dyZWdhdGVzIGFzIHN0cmluZ1tdKSA6IFtdO1xuXHRcdHJldHVybiB7IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzIH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBjb252ZXJ0ZXJDb250ZXh0LlxuXHQgKiBAcGFyYW0gc01ldGFQYXRoXG5cdCAqIEBwYXJhbSBvVmlld1xuXHQgKiBAcGFyYW0gb0RpYWdub3N0aWNzXG5cdCAqIEByZXR1cm5zIC0gQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0X2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoOiBzdHJpbmcsIG9WaWV3OiBGRVZpZXcsIG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3MpOiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0bGV0IHNFbnRpdHlTZXQgPSBvVmlld0RhdGEuZW50aXR5U2V0O1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9WaWV3RGF0YS5jb250ZXh0UGF0aDtcblx0XHRpZiAoc0NvbnRleHRQYXRoICYmICghc0VudGl0eVNldCB8fCBzRW50aXR5U2V0LmluY2x1ZGVzKFwiL1wiKSkpIHtcblx0XHRcdHNFbnRpdHlTZXQgPSBvVmlld0RhdGE/LmZ1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChzTWV0YVBhdGgsIG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIHNFbnRpdHlTZXQhLCBvRGlhZ25vc3RpY3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHBhdGgtYmFzZWQgRmllbGRDb250cm9sIGV2YWx1YXRlcyB0byBpbmFwcGxpY2FibGUuXG5cdCAqIEBwYXJhbSBzRmllbGRDb250cm9sUGF0aCBGaWVsZCBjb250cm9sIHBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGUgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpbmFwcGxpY2FibGVcblx0ICovXG5cdF9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoc0ZpZWxkQ29udHJvbFBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0XHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0XHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPSAhIShcblx0XHRcdFx0b0F0dHJpYnV0ZVthUGFydHNbMF1dICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgb2JqZWN0KS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPilbYVBhcnRzWzFdXSA9PT0gMFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbc0ZpZWxkQ29udHJvbFBhdGhdID09PSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gYkluYXBwbGljYWJsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmVwbGFjZSBMb2NhbCBQcm9wZXJ0aWVzIHdpdGggU2VtYW50aWMgT2JqZWN0IG1hcHBpbmdzLlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGZpbHRlcmJhciwgVGFibGUgYW5kIFBhZ2UgQ29udGV4dFxuXHQgKiBAcGFyYW0gdk1hcHBpbmdzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHNlbWFudGljIG9iamVjdCBtYXBwaW5nXG5cdCAqIEByZXR1cm5zIC0gTW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIExvY2FsUHJvcGVydHkgcmVwbGFjZWQgd2l0aCBTZW1hbnRpY09iamVjdFByb3BlcnRpZXMuXG5cdCAqL1xuXHRfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IG9iamVjdCB8IHN0cmluZyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG9NYXBwaW5ncykge1xuXHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0XHQoaXRlbVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgaXRlbVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0XHQoaXRlbVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0XHRpdGVtW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvbiAmJiBzTG9jYWxQcm9wZXJ0eSAhPT0gc1NlbWFudGljT2JqZWN0UHJvcGVydHkpIHtcblx0XHRcdFx0Ly9yZW1vdmUgdGhlIHNlbGVjdE9wdGlvbiB0byBiZSBvdmVyd3JpdHRlbiB0aGVuIHJlbmFtZSB0aGUgb25lIGNvbWluZyBmcm9tIHRoZSBsb2NhbCBwcm9wZXJ0eVxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW5hbWVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHksIHNTZW1hbnRpY09iamVjdFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdG9yZSB0aGUgZm9jdXNJbmZvcm1hdGlvbiB0byB0aGUgaGlzdG9yeSBvYmplY3QuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkoKTogdm9pZCB7XG5cdFx0bGV0IGZvY3VzSW5mbyA9IG51bGw7XG5cdFx0Y29uc3QgZm9jdXNDb250cm9sID0gRWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk7XG5cdFx0Y29uc3QgZm9jdXNDb250cm9sSWQgPSBmb2N1c0NvbnRyb2w/LmdldElkKCk7XG5cdFx0Y29uc3QgZm9jdXNNRENUYWJsZSA9IGZvY3VzQ29udHJvbCAmJiBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZm9jdXNDb250cm9sKTtcblx0XHRpZiAoZm9jdXNDb250cm9sPy5pc0EoXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdGZvY3VzSW5mbyA9IHtcblx0XHRcdFx0dHlwZTogXCJDb250cm9sXCIsXG5cdFx0XHRcdGNvbnRyb2xJZDogZm9jdXNDb250cm9sSWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChmb2N1c01EQ1RhYmxlKSB7XG5cdFx0XHRmb2N1c0luZm8gPSB7XG5cdFx0XHRcdHR5cGU6IFwiUm93XCIsXG5cdFx0XHRcdHRhYmxlSWQ6IGZvY3VzTURDVGFibGUuZ2V0SWQoKSxcblx0XHRcdFx0Y29udGV4dFBhdGhGb2N1czogZm9jdXNDb250cm9sLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgaGlzdG9yeS5zdGF0ZSwgeyBmb2N1c0luZm86IGZvY3VzSW5mbyB9KSwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGFuIE91dGJvdW5kIHByb3ZpZGVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHBhcmFtIHNPdXRib3VuZCBJZGVudGlmaWVyIHRvIGxvY2F0aW9uIHRoZSBvdXRib3VuZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyBPcHRpb25hbCBtYXAgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnRcblx0ICogQHNpbmNlIDEuODYuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlT3V0Ym91bmQoc091dGJvdW5kOiBzdHJpbmcsIG1OYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24gfCB1bmtub3duW10+KTogdm9pZCB7XG5cdFx0dGhpcy5zdG9yZUZvY3VzSW5mb0luSGlzdG9yeSgpO1xuXHRcdGxldCBhTmF2UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb01hbmlmZXN0RW50cnkgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRvT3V0Ym91bmQgPSBvTWFuaWZlc3RFbnRyeS5jcm9zc05hdmlnYXRpb24/Lm91dGJvdW5kcz8uW3NPdXRib3VuZF07XG5cdFx0aWYgKCFvT3V0Ym91bmQpIHtcblx0XHRcdExvZy5lcnJvcihcIk91dGJvdW5kIGlzIG5vdCBkZWZpbmVkIGluIG1hbmlmZXN0ISFcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdHNBY3Rpb24gPSBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0b3V0Ym91bmRQYXJhbXMgPSBvT3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9PdXRib3VuZC5wYXJhbWV0ZXJzKTtcblxuXHRcdGlmIChtTmF2aWdhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGFOYXZQYXJhbXMgPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0bGV0IG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0XHRcdGNvbnN0IG5hdlBhcmFtZXRlclZhbHVlID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIVtrZXldO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShuYXZQYXJhbWV0ZXJWYWx1ZSkpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgbmF2UGFyYW1ldGVyVmFsdWUpIHtcblx0XHRcdFx0XHRcdG9QYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdG9QYXJhbXNba2V5XSA9IGl0ZW07XG5cdFx0XHRcdFx0XHRhTmF2UGFyYW1zPy5wdXNoKG9QYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUGFyYW1zID0ge307XG5cdFx0XHRcdFx0b1BhcmFtc1trZXldID0gbmF2UGFyYW1ldGVyVmFsdWUgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYU5hdlBhcmFtcyB8fCBvdXRib3VuZFBhcmFtcykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHtcblx0XHRcdFx0XHRkYXRhOiBhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gYXBwbHkgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvblZhcmlhbnQgY29uc2lzdGluZyBvZiBhIGZpbHRlciBiYXIsIGEgdGFibGUsIGFuZCBhIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gdk91dGJvdW5kUGFyYW1zIE91dGJvdW5kIFByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgLSBUaGUgbW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIG91dGJvdW5kIHBhcmFtZXRlcnMuXG5cdCAqL1xuXHRfYXBwbHlPdXRib3VuZFBhcmFtcyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk91dGJvdW5kUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyh2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdGNvbnN0IGFTZWxlY3RQcm9wZXJ0aWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKCFhU2VsZWN0UHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihrZXksIFwiSVwiLCBcIkVRXCIsIHZPdXRib3VuZFBhcmFtc1trZXldKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICogQHBhcmFtIG9PdXRib3VuZFBhcmFtcyBQYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG91dGJvdW5kcy4gT25seSBcInBsYWluXCIgaXMgc3VwcG9ydGVkXG5cdCAqIEByZXR1cm5zIFBhcmFtZXRlcnMgd2l0aCB0aGUga2V5LVZhbHVlIHBhaXJcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRPdXRib3VuZFBhcmFtcyhvT3V0Ym91bmRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeVBhcmFtZXRlcj4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcblx0XHRjb25zdCBvUGFyYW1zTWFwcGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGlmIChvT3V0Ym91bmRQYXJhbXMpIHtcblx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kUGFyYW1zKSB8fCBbXTtcblx0XHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmRQYXJhbXNba2V5XTtcblx0XHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcInBsYWluXCIpIHtcblx0XHRcdFx0XHRcdGlmICghb1BhcmFtc01hcHBpbmdba2V5XSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zTWFwcGluZ1trZXldID0gb01hcHBpbmcudmFsdWUudmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbXNNYXBwaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sbGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYXZNb2RlIE9wZW5zIGluIG5ldyB0YWIgb3Igd2luZG93IHdoZW4gc2V0IHRvICdleHBsYWNlJy5cblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCxcblx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nLFxuXHRcdG5hdk1vZGU/OiBzdHJpbmdcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb091dGJvdW5kcyA9IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKCk7XG5cdFx0Y29uc3Qgb0Rpc3BsYXlPdXRib3VuZCA9IG9PdXRib3VuZHNbc091dGJvdW5kVGFyZ2V0XTtcblx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXHRcdGlmIChvRGlzcGxheU91dGJvdW5kICYmIG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb0Rpc3BsYXlPdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdGNvbnN0IG9SZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMgPSB7XG5cdFx0XHRcdGludGVudHM6IHt9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k6IFNPUmVmcmVzaFN0cmF0ZWd5ID0ge307XG5cdFx0XHRsZXQgc01ldGFQYXRoOiBzdHJpbmc7XG5cdFx0XHRsZXQgbmF2aWdhdGlvbkNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob0NvbnRleHQpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzID0gb0NvbnRleHQ7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0WzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udGV4dC5pc0EgJiYgb0NvbnRleHQuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBbb0NvbnRleHRdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5W3NNZXRhUGF0aCFdID0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5TZWxmO1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuX2ZlRGVmYXVsdCA9IG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0NyZWF0ZVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc0tleSA9IGAke29EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3R9LSR7b0Rpc3BsYXlPdXRib3VuZC5hY3Rpb259YDtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHMhW3NLZXldID0ge307XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5pbnRlbnRzIVtzS2V5XSFbc0NyZWF0ZVBhdGhdID0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5TZWxmO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMgJiYgdGhpcy5nZXRPdXRib3VuZFBhcmFtcyhvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvRGlzcGxheU91dGJvdW5kLnNlbWFudGljT2JqZWN0LCBvRGlzcGxheU91dGJvdW5kLmFjdGlvbiwge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IG5hdmlnYXRpb25Db250ZXh0cyxcblx0XHRcdFx0cmVmcmVzaFN0cmF0ZWdpZXM6IG9SZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdG5hdk1vZGU6IG5hdk1vZGVcblx0XHRcdH0pO1xuXG5cdFx0XHQvL1RPRE86IGNoZWNrIHdoeSByZXR1cm5pbmcgYSBwcm9taXNlIGlzIHJlcXVpcmVkXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgb3V0Ym91bmQgdGFyZ2V0ICR7c091dGJvdW5kVGFyZ2V0fSBub3QgZm91bmQgaW4gY3Jvc3MgbmF2aWdhdGlvbiBkZWZpbml0aW9uIG9mIG1hbmlmZXN0YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIHNlbWFudGljIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gc2VtYW50aWNBdHRyaWJ1dGVzIFNlbWFudGljIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHBhdGhzVG9SZXRhaW4gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHJldGFpbmVkIGluIGNhc2Ugb2YgbGlua3Ncblx0ICogQHJldHVybnMgUHJvY2Vzc2VkIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0ICovXG5cdHByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHBhdGhzVG9SZXRhaW4/OiBBcnJheTxzdHJpbmc+XG5cdCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBiS2VlcE5hdlByb3BlcnRpZXMgPSB0aGlzLmtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24oKTtcblx0XHRpZiAoIWJLZWVwTmF2UHJvcGVydGllcykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGNvbnRleHQsIHBhdGhzVG9SZXRhaW4pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc2VtYW50aWNBdHRyaWJ1dGVzO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGhhcyB0byBiZSBjb25zaWRlcmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0a2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpOiBib29sZWFuIHtcblx0XHRsZXQgYktlZXBOYXZQcm9wZXJ0aWVzID0gZmFsc2U7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0XHRiS2VlcE5hdlByb3BlcnRpZXMgPSBtYW5pZmVzdD8uYXBwPy5jb25zaWRlck5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIHx8IGZhbHNlO1xuXHRcdHJldHVybiBiS2VlcE5hdlByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHNlbWFudGljIGF0dHJpYnV0ZXMgZnJvbSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXRoc1RvUmV0YWluIE5hdmlnYXRpb24gcHJvcGVydGllcyB0byBiZSByZXRhaW5lZCBpbiBjYXNlIG9mIGxpbmtzXG5cdCAqIEByZXR1cm5zIFNlbWFudGljIEF0dHJpYnV0ZXNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dDogQ29udGV4dCwgcGF0aHNUb1JldGFpbj86IEFycmF5PHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHRQYXRoKSxcblx0XHRcdHJldCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgbmF2UHJvcGVydGllcyA9IHRoaXMuZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZShtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRpZiAobmF2UHJvcGVydGllcyAmJiBuYXZQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG5hdlByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5hdlByb3BOYW1lID0gbmF2UHJvcC5uYW1lO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwYXRoc1RvUmV0YWluKSAmJiBwYXRoc1RvUmV0YWluLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBXZSBjb25zaWRlciAxLjEgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHNlbWFudGljIGxpbmtzIHRvIGJlIHBhc3NlZCBhcyBwYXJ0IG9mIGNvbnRleHRcblx0XHRcdFx0XHRpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSAmJiByZXRbbmF2UHJvcE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhyZXRbbmF2UHJvcE5hbWVdKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgJHtuYXZQcm9wTmFtZX0vJHtrZXl9YDtcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXRoc1RvUmV0YWluPy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIHJldFtuYXZQcm9wTmFtZV0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJldC5oYXNPd25Qcm9wZXJ0eShuYXZQcm9wTmFtZSkpIHtcblx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcyBmcm9tIGVudGl0eVR5cGUgdXNpbmcgbWV0YW1vZGVsLlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gbWV0YVBhdGggTWV0YVBhdGhcblx0ICogQHJldHVybnMgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG1ldGFQYXRoOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSB7XG5cdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RW50aXR5VHlwZT4oYCR7bWV0YVBhdGh9L2ApLnRhcmdldCE7XG5cdFx0cmV0dXJuIGVudGl0eVR5cGU/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQ0E7QUFDQTtBQUNBO0VBbUNBO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFLTUEsNkJBQTZCLElBQUFDLElB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
|