@sapui5/sap.fe.core 1.134.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft", "sap/m/CheckBox", "sap/m/MessageToast", "sap/m/Text", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/core/Messaging"], function (Log, draft, CheckBox, MessageToast, Text, Message, MessageType, Messaging) {
|
|
6
6
|
"use strict";
|
|
@@ -386,17 +386,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
386
386
|
let txt;
|
|
387
387
|
if (sKey) {
|
|
388
388
|
const descriptionPath = description && description.path;
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
if (!oLineContextData || Object.keys(oLineContextData).length === 0) {
|
|
392
|
-
// In case original selected record is draft(in UI). The Active record needs to be deleted(directDeletableContexts has active record), but data is not requested. We get data from the draft.
|
|
393
|
-
singleContext = _getOriginalSelectedRecord(mParameters, singleContext);
|
|
394
|
-
oLineContextData = singleContext.getObject();
|
|
395
|
-
}
|
|
389
|
+
// In case the selected record is draft(in UI). The Active record needs to be deleted(directDeletableContexts has active record), but data is not requested or partial. We get data from the draft.
|
|
390
|
+
const oLineContextData = _getOriginalSelectedRecord(mParameters, directDeletableContexts[0]).getObject();
|
|
396
391
|
const sKeyValue = sKey ? oLineContextData[sKey] : undefined;
|
|
397
392
|
const sDescription = descriptionPath && oLineContextData[descriptionPath];
|
|
398
393
|
if (sKeyValue) {
|
|
399
|
-
if (
|
|
394
|
+
if (description && sKey !== description.path) {
|
|
400
395
|
txt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO", [sKeyValue, sDescription], entitySetName);
|
|
401
396
|
} else {
|
|
402
397
|
txt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_ONLY", [sKeyValue], entitySetName);
|
|
@@ -487,8 +482,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
487
482
|
const lastDeletedRowIndex = contexts[contexts.length - 1].getIndex() ?? -1;
|
|
488
483
|
const draftsToDeleteBeforeActive = getDraftsToDeleteBeforeActive(options);
|
|
489
484
|
const {
|
|
490
|
-
beforeDeleteCallBack
|
|
491
|
-
parentControl
|
|
485
|
+
beforeDeleteCallBack
|
|
492
486
|
} = mParameters;
|
|
493
487
|
if (beforeDeleteCallBack) {
|
|
494
488
|
await beforeDeleteCallBack({
|
|
@@ -712,4 +706,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
712
706
|
};
|
|
713
707
|
return deleteHelper;
|
|
714
708
|
}, false);
|
|
715
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsInNpbGVudE1vZGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsInBhcmVudENvbnRyb2wiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwidGFibGUiLCJkZWxldGVkUm93c0NvdW50IiwidGFibGVSb3dzQ291bnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q291bnQiLCJvcmlnaW5hbFRhYmxlUm93c0NvdW50IiwibmV4dEZvY3VzUm93SW5kZXgiLCJmb2N1c1JvdyIsImZvY3VzIiwiZ2V0TG9ja2VkQ29udGV4dFVzZXIiLCJsb2NrZWRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJnZXRPYmplY3QiLCJnZXRMb2NrZWRPYmplY3RzVGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwicmV0VHh0IiwibG9ja2VkVXNlciIsImdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJudW1iZXJPZkRyYWZ0cyIsInRvdGFsRGVsZXRhYmxlIiwiZ2V0VW5TYXZlZENvbnRleHRVc2VyIiwidW5TYXZlZENvbnRleHQiLCJzTGFzdENoYW5nZWRCeVVzZXIiLCJnZXRVbnNhdmVkQ29udGV4dHNUZXh0IiwidW5TYXZlZENvbnRleHRzIiwiaW5mb1R4dCIsIm9wdGlvblR4dCIsIm9wdGlvbldpdGhvdXRUeHQiLCJsYXN0Q2hhbmdlZEJ5VXNlciIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJtUGFyYW1ldGVycyIsInRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwibm9uRGVsZXRhYmxlQ29udGV4dHMiLCJUZXh0IiwidGV4dCIsImdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsImNvbmNhdCIsImdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlIiwidXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJ2Q29udGV4dHMiLCJpdGVtcyIsImxvY2tlZENvbnRleHRzVHh0IiwiZGVsZXRhYmxlRHJhZnRJbmZvIiwicHVzaCIsInNpYmxpbmdJbmZvIiwidGFyZ2V0Q29udGV4dCIsIm5vbkRlbGV0YWJsZUV4aXN0cyIsIm5vbkRlbGV0YWJsZVRleHRDdHJsIiwidW5zYXZlZENoYW5nZXNUeHRzIiwiY29udHJvbCIsIkNIRUNLQk9YIiwibm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCIsIlRFWFQiLCJ1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nIiwic2V0VGV4dCIsIkNoZWNrQm94Iiwic2VsZWN0Iiwib0V2ZW50IiwiY2hlY2tCb3giLCJnZXRTb3VyY2UiLCJnZXRTZWxlY3RlZCIsIl9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkIiwiY29udGV4dFRvRGVsZXRlIiwicmV0IiwiZmluZCIsImRyYWZ0U2libGluZ1BhaXIiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJkaXJlY3REZWxldGFibGVDb250ZXh0cyIsImRlc2NyaXB0aW9uIiwib1RhYmxlIiwic0tleSIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJ0eHQiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwic2luZ2xlQ29udGV4dCIsIm9MaW5lQ29udGV4dERhdGEiLCJPYmplY3QiLCJrZXlzIiwic0tleVZhbHVlIiwic0Rlc2NyaXB0aW9uIiwiZGVsZXRhYmxlT3B0aW9uVHh0IiwidW5zaGlmdCIsImFsbERlbGV0YWJsZVR4dCIsImRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMiLCJtZXNzYWdlSGFuZGxlciIsImFwcENvbXBvbmVudCIsImVuYWJsZVN0cmljdEhhbmRsaW5nIiwiZHJhZnRFcnJvcnMiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImRlbGV0ZURyYWZ0IiwiZSIsIkxvZyIsImVycm9yIiwiZ2V0UGF0aCIsInJlbW92ZURlc2NlbmRhbnRDb250ZXh0cyIsInRlbXBDb250ZXh0cyIsInBhcmVudENvbnRleHQiLCJwYXJlbnRJbmRleCIsImNoaWxkSW5kZXgiLCJjaGlsZENvbnRleHQiLCJpc0FuY2VzdG9yT2YiLCJmaWx0ZXIiLCJkZWxldGVDb25maXJtSGFuZGxlciIsImRyYWZ0RW5hYmxlZCIsImJpbmRpbmdUeXBlIiwibWVzc2FnZUhhbmRsaW5nS2V5IiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImdldEluZGV4IiwiYmVmb3JlRGVsZXRlQ2FsbEJhY2siLCJjb250ZXh0c1RvRGVsZXRlIiwiYWxsIiwiZHJhZnRXaXRoRGVsZXRhYmxlQWN0aXZlIiwicmVzZXRDaGFuZ2VzIiwiZ2V0TW9kZWwiLCJkZWxldGUiLCJnZXRDYW5vbmljYWxQYXRoIiwiRXJyb3IiLCJyZW1vdmVIb2xkS2V5Iiwib0Vycm9yIiwiYWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlIiwic2hvd01lc3NhZ2VzIiwidW5Ib2xkS2V5IiwiTWVzc2FnaW5nIiwiYWRkTWVzc2FnZXMiLCJNZXNzYWdlIiwibWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJ0ZWNobmljYWxEZXRhaWxzIiwiZmUiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJ1cGRhdGVJbmZvRnJvbVNpYmxpbmciLCJpbmZvIiwiZGVsZXRhYmxlUGF0aCIsInN0YXRpY0RlbGV0YWJsZSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwic2libGluZ0luZm9ybWF0aW9uIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInNpYmxpbmdEZWxldGFibGUiLCJyZXF1ZXN0UHJvcGVydHkiLCJoYXNEcmFmdCIsInByb3BlcnRpZXNUb0ZldGNoIiwibG9ja2VkIiwicGF0aE1hcHBpbmciLCJkZWxldGFibGUiLCJfZSIsImdldENvbnRleHRJbmZvcyIsImlzVHJhbnNpZW50IiwiaXNJbmFjdGl2ZSIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YUNvbnRleHQiLCJpc0RyYWZ0Um9vdCIsImlzRHJhZnROb2RlIiwiaXNJbmFjdGl2ZUNvbnRleHQiLCJjb250ZXh0RGF0YSIsIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIiwiSW5Qcm9jZXNzQnlVc2VyIiwiSGFzRHJhZnRFbnRpdHkiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwiZm9yQ29udGV4dE1lbnUiLCJhcmd1bWVudHMiLCJjb250ZXh0SW5mb3MiLCJidWNrZXRzIiwia2V5IiwidmFsdWUiLCJjb250ZXh0UGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGVsZXRlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU2libGluZ0luZm9ybWF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tCb3gkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCBDaGVja0JveCBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcblxuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcblxuZW51bSBEZWxldGVPcHRpb25UeXBlcyB7XG5cdGRlbGV0YWJsZUNvbnRleHRzID0gXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIsXG5cdHVuU2F2ZWRDb250ZXh0cyA9IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIixcblx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBcImRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlXCJcbn1cblxuZW51bSBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCB7XG5cdENIRUNLQk9YID0gXCJjaGVja0JveFwiLFxuXHRURVhUID0gXCJ0ZXh0XCJcbn1cblxuZXhwb3J0IHR5cGUgRHJhZnRTaWJsaW5nUGFpciA9IHtcblx0ZHJhZnQ6IE9EYXRhVjRDb250ZXh0O1xuXHRzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlT3B0aW9uID0ge1xuXHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcztcblx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdHNlbGVjdGVkOiBib29sZWFuO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHRjb250cm9sPzogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2w7XG59O1xuXG5leHBvcnQgdHlwZSBDb250ZXh0SW5mbyA9IHtcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cdHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ7XG5cdGlzRHJhZnRSb290OiBib29sZWFuO1xuXHRpc0RyYWZ0Tm9kZTogYm9vbGVhbjtcblx0aXNBY3RpdmU6IGJvb2xlYW47XG5cdGhhc0FjdGl2ZTogYm9vbGVhbjtcblx0aGFzRHJhZnQ6IGJvb2xlYW47XG5cdGxvY2tlZDogYm9vbGVhbjtcblx0ZGVsZXRhYmxlOiBib29sZWFuO1xuXHRzaWJsaW5nRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc0luYWN0aXZlQ29udGV4dDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZSA9IHtcblx0RHJhZnRVVUlEOiBzdHJpbmc7XG5cdEluUHJvY2Vzc0J5VXNlcj86IHN0cmluZztcblx0SW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdENyZWF0ZWRCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0Q3JlYXRlZEJ5VXNlcj86IHN0cmluZztcblx0TGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0TGFzdENoYW5nZWRCeVVzZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVQYXJhbWV0ZXJzID0ge1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzPzogbnVtYmVyO1xuXHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRwYXJlbnRDb250cm9sPzogQ29udHJvbDtcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB7IHBhdGg6IHN0cmluZyB9O1xuXHRiZWZvcmVEZWxldGVDYWxsQmFjaz86IEZ1bmN0aW9uO1xuXHR1blNhdmVkQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlPzogT0RhdGFWNENvbnRleHRbXTtcblx0bG9ja2VkQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPzogRHJhZnRTaWJsaW5nUGFpcltdO1xuXHRzaWxlbnRNb2RlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZVRleHRJbmZvID0ge1xuXHRpbmZvVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25UeHQ/OiBzdHJpbmc7XG5cdG9wdGlvbldpdGhvdXRUeHQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMsXG5cdHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdGNvbnRleHRzVG9SZW1vdmU6IE9EYXRhVjRDb250ZXh0W11cbik6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCByZXRTZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdO1xuXHRjb250ZXh0c1RvUmVtb3ZlLmZvckVhY2goKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3QgaWR4ID0gcmV0U2VsZWN0ZWRDb250ZXh0cy5pbmRleE9mKGNvbnRleHQpO1xuXHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRyZXRTZWxlY3RlZENvbnRleHRzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0fSk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHR5cGUsIFtdKTtcblxuXHRyZXR1cm4gcmV0U2VsZWN0ZWRDb250ZXh0cztcbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3RlZENvbnRleHRzRm9yT3B0aW9uKGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uOiBEZWxldGVPcHRpb24pOiB2b2lkIHtcblx0bGV0IHNlbGVjdGVkQ29udGV4dHMgPSAoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpIGFzIE9EYXRhVjRDb250ZXh0W10pIHx8IFtdO1xuXG5cdGlmIChvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMpIHtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzKSB8fCBbXVxuXHRcdCk7XG5cblx0XHRjb25zdCBkcmFmdFNpYmxpbmdQYWlycyA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUpIHx8IFtdO1xuXHRcdGNvbnN0IGRyYWZ0cyA9IGRyYWZ0U2libGluZ1BhaXJzLm1hcCgoY29udGV4dFBhaXI6IERyYWZ0U2libGluZ1BhaXIpID0+IHtcblx0XHRcdHJldHVybiBjb250ZXh0UGFpci5kcmFmdDtcblx0XHR9KTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0ZHJhZnRzXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBjb250ZXh0c1RvUmVtb3ZlID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkob3B0aW9uLnR5cGUpIHx8IFtdO1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uLnR5cGUsIHNlbGVjdGVkQ29udGV4dHMsIGNvbnRleHRzVG9SZW1vdmUpO1xuXHR9XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBhZnRlckRlbGV0ZVByb2Nlc3MoXG5cdHBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLFxuXHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0bGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyXG4pOiB2b2lkIHtcblx0Y29uc3QgeyBpbnRlcm5hbE1vZGVsQ29udGV4dCwgZW50aXR5U2V0TmFtZSB9ID0gcGFyYW1ldGVycztcblx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGVsZXRlRW5hYmxlZFwiKSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG5cdFx0XHRcdC8vIGlmIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdGhlbiBpdCBpcyBkZWxldGVkLiBTbywgd2UgbmVlZCB0byByZW1vdmUgdGhlbSBmcm9tIHNlbGVjdGVkIGNvbnRleHRzLlxuXHRcdFx0XHRpZiAob3B0aW9uLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0Y2xlYXJTZWxlY3RlZENvbnRleHRzRm9yT3B0aW9uKGludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGlzIG5vdCBzZWxlY3RlZCwgdGhlbiB0aGUgZGVsZXRlIGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkLlxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XCJkZWxldGVFbmFibGVkXCIsXG5cdFx0XHRvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIW9wdGlvbi5zZWxlY3RlZClcblx0XHQpO1xuXHR9XG5cblx0aWYgKHBhcmFtZXRlcnMuc2lsZW50TW9kZSAhPT0gdHJ1ZSkge1xuXHRcdGlmIChjb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3cocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfREVMRVRFX1RPQVNUX1BMVVJBTFwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpKTtcblx0XHR9XG5cdH1cblxuXHQvLyBUaGUgTXVsdGlWYWx1ZUZpZWxkIGRvZXMgbm90IG5lZWQgcmVzZXR0aW5nIG9mIGZvY3VzIGxpa2UgdGhlIHRhYmxlLCB3aXRoIHRoZSByZXNldHRpbmcgd2UgZ2V0IGNvbnNvbGUgZXJyb3JzIHdlIGF2b2lkIHRyb3VnaCB0aGlzIGNoZWNrXG5cdGlmIChwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgIT09IFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikge1xuXHRcdGRlbGV0ZUhlbHBlci5zZXRGb2N1c0FmdGVyRGVsZXRlKHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCBhcyBUYWJsZSwgY29udGV4dHMubGVuZ3RoLCBsYXN0RGVsZXRlZFJvd0luZGV4KTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRGb2N1c0FmdGVyRGVsZXRlKHRhYmxlOiBUYWJsZSwgZGVsZXRlZFJvd3NDb3VudDogbnVtYmVyLCBsYXN0RGVsZXRlZFJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgdGFibGVSb3dzQ291bnQgPSB0YWJsZS5nZXRSb3dCaW5kaW5nPy4oKT8uZ2V0Q291bnQoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVJvd3NDb3VudCA9ICh0YWJsZVJvd3NDb3VudCA/PyAwKSArIGRlbGV0ZWRSb3dzQ291bnQ7XG5cdGxldCBuZXh0Rm9jdXNSb3dJbmRleDtcblxuXHRpZiAobGFzdERlbGV0ZWRSb3dJbmRleCAhPT0gLTEgJiYgdGFibGVSb3dzQ291bnQgIT09IHVuZGVmaW5lZCAmJiB0YWJsZVJvd3NDb3VudCA+IDApIHtcblx0XHQvL0lmIHRoZSBsYXN0IHJvdyBpcyBkZWxldGVkLCBtb3ZlIHRoZSBmb2N1cyB0byBwcmV2aW91cyByb3cgdG8gaXRcblx0XHRpZiAobGFzdERlbGV0ZWRSb3dJbmRleCA9PT0gb3JpZ2luYWxUYWJsZVJvd3NDb3VudCAtIDEpIHtcblx0XHRcdG5leHRGb2N1c1Jvd0luZGV4ID0gdGFibGVSb3dzQ291bnQgLSAxO1xuXHRcdFx0Ly9Gb3IgdGhlIG5vcm1hbCBzY2VuYXJpbywgbW92ZSB0aGUgZm9jdXMgdG8gdGhlIG5leHQgcm93XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5leHRGb2N1c1Jvd0luZGV4ID0gbGFzdERlbGV0ZWRSb3dJbmRleCAtIGRlbGV0ZWRSb3dzQ291bnQgKyAxO1xuXHRcdH1cblx0XHRhd2FpdCB0YWJsZS5mb2N1c1JvdyhuZXh0Rm9jdXNSb3dJbmRleCwgZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciB6ZXJvIHJvd3Mgb3IgZGVmYXVsdCBjYXNlLCBtb3ZlIGZvY3VzIHRvIHRhYmxlXG5cdFx0dGFibGUuZm9jdXMoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gbG9ja2VkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0cmV0dXJuIChkcmFmdEFkbWluRGF0YSAmJiBkcmFmdEFkbWluRGF0YVtcIkluUHJvY2Vzc0J5VXNlclwiXSkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkT2JqZWN0c1RleHQocmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBudW1iZXIsIGxvY2tlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogc3RyaW5nIHtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBsb2NrZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHQvL29ubHkgb25lIHVuc2F2ZWQgb2JqZWN0XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsIFtsb2NrZWRVc2VyXSk7XG5cdH0gZWxzZSBpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID09IDEpIHtcblx0XHRjb25zdCBsb2NrZWRVc2VyID0gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dHNbMF0pO1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfT05FX09CSkVDVF9MT0NLRURcIiwgW1xuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0bG9ja2VkVXNlclxuXHRcdF0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX0xPQ0tFRFwiLCBbXG5cdFx0XHRsb2NrZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcblx0XHRdKTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQocmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZEcmFmdHM6IG51bWJlciwgdG90YWxEZWxldGFibGU6IG51bWJlcik6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmICh0b3RhbERlbGV0YWJsZSA9PT0gbnVtYmVyT2ZEcmFmdHMpIHtcblx0XHRpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX09OTFlfRFJBRlRfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX09OTFlfRFJBRlRTX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChudW1iZXJPZkRyYWZ0cyA9PT0gMSkge1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IHVuU2F2ZWRDb250ZXh0LmdldE9iamVjdCgpW1wiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIl0gYXMgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlO1xuXHRsZXQgc0xhc3RDaGFuZ2VkQnlVc2VyID0gXCJcIjtcblx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0c0xhc3RDaGFuZ2VkQnlVc2VyID0gZHJhZnRBZG1pbkRhdGFbXCJMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCJdIHx8IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJcIl0gfHwgXCJcIjtcblx0fVxuXG5cdHJldHVybiBzTGFzdENoYW5nZWRCeVVzZXI7XG59XG5cbmZ1bmN0aW9uIGdldFVuc2F2ZWRDb250ZXh0c1RleHQoXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLFxuXHR1blNhdmVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXJcbik6IERlbGV0ZVRleHRJbmZvIHtcblx0bGV0IGluZm9UeHQgPSBcIlwiLFxuXHRcdG9wdGlvblR4dCA9IFwiXCIsXG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IGZhbHNlO1xuXHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSAxICYmIHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHQvL29ubHkgb25lIHVuc2F2ZWQgb2JqZWN0IGFyZSBzZWxlY3RlZFxuXHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTXCIsIFtsYXN0Q2hhbmdlZEJ5VXNlcl0pO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gdW5TYXZlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vb25seSBtdWx0aXBsZSB1bnNhdmVkIG9iamVjdHMgYXJlIHNlbGVjdGVkXG5cdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTX01VTFRJUExFX09CSkVDVFNcIik7XG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAodG90YWxEZWxldGFibGUgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGFsbCBkZWxldGFibGUgYXJlIHVuc2F2ZWQgYnkgb3RoZXJzXG5cdFx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfU0lOR1VMQVJcIiwgW1xuXHRcdFx0XHRsYXN0Q2hhbmdlZEJ5VXNlclxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQU5EX0ZFV19PQkpFQ1RTX0xPQ0tFRF9QTFVSQUxcIik7XG5cdFx0fVxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID4gdW5TYXZlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIG5vbi1kZWxldGFibGUvbG9ja2VkIGV4aXN0cywgZGVsZXRhYmxlIGluY2x1ZGUgdW5zYXZlZCBhbmQgb3RoZXIgdHlwZXMuXG5cdFx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfU0lOR1VMQVJcIiwgW1xuXHRcdFx0XHRsYXN0Q2hhbmdlZEJ5VXNlclxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfVU5TQVZFRF9QTFVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgaW5mb1R4dCwgb3B0aW9uVHh0LCBvcHRpb25XaXRob3V0VHh0IH07XG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlbGV0YWJsZVRleHQoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IFRleHQgfCB1bmRlZmluZWQge1xuXHRjb25zdCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgZW50aXR5U2V0TmFtZSwgbG9ja2VkQ29udGV4dHMgPSBbXSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IFtdIH0gPSBtUGFyYW1ldGVycztcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPVxuXHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyEgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxOdW1EZWxldGFibGVDb250ZXh0cyAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoKTtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKFxuXHRcdG5vbkRlbGV0YWJsZUNvbnRleHRzID4gMCAmJlxuXHRcdCh0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzID09PSAwIHx8IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID09PSB0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzKVxuXHQpIHtcblx0XHQvLyAxLiBOb25lIG9mIHRoZSBjY29udGV4dHMgYXJlIGRlbGV0YWJsZVxuXHRcdC8vIDIuIE9ubHkgZHJhZnRzIG9mIG5vbiBkZWxldGFibGUgY29udGV4dHMgZXhpc3QuXG5cdFx0aWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIExvY2tlZCBjb250ZXh0cyBleGlzdFxuXHRcdFx0aWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1NJTkdVTEFSXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9BTExfUkVNQUlOSU5HX05PTl9ERUxFVEFCTEVfUExVUkFMXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPT09IDEpIHtcblx0XHRcdC8vIE9ubHkgcHVyZSBub24tZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0IHNpbmdsZVxuXHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfU0lOR0xFX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBtdWx0aXBsZVxuXHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfTVVMVElQTEVfQU5EX0FMTF9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgc2luZ2xlXG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W251bWJlck9mU2VsZWN0ZWRDb250ZXh0c10sXG5cdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0KTtcblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA+IDEpIHtcblx0XHQvLyBkZWxldGFibGUgYW5kIG5vbi1kZWxldGFibGUgZXhpc3RzIHRvZ2V0aGVyLCBtdWx0aXBsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRbbm9uRGVsZXRhYmxlQ29udGV4dHMsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c10sXG5cdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQgPyBuZXcgVGV4dCh7IHRleHQ6IHJldFR4dCB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSwgb3B0aW9uczogRGVsZXRlT3B0aW9uW10pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0cmV0dXJuIG9wdGlvbnMucmVkdWNlKChyZXN1bHQsIG9wdGlvbikgPT4ge1xuXHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnR5cGUgIT09IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID8gcmVzdWx0LmNvbmNhdChvcHRpb24uY29udGV4dHMpIDogcmVzdWx0O1xuXHR9LCBjb250ZXh0cyk7XG59XG5cbmZ1bmN0aW9uIGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlID09PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdHZDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0dG90YWxEZWxldGFibGU6IG51bWJlcixcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0aXRlbXM6IENvbnRyb2xbXSxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW11cbik6IHZvaWQge1xuXHRsZXQgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgfSA9XG5cdFx0bVBhcmFtZXRlcnM7XG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHR1blNhdmVkQ29udGV4dHMgPz89IFtdO1xuXHRsb2NrZWRDb250ZXh0cyA/Pz0gW107XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPz89IDA7XG5cdGxldCBsb2NrZWRDb250ZXh0c1R4dCA9IFwiXCI7XG5cblx0Ly8gZHJhZnRzIHdpdGggYWN0aXZlXG5cdGlmIChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZTogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUuZm9yRWFjaCgoZGVsZXRhYmxlRHJhZnRJbmZvOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHQvLyBJbiBlaXRoZXIgY2FzZXMsIGlmIGFuIG93biBkcmFmdCBpcyBsb2NrZWQgb3Igbm90IHRoZSBkcmFmdCBuZWVkcyB0byBiZSBkaXNjYXJkZWQgYmVmb3JlIGRlbGV0aW5nIGFjdGl2ZSByZWNvcmQuXG5cdFx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5wdXNoKGRlbGV0YWJsZURyYWZ0SW5mby5kcmFmdCk7XG5cdFx0XHR2Q29udGV4dHMucHVzaChkZWxldGFibGVEcmFmdEluZm8uc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCk7XG5cdFx0fSk7XG5cdFx0aWYgKGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRjb250ZXh0czogZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBpdGVtcyBsb2NrZWQgbXNnXG5cdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0bG9ja2VkQ29udGV4dHNUeHQgPSBkZWxldGVIZWxwZXIuZ2V0TG9ja2VkT2JqZWN0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBsb2NrZWRDb250ZXh0cykgfHwgXCJcIjtcblx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogbG9ja2VkQ29udGV4dHNUeHQgfSkpO1xuXHR9XG5cblx0Ly8gbm9uIGRlbGV0YWJsZSBtc2dcblx0Y29uc3Qgbm9uRGVsZXRhYmxlRXhpc3RzID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICE9IHRvdGFsRGVsZXRhYmxlIC0gZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggKyBsb2NrZWRDb250ZXh0cy5sZW5ndGg7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZVRleHRDdHJsID0gbm9uRGVsZXRhYmxlRXhpc3RzICYmIGRlbGV0ZUhlbHBlci5nZXROb25EZWxldGFibGVUZXh0KG1QYXJhbWV0ZXJzLCB0b3RhbERlbGV0YWJsZSwgcmVzb3VyY2VNb2RlbCk7XG5cdGlmIChub25EZWxldGFibGVUZXh0Q3RybCkge1xuXHRcdGl0ZW1zLnB1c2gobm9uRGVsZXRhYmxlVGV4dEN0cmwpO1xuXHR9XG5cblx0Ly8gb3B0aW9uOiB1bnNhdmVkIGNoYW5nZXMgYnkgb3RoZXJzXG5cdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IHVuc2F2ZWRDaGFuZ2VzVHh0cyA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0VW5zYXZlZENvbnRleHRzVGV4dChyZXNvdXJjZU1vZGVsLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIHVuU2F2ZWRDb250ZXh0cywgdG90YWxEZWxldGFibGUpIHx8IHt9O1xuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCkge1xuXHRcdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5pbmZvVHh0IH0pKTtcblx0XHR9XG5cdFx0aWYgKHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQgfHwgdW5zYXZlZENoYW5nZXNUeHRzLm9wdGlvbldpdGhvdXRUeHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLnVuU2F2ZWRDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IHVuU2F2ZWRDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogdW5zYXZlZENoYW5nZXNUeHRzLm9wdGlvblR4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLkNIRUNLQk9YXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBvcHRpb246IGRyYWZ0cyB3aXRoIGFjdGl2ZSBub3QgZGVsZXRhYmxlXG5cdGlmIChkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0ID1cblx0XHRcdGRlbGV0ZUhlbHBlci5nZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWwsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoLCB0b3RhbERlbGV0YWJsZSkgfHwgXCJcIjtcblx0XHRpZiAobm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdHRleHQ6IG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiB0b3RhbERlbGV0YWJsZSA+IDAgPyBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWCA6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLCBpdGVtczogQ29udHJvbFtdKTogdm9pZCB7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIFNpbmdsZSBvcHRpb24gZG9lc24ndCBuZWVkIGNoZWNrQm94XG5cdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9uc1swXTtcblx0XHRpZiAob3B0aW9uLnRleHQpIHtcblx0XHRcdGNvbnN0IHRleHQgPSBuZXcgVGV4dCgpO1xuXHRcdFx0dGV4dC5zZXRUZXh0KG9wdGlvbi50ZXh0KTtcblx0XHRcdGl0ZW1zLnB1c2godGV4dCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wdGlvbnMubGVuZ3RoID4gMSkge1xuXHRcdC8vIE11bHRpcGxlIE9wdGlvbnNcblxuXHRcdC8vIFRleHRzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcInRleHRcIiAmJiBvcHRpb24udGV4dCkge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcblx0XHRcdFx0dGV4dC5zZXRUZXh0KG9wdGlvbi50ZXh0KTtcblx0XHRcdFx0aXRlbXMucHVzaCh0ZXh0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvLyBDaGVja0JveHNcblx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbjogRGVsZXRlT3B0aW9uKSA9PiB7XG5cdFx0XHRpZiAob3B0aW9uLmNvbnRyb2wgPT09IFwiY2hlY2tCb3hcIiAmJiBvcHRpb24udGV4dCkge1xuXHRcdFx0XHRpdGVtcy5wdXNoKFxuXHRcdFx0XHRcdG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHR0ZXh0OiBvcHRpb24udGV4dCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2VsZWN0OiBmdW5jdGlvbiAob0V2ZW50OiBDaGVja0JveCRTZWxlY3RFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGVja0JveCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBjaGVja0JveC5nZXRTZWxlY3RlZCgpO1xuXHRcdFx0XHRcdFx0XHRvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcmlnaW5hbCByZWNvcmQgc2VsZWN0ZWQgb24gdGhlIFVJLlxuICpcbiAqIEluIHRoZSBjYXNlIHRoZSBjb250ZXh0IHRvIGRlbGV0ZSBpcyBhbiBhY3RpdmUgcmVjb3JkIGJ1dCB0aGUgc2VsZWN0ZWQgY29udGV4dCBpcyBhIGRyYWZ0IHJlY29yZC5cbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBEZWxldGUgcGFyYW1ldGVycyBhbmQgaW5mb3JtYXRpb24gb2Ygc2VsZWN0ZWQgY29udGV4dHMuXG4gKiBAcGFyYW0gY29udGV4dFRvRGVsZXRlIE9EYXRhVjRDb250ZXh0IHRvIGNoZWNrLlxuICogQHJldHVybnMgT0RhdGFWNENvbnRleHQgZm9yIGRlbGV0ZS5cbiAqL1xuZnVuY3Rpb24gX2dldE9yaWdpbmFsU2VsZWN0ZWRSZWNvcmQobVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsIGNvbnRleHRUb0RlbGV0ZTogT0RhdGFWNENvbnRleHQpOiBPRGF0YVY0Q29udGV4dCB7XG5cdGNvbnN0IHsgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHJldCA9IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/LmZpbmQoKGRyYWZ0U2libGluZ1BhaXIpID0+IGRyYWZ0U2libGluZ1BhaXIuc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCA9PT0gY29udGV4dFRvRGVsZXRlKTtcblx0cmV0dXJuIHJldD8uZHJhZnQgPyByZXQuZHJhZnQgOiBjb250ZXh0VG9EZWxldGU7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwb3NzaWJsZSBvcHRpb25zIGZvciBkZWxldGlvbiBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVsZXRlIHBhcmFtZXRlcnMgYW5kIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIGRpcmVjdERlbGV0YWJsZUNvbnRleHRzIENvbnRleHRzIHRoYXQgY2FuIGJlIGRlbGV0YWJsZSBkaXJlY3RseS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsLlxuICogQHJldHVybnMgT3B0aW9ucyB0aGF0IGFyZSBwb3NzaWJsZSBmb3Igc2VsZWN0ZWQgcmVjb3Jkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzKFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0ZGlyZWN0RGVsZXRhYmxlQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IERlbGV0ZU9wdGlvbltdIHtcblx0bGV0IHsgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBsb2NrZWRDb250ZXh0cywgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdW5TYXZlZENvbnRleHRzIH0gPSBtUGFyYW1ldGVycztcblx0Y29uc3QgeyBlbnRpdHlTZXROYW1lLCBwYXJlbnRDb250cm9sLCBkZXNjcmlwdGlvbiB9ID0gbVBhcmFtZXRlcnM7XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHR1blNhdmVkQ29udGV4dHMgPz89IFtdO1xuXHRsb2NrZWRDb250ZXh0cyA/Pz0gW107XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPz89IDA7XG5cdGNvbnN0IHRvdGFsRGVsZXRhYmxlID0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoICsgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggKyB1blNhdmVkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVDb250ZXh0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAtIChsb2NrZWRDb250ZXh0cy5sZW5ndGggKyB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoKTtcblx0Y29uc3Qgb3B0aW9uczogRGVsZXRlT3B0aW9uW10gPSBbXTtcblxuXHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSAxICYmIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gc2luZ2xlIGRlbGV0YWJsZSBjb250ZXh0XG5cdFx0Y29uc3Qgb1RhYmxlID0gcGFyZW50Q29udHJvbCBhcyBUYWJsZTtcblx0XHRjb25zdCBzS2V5ID0gb1RhYmxlICYmICgob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nKTtcblx0XHRsZXQgdHh0O1xuXHRcdGlmIChzS2V5KSB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBkZXNjcmlwdGlvbiAmJiAoZGVzY3JpcHRpb24gYXMgeyBwYXRoPzogc3RyaW5nIH0pLnBhdGg7XG5cdFx0XHRsZXQgc2luZ2xlQ29udGV4dCA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzWzBdO1xuXHRcdFx0bGV0IG9MaW5lQ29udGV4dERhdGEgPSBzaW5nbGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0aWYgKCFvTGluZUNvbnRleHREYXRhIHx8IE9iamVjdC5rZXlzKG9MaW5lQ29udGV4dERhdGEpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9yaWdpbmFsIHNlbGVjdGVkIHJlY29yZCBpcyBkcmFmdChpbiBVSSkuIFRoZSBBY3RpdmUgcmVjb3JkIG5lZWRzIHRvIGJlIGRlbGV0ZWQoZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMgaGFzIGFjdGl2ZSByZWNvcmQpLCBidXQgZGF0YSBpcyBub3QgcmVxdWVzdGVkLiBXZSBnZXQgZGF0YSBmcm9tIHRoZSBkcmFmdC5cblx0XHRcdFx0c2luZ2xlQ29udGV4dCA9IF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzLCBzaW5nbGVDb250ZXh0KTtcblx0XHRcdFx0b0xpbmVDb250ZXh0RGF0YSA9IHNpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzS2V5VmFsdWUgPSBzS2V5ID8gb0xpbmVDb250ZXh0RGF0YVtzS2V5XSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uUGF0aCAmJiBvTGluZUNvbnRleHREYXRhW2Rlc2NyaXB0aW9uUGF0aF07XG5cdFx0XHRpZiAoc0tleVZhbHVlKSB7XG5cdFx0XHRcdGlmIChzRGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24gJiYgc0tleSAhPT0gKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoKSB7XG5cdFx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9cIixcblx0XHRcdFx0XHRcdFtzS2V5VmFsdWUsIHNEZXNjcmlwdGlvbl0sXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX09OTFlcIiwgW3NLZXlWYWx1ZV0sIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKTtcblx0XHR9XG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0dGV4dDogdHh0LFxuXHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dW5TYXZlZENvbnRleHRzLmxlbmd0aCAhPT0gdG90YWxEZWxldGFibGUgJiZcblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiAwICYmXG5cdFx0KGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCA+IDAgfHwgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPiAwICYmIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkpXG5cdCkge1xuXHRcdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggJiYgbm9uRGVsZXRhYmxlQ29udGV4dHMgKyBsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBvdGhlciB0eXBlcyBleGlzdHMgd2l0aCBwdXJlIGRlbGV0YWJsZSBvbmVzXG5cdFx0XHRsZXQgZGVsZXRhYmxlT3B0aW9uVHh0ID0gXCJcIjtcblx0XHRcdGlmICh0b3RhbERlbGV0YWJsZSA9PT0gMSkge1xuXHRcdFx0XHRkZWxldGFibGVPcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9QTFVSQUxfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRvcHRpb25zLnVuc2hpZnQoe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBkZWxldGFibGVPcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb25seSBkZWxldGFibGVcblx0XHRcdGNvbnN0IGFsbERlbGV0YWJsZVR4dCA9XG5cdFx0XHRcdHRvdGFsRGVsZXRhYmxlID09PSAxXG5cdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBhbGxEZWxldGFibGVUeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyhcblx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10sXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGVuYWJsZVN0cmljdEhhbmRsaW5nOiBib29sZWFuXG4pOiBQcm9taXNlPHVua25vd25bXT4ge1xuXHRjb25zdCBkcmFmdEVycm9yczogdW5rbm93bltdID0gW107XG5cdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5tYXAoYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZHJhZnQuZGVsZXRlRHJhZnQoY29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogY29yZSA6IERlbGV0ZUhlbHBlciA6IEVycm9yIHdoaWxlIGRpc2NhcmRpbmcgZHJhZnQgd2l0aCBwYXRoIDogJHtjb250ZXh0LmdldFBhdGgoKX1gKTtcblx0XHRcdFx0ZHJhZnRFcnJvcnMucHVzaChlKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpO1xuXHRyZXR1cm4gZHJhZnRFcnJvcnM7XG59XG5cbi8qKlxuICogSW4gY2FzZSBvZiBhIHRyZWUgdGFibGUsIHdlIHNoYWxsIG5vdCBkZWxldGUgYSBjb250ZXh0IGlmIG9uZSBpZiBpdHMgYW5jZXN0b3JzIGlzIGFsc28gdG8gYmUgZGVsZXRlZC5cbiAqIFRoaXMgZnVuY3Rpb25zIGZpbHRlcnMgb3V0IHN1Y2ggY29udGV4dHMuXG4gKiBAcGFyYW0gY29udGV4dHNcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXJlZCBjb250ZXh0c1xuICovXG5mdW5jdGlvbiByZW1vdmVEZXNjZW5kYW50Q29udGV4dHMoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0Y29uc3QgdGVtcENvbnRleHRzOiAoT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpW10gPSBbLi4uY29udGV4dHNdO1xuXHQvLyBGaWx0ZXIgb3V0IGNvbnRleHRzIHdob3NlIGFuY2VzdG9yIGlzIGFsc28gZGVsZXRlZCwgYXMgdGhleSB3aWxsIGJlIGRlbGV0ZWQgd2l0aCB0aGVpciBhbmNlc3RvclxuXHR0ZW1wQ29udGV4dHMuZm9yRWFjaCgocGFyZW50Q29udGV4dCwgcGFyZW50SW5kZXgpID0+IHtcblx0XHRpZiAocGFyZW50Q29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgY2hpbGRJbmRleCA9IHBhcmVudEluZGV4ICsgMTsgY2hpbGRJbmRleCA8IHRlbXBDb250ZXh0cy5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdFx0Y29uc3QgY2hpbGRDb250ZXh0ID0gdGVtcENvbnRleHRzW2NoaWxkSW5kZXhdO1xuXHRcdFx0aWYgKGNoaWxkQ29udGV4dCAmJiBwYXJlbnRDb250ZXh0LmlzQW5jZXN0b3JPZihjaGlsZENvbnRleHQpKSB7XG5cdFx0XHRcdHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0ZW1wQ29udGV4dHMuZmlsdGVyKChjb250ZXh0KSA9PiBjb250ZXh0ICE9PSB1bmRlZmluZWQpIGFzIE9EYXRhVjRDb250ZXh0W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvbmZpcm1IYW5kbGVyKFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGRyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0YmluZGluZ1R5cGU/OiBcIlRyZWVcIiB8IFwiQW5hbHl0aWNhbFwiXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXHRsZXQgY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0dHJ5IHtcblx0XHRjb250ZXh0cyA9IGRlbGV0ZUhlbHBlci5nZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0KFtdLCBvcHRpb25zKTtcblx0XHRjb25zdCBsYXN0RGVsZXRlZFJvd0luZGV4ID0gY29udGV4dHNbY29udGV4dHMubGVuZ3RoIC0gMV0uZ2V0SW5kZXgoKSA/PyAtMTtcblx0XHRjb25zdCBkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA9IGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgeyBiZWZvcmVEZWxldGVDYWxsQmFjaywgcGFyZW50Q29udHJvbCB9ID0gbVBhcmFtZXRlcnM7XG5cdFx0aWYgKGJlZm9yZURlbGV0ZUNhbGxCYWNrKSB7XG5cdFx0XHRhd2FpdCBiZWZvcmVEZWxldGVDYWxsQmFjayh7IGNvbnRleHRzOiBjb250ZXh0cyB9KTtcblx0XHR9XG5cblx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBlbmFibGVTdHJpY3RIYW5kbGluZyA9IGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdGNvbnN0IGRyYWZ0RXJyb3JzOiB1bmtub3duW10gPSBhd2FpdCBkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzKFxuXHRcdFx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0ZW5hYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdCk7XG5cblx0XHRcdGxldCBjb250ZXh0c1RvRGVsZXRlID0gY29udGV4dHM7XG5cdFx0XHRpZiAoYmluZGluZ1R5cGUgPT09IFwiVHJlZVwiKSB7XG5cdFx0XHRcdGNvbnRleHRzVG9EZWxldGUgPSByZW1vdmVEZXNjZW5kYW50Q29udGV4dHMoY29udGV4dHMpO1xuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0Y29udGV4dHNUb0RlbGV0ZS5tYXAoYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRleHQgdG8gZGVsZXRlIGlzIGEgZHJhZnQgKGkuZS4gYWN1dGFsbHkgd2UganVzdCB3bmF0IHRvIGRpc2NhcmQpLCB3ZSBzaG91bGQgdXNlIGRyYWZ0LmRlbGV0ZURyYWZ0IGluIG9yZGVyIHRvIHVzZSBhIGRpc2NhcmQgYWN0aW9uIGlmIGRlZmluZWRcblx0XHRcdFx0XHQvLyBIb3dldmVyLCBkcmFmdC5kZWxldGVEcmFmdCB1c2VzIGdldFByb3BlcnR5LCB3aGljaCByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgY29udGV4dCBpcyBub3QgcmVhZCBmcm9tIHRoZSBiYWNrZW5kLlxuXHRcdFx0XHRcdC8vIFRoaXMgY2FuIGJlIHRoZSBjYXNlLCBpZiB3ZSBoYXZlIHJldHJpZXZlZCB0aGlzIGNvbnRleHQgdmlhIHRoZSBzaWJsaW5nIChlLmcuIHdoZW4gYSBkcmFmdCBleGlzdGVkIGFuZCB3ZSB3YW50IHRvIGRlbGV0ZSBib3RoIC0gaW4gdGhhdCBjYXNlXG5cdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhbHJlYWR5IGRpc2NhcmRlZCB0aGUgZHJhZnQgYWJvdmUsIGFuZCBub3cgbmVlZCB0byBkZWxldGUgdGhlIGFjdGl2ZSBvbmUpLiBUbyBpZGVudGlmeSB0aGlzIHNpdHVhdGlvbiwgd2UgbXVzdCBub3QgdXNlIGdldFByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gKGFzIHRoZSBjb250ZXh0IGlzIG5vdCByZWFkKSwgYnV0IGNoZWNrIHRoZSBzYW1lIGluIHRoZSBtUGFyYW1ldGVycy5cblx0XHRcdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGUgY29udGV4dC4gQnV0IHdlIHNob3VsZCBub3QgdXNlIGNvbnRleHQuZGVsZXRlIChhbHNvIHVwZGF0aW5nIGJpbmRpbmdzLCB3aGljaCBmYWlscyBpbiB0aGUgZGVzY3JpYmVkIHNpdHVhdGlvbiksXG5cdFx0XHRcdFx0Ly8gYnV0IG1vZGVsLmRlbGV0ZSAob25seSBzZW5kaW5nIHRoZSBkZWxldGUpLiBJbiBvdGhlciBjYXNlcyAoZS5nLiBub24tZHJhZnQpLCB0aGlzIGlzIGFsc28gc3VmZmljaWVudCwgYXMgd2UgYW55d2F5IHRha2UgY2FyZSBvZiBzZXR0aW5nXG5cdFx0XHRcdFx0Ly8gY29ycmVjdCBiaWRuaW5ncyB3aXRoIHRoZSBuYXZpZ2F0aW9uIHRyaWdnZXJlZCBieSB0aGUgZGVsZXRpb24uXG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSBvbiBhbmFseXRpY2FsIHRhYmxlLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCBjb250ZXh0LmRlbGV0ZSwgYXMgaXQgd2lsbCBmYWlsLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFkcmFmdEVuYWJsZWQgfHxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdChkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUpID0+IGRyYWZ0V2l0aERlbGV0YWJsZUFjdGl2ZS5zaWJsaW5nSW5mby50YXJnZXRDb250ZXh0ID09PSBjb250ZXh0XG5cdFx0XHRcdFx0XHQpIHx8XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9PT0gXCJBbmFseXRpY2FsXCJcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRNb2RlbCgpLmRlbGV0ZShjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBkcmFmdC5kZWxldGVEcmFmdChjb250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50LCBlbmFibGVTdHJpY3RIYW5kbGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdGRlbGV0ZUhlbHBlci5hZnRlckRlbGV0ZVByb2Nlc3MobVBhcmFtZXRlcnMsIG9wdGlvbnMsIGNvbnRleHRzLCByZXNvdXJjZU1vZGVsLCBsYXN0RGVsZXRlZFJvd0luZGV4KTtcblx0XHRcdGlmIChkcmFmdEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvcnMgb24gZHJhZnQgZGVsZXRlIDogJHtkcmFmdEVycm9yc31gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlSG9sZEtleShtZXNzYWdlSGFuZGxpbmdLZXkpO1xuXHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0ZGVsZXRlSGVscGVyLmFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZShyZXNvdXJjZU1vZGVsKTtcblx0XHR9XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0Ly8gcmUtdGhyb3cgZXJyb3IgdG8gZW5mb3JjZSByZWplY3RpbmcgdGhlIGdlbmVyYWwgcHJvbWlzZVxuXHRcdHRocm93IG9FcnJvcjtcblx0fVxufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgZGVsZXRlIGZhaWx1cmUgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfVEVYVFwiKSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfREVUQUlMU19URVhUXCIpLFxuXHRcdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFX0NIQU5HRVNFVF9GQUlMVVJFX1NJTkdMRV9FUlJPUl9URVhUXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBDb250ZXh0SW5mbyB1c2luZyBpdHMgc2libGluZyBjb250ZXh0LCBpZiBuZWVkZWQuXG4gKiBSZXF1ZXN0cyB0aGUgc2libGluZyBjb250ZXh0IGFuZCB1cGRhdGVzIHRoZSBzaWJsaW5nRGVsZXRhYmxlIHByb3BlcnR5LlxuICogQWxzbyBtYW5hZ2VzIHRoZSBjYXNlIHdoZXJlIHRoZSBtYWluIGNvbnRleHQgaXMgYWN0aXZlIGJ1dCBoYXMgYSBkcmFmdCBzaWJsaW5nICgtLT4gc3dhcCBiZXR3ZWVuIG1haW4gYW5kIHNpYmxpbmcgY29udGV4dCkuXG4gKiBAcGFyYW0gaW5mb1xuICogQHBhcmFtIGRlbGV0YWJsZVBhdGhcbiAqIEBwYXJhbSBzdGF0aWNEZWxldGFibGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm86IENvbnRleHRJbmZvLCBkZWxldGFibGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRpY0RlbGV0YWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdGlmICghaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSkge1xuXHRcdFx0Ly8gQ2FzZSAxOiB0aGUgY29udGV4dCBpcyBhIGRyYWZ0LCB3ZSBuZWVkIHRvIGdldCBpdHMgYWN0aXZlIHNpYmxpbmdcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvcm1hdGlvbiA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oaW5mby5jb250ZXh0LCBpbmZvLmNvbnRleHQpO1xuXHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHNpYmxpbmdJbmZvcm1hdGlvbjtcblx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGhcblx0XHRcdFx0PyBhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQ/LnJlcXVlc3RQcm9wZXJ0eShkZWxldGFibGVQYXRoKVxuXHRcdFx0XHQ6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHR9IGVsc2UgaWYgKGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCkge1xuXHRcdFx0Ly8gQ2FzZSAyOiB0aGUgY29udGV4dCBpcyBhY3RpdmUsIHdlIG5lZWQgdG8gZ2V0IGl0cyBkcmFmdCBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGlmIChzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBkcmFmdCBzaWJsaW5nIGZyb20gdGhlIGFjdGl2ZSBpbnN0YW5jZSAtLT4gZmFsbGJhY2sgdG8gY2FzZSAxXG5cdFx0XHRcdC8vIGJ5IGV4Y2hhbmdpbmcgdGhlIGNvbnRleHQgd2l0aCB0aGUgc2libGluZyBjb250ZXh0IGluIHRoZSBpbmZvIG9iamVjdC5cblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvRmV0Y2ggPSBbXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0FjdGl2ZUVudGl0eVwiXTtcblx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9GZXRjaC5wdXNoKGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShwcm9wZXJ0aWVzVG9GZXRjaCk7XG5cdFx0XHRcdGluZm8ubG9ja2VkID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaGFzRHJhZnQgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5pc0FjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0FjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGNvbnRleHQgd2l0aCBzaWJsaW5nIGNvbnRleHRcblx0XHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHsgdGFyZ2V0Q29udGV4dDogaW5mby5jb250ZXh0LCBwYXRoTWFwcGluZzogW10gfTtcblx0XHRcdFx0aW5mby5jb250ZXh0ID0gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGRlbGV0YWJsZSB3aXRoIHNpYmxpbmcgZGVsZXRhYmxlXG5cdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGluZm8uZGVsZXRhYmxlO1xuXHRcdFx0XHRpbmZvLmRlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGggPyBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKF9lKSB7XG5cdFx0Ly8gRG8gbm90aGluZ1xuXHR9XG59XG5cbi8qKlxuICogQ29sbGVjdCBjb250ZXh0IGluZm9ybWF0aW9uIChpc0RyYWZ0Um9vdCwgaXNEcmFmdE5vZGUsIEhhc0RyYWZ0RW50aXR5LCBJc0FjdGl2ZUVudGl0eSwgSGFzQWN0aXZlRW50aXR5LCBpc0xvY2tlZCwgaXNJbmFjdGl2ZSkuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVGhlIGNvbnRleHQgaW5mbyBwcm9taXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0SW5mb3MoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPENvbnRleHRJbmZvPiB7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gISFjb250ZXh0Py5nZXRPYmplY3QoKVtcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdGNvbnN0IGlzSW5hY3RpdmUgPSBjb250ZXh0Py5pc0luYWN0aXZlKCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID1cblx0XHRpc0luYWN0aXZlIHx8ICghaXNJbmFjdGl2ZSAmJiBpc1RyYW5zaWVudClcblx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHQ6IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdGNvbnN0IGRlbGV0YWJsZVBhdGggPSBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlLyRQYXRoXCIpO1xuXHRjb25zdCBzdGF0aWNEZWxldGFibGUgPSAhZGVsZXRhYmxlUGF0aCAmJiBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlXCIpICE9PSBmYWxzZTtcblx0Y29uc3QgZGVsZXRhYmxlID0gZGVsZXRhYmxlUGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cblx0Y29uc3QgaW5mbzogQ29udGV4dEluZm8gPSB7XG5cdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRpc0RyYWZ0Um9vdDogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSxcblx0XHRpc0RyYWZ0Tm9kZTogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiKSxcblx0XHRpc0FjdGl2ZTogdHJ1ZSxcblx0XHRoYXNBY3RpdmU6IGZhbHNlLFxuXHRcdGhhc0RyYWZ0OiBmYWxzZSxcblx0XHRsb2NrZWQ6IGZhbHNlLFxuXHRcdC8vIGZvciBhbiBlbXB0eVJvdyAoaW5hY3RpdmUgY29udGV4dCkgaXQncyBhbHdheXMgZGVsZXRhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQga2VwdCBpbmFjdGl2ZS4uXG5cdFx0ZGVsZXRhYmxlOiBkZWxldGFibGUsXG5cdFx0c2libGluZ0luZm86IHVuZGVmaW5lZCxcblx0XHRzaWJsaW5nRGVsZXRhYmxlOiBmYWxzZSxcblx0XHRpc0luYWN0aXZlQ29udGV4dDogISFjb250ZXh0LmlzSW5hY3RpdmUoKVxuXHR9O1xuXHRpZiAoIWNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGluZm8uaXNEcmFmdFJvb3QpIHtcblx0XHRjb25zdCBjb250ZXh0RGF0YSA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0aW5mby5sb2NrZWQgPSAhIWNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhPy5JblByb2Nlc3NCeVVzZXI7XG5cdFx0aW5mby5oYXNEcmFmdCA9IGNvbnRleHREYXRhLkhhc0RyYWZ0RW50aXR5O1xuXHRcdGluZm8uaXNBY3RpdmUgPSBjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eTtcblx0XHRpbmZvLmhhc0FjdGl2ZSA9IGNvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eTtcblx0XHRhd2FpdCB1cGRhdGVJbmZvRnJvbVNpYmxpbmcoaW5mbywgZGVsZXRhYmxlUGF0aCwgc3RhdGljRGVsZXRhYmxlKTtcblx0fVxuXHRyZXR1cm4gaW5mbztcbn1cblxuLy8gVGFibGUgUnVudGltZSBIZWxwZXJzOlxuXG4vKiByZWZyZXNoZXMgZGF0YSBpbiBpbnRlcm5hbCBtb2RlbCByZWxldmFudCBmb3IgZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uIGFjY29yZGluZyB0byBzZWxlY3RlZCBjb250ZXh0c1xucmVsZXZhbnQgZGF0YSBhcmU6IGRlbGV0YWJsZUNvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGRlbGV0ZUVuYWJsZWRcbm5vdCByZWxldmFudDogbG9ja2VkQ29udGV4dHNcbiovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgY29udGV4dEluZm9zID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRDb250ZXh0cy5tYXAoZ2V0Q29udGV4dEluZm9zKSk7XG5cblx0Y29uc3QgYnVja2V0cyA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHRcdFx0Ly8gb25seSBmb3IgZHJhZnQgcm9vdDogSW4gdGhhdCBjYXNlLCB0aGUgZGVsZXRlIHJlcXVlc3QgbmVlZHMgdG8gYmUgc2VudCBmb3IgdGhlIGFjdGl2ZSAoaS5lLiB0aGUgc2libGluZyksXG5cdFx0XHQvLyB3aGlsZSBpbiBkcmFmdCBub2RlLCB0aGUgZGVsZXRlIHJlcXVlc3QgbmVlZHMgdG8gYmUgc2VuZCBmb3IgdGhlIGRyYWZ0IGl0c2VsZlxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmIGluZm8uc2libGluZ0RlbGV0YWJsZVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEZvciBkcmFmdCBub2RlLCB3ZSBvbmx5IHJlbHkgb24gaW5mb3JtYXRpb24gaW4gdGhlIGRyYWZ0IGl0c2VsZiAobm90IGl0cyBhY3RpdmUgc2libGluZylcblx0XHRcdC8vIGFwcGxpY2F0aW9uIGhhcyB0byB0YWtlIGNhcmUgdG8gc2V0IHRoaXMgY29ycmVjdGx5IChpbiBjYXNlIGFjdGl2ZSBzaWJsaW5nIG11c3Qgbm90IGJlIGRlbGV0YWJsZSwgYWN0aXZhdGlvblxuXHRcdFx0Ly8gb2YgZHJhZnQgd2l0aCBkZWxldGVkIG5vZGUgd291bGQgYWxzbyBkZWx0ZSBhY3RpdmUgc2libGluZyA9PiBkZWxldGlvbiBvZiBkcmFmdCBub2RlIHRvIGJlIGF2b2lkZWQpXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgIWluZm8uc2libGluZ0RlbGV0YWJsZVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImxvY2tlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0RyYWZ0ICYmIGluZm8ubG9ja2VkXG5cdFx0XHQpXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0RyYWZ0ICYmICFpbmZvLmxvY2tlZFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0Ly8gbm9uLWRyYWZ0L3N0aWNreSBhbmQgZGVsZXRhYmxlXG5cdFx0Ly8gYWN0aXZlIGRyYWZ0IHJvb3Qgd2l0aG91dCBhbnkgZHJhZnQgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGNyZWF0ZWQgZHJhZnQgcm9vdCAocmVnYXJkbGVzcyBvZiBkZWxldGFibGUpXG5cdFx0Ly8gZHJhZnQgbm9kZSBvbmx5IGFjY29yZGluZyB0byBpdHMgYW5ub3RhdGlvblxuXHRcdHtcblx0XHRcdGtleTogXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PlxuXHRcdFx0XHRcdGluZm8uaXNJbmFjdGl2ZUNvbnRleHQgfHxcblx0XHRcdFx0XHQoIWluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNEcmFmdE5vZGUgJiYgaW5mby5kZWxldGFibGUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiAhaW5mby5oYXNEcmFmdCAmJiBpbmZvLmRlbGV0YWJsZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiAhaW5mby5oYXNBY3RpdmUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdE5vZGUgJiYgaW5mby5kZWxldGFibGUpXG5cdFx0XHQpXG5cdFx0fVxuXHRdO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRmb3IgKGNvbnN0IHsga2V5LCB2YWx1ZSB9IG9mIGJ1Y2tldHMpIHtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdGNvbnRleHRQYXRoICsga2V5LFxuXHRcdFx0Ly8gQ3VycmVudGx5LCBidWNrZXQgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSBoYXMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIChjb250YWluaW5nIGFsc28gc2libGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgdXNlZFxuXHRcdFx0Ly8gaW4gY2FzZSBvZiBkZWxldGlvbikuIFBvc3NpYmxlIGltcHJvdmVtZW50OiBSZWFkIHNpYmxpbmcgaW5mb3JtYXRpb24gb25seSB3aGVuIG5lZWRlZCwgYW5kIGJ1aWxkIGFsbCBidWNrZXRzIHdpdGggc2FtZVxuXHRcdFx0Ly8gc3RydWN0dXJlLiBIb3dldmVyLCBpbiB0aGF0IGNhc2Ugc2libGluZ0luZm9ybWF0aW9uIG1pZ2h0IG5lZWQgdG8gYmUgcmVhZCB0d2ljZSAoaWYgYWxyZWFkeSBuZWVkZWQgZm9yIGJ1dHRvbiBlbmFibGVtZW50KSxcblx0XHRcdC8vIHRodXMgYSBidWZmZXIgcHJvYmFibHkgd291bGQgbWFrZSBzZW5zZS5cblx0XHRcdHZhbHVlLm1hcCgoaW5mbykgPT5cblx0XHRcdFx0a2V5ID09PSBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiA/IHsgZHJhZnQ6IGluZm8uY29udGV4dCwgc2libGluZ0luZm86IGluZm8uc2libGluZ0luZm8gfSA6IGluZm8uY29udGV4dFxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuY29uc3QgZGVsZXRlSGVscGVyID0ge1xuXHRnZXROb25EZWxldGFibGVUZXh0LFxuXHRkZWxldGVDb25maXJtSGFuZGxlcixcblx0Z2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzLFxuXHR1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nLFxuXHR1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0Z2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dCxcblx0Z2V0TG9ja2VkT2JqZWN0c1RleHQsXG5cdGdldFVuc2F2ZWRDb250ZXh0c1RleHQsXG5cdGdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQsXG5cdGFmdGVyRGVsZXRlUHJvY2Vzcyxcblx0dXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMsXG5cdERlbGV0ZU9wdGlvblR5cGVzLFxuXHREZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCxcblx0c2V0Rm9jdXNBZnRlckRlbGV0ZSxcblx0Z2V0Q29udGV4dEluZm9zLFxuXHRhZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UsXG5cdHJlbW92ZURlc2NlbmRhbnRDb250ZXh0c1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVsZXRlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O01Bb0JLQSxpQkFBaUIsMEJBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQUEsT0FBakJBLGlCQUFpQjtFQUFBLEVBQWpCQSxpQkFBaUI7RUFBQSxJQVFqQkMsMEJBQTBCLDBCQUExQkEsMEJBQTBCO0lBQTFCQSwwQkFBMEI7SUFB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
|
|
709
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsInNpbGVudE1vZGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsInBhcmVudENvbnRyb2wiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwidGFibGUiLCJkZWxldGVkUm93c0NvdW50IiwidGFibGVSb3dzQ291bnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q291bnQiLCJvcmlnaW5hbFRhYmxlUm93c0NvdW50IiwibmV4dEZvY3VzUm93SW5kZXgiLCJmb2N1c1JvdyIsImZvY3VzIiwiZ2V0TG9ja2VkQ29udGV4dFVzZXIiLCJsb2NrZWRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJnZXRPYmplY3QiLCJnZXRMb2NrZWRPYmplY3RzVGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwicmV0VHh0IiwibG9ja2VkVXNlciIsImdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJudW1iZXJPZkRyYWZ0cyIsInRvdGFsRGVsZXRhYmxlIiwiZ2V0VW5TYXZlZENvbnRleHRVc2VyIiwidW5TYXZlZENvbnRleHQiLCJzTGFzdENoYW5nZWRCeVVzZXIiLCJnZXRVbnNhdmVkQ29udGV4dHNUZXh0IiwidW5TYXZlZENvbnRleHRzIiwiaW5mb1R4dCIsIm9wdGlvblR4dCIsIm9wdGlvbldpdGhvdXRUeHQiLCJsYXN0Q2hhbmdlZEJ5VXNlciIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJtUGFyYW1ldGVycyIsInRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwibm9uRGVsZXRhYmxlQ29udGV4dHMiLCJUZXh0IiwidGV4dCIsImdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsImNvbmNhdCIsImdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlIiwidXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJ2Q29udGV4dHMiLCJpdGVtcyIsImxvY2tlZENvbnRleHRzVHh0IiwiZGVsZXRhYmxlRHJhZnRJbmZvIiwicHVzaCIsInNpYmxpbmdJbmZvIiwidGFyZ2V0Q29udGV4dCIsIm5vbkRlbGV0YWJsZUV4aXN0cyIsIm5vbkRlbGV0YWJsZVRleHRDdHJsIiwidW5zYXZlZENoYW5nZXNUeHRzIiwiY29udHJvbCIsIkNIRUNLQk9YIiwibm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCIsIlRFWFQiLCJ1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nIiwic2V0VGV4dCIsIkNoZWNrQm94Iiwic2VsZWN0Iiwib0V2ZW50IiwiY2hlY2tCb3giLCJnZXRTb3VyY2UiLCJnZXRTZWxlY3RlZCIsIl9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkIiwiY29udGV4dFRvRGVsZXRlIiwicmV0IiwiZmluZCIsImRyYWZ0U2libGluZ1BhaXIiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJkaXJlY3REZWxldGFibGVDb250ZXh0cyIsImRlc2NyaXB0aW9uIiwib1RhYmxlIiwic0tleSIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJ0eHQiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwib0xpbmVDb250ZXh0RGF0YSIsInNLZXlWYWx1ZSIsInNEZXNjcmlwdGlvbiIsImRlbGV0YWJsZU9wdGlvblR4dCIsInVuc2hpZnQiLCJhbGxEZWxldGFibGVUeHQiLCJkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzIiwibWVzc2FnZUhhbmRsZXIiLCJhcHBDb21wb25lbnQiLCJlbmFibGVTdHJpY3RIYW5kbGluZyIsImRyYWZ0RXJyb3JzIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJkZWxldGVEcmFmdCIsImUiLCJMb2ciLCJlcnJvciIsImdldFBhdGgiLCJyZW1vdmVEZXNjZW5kYW50Q29udGV4dHMiLCJ0ZW1wQ29udGV4dHMiLCJwYXJlbnRDb250ZXh0IiwicGFyZW50SW5kZXgiLCJjaGlsZEluZGV4IiwiY2hpbGRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZmlsdGVyIiwiZGVsZXRlQ29uZmlybUhhbmRsZXIiLCJkcmFmdEVuYWJsZWQiLCJiaW5kaW5nVHlwZSIsIm1lc3NhZ2VIYW5kbGluZ0tleSIsInJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMiLCJnZXRJbmRleCIsImJlZm9yZURlbGV0ZUNhbGxCYWNrIiwiY29udGV4dHNUb0RlbGV0ZSIsImFsbCIsImRyYWZ0V2l0aERlbGV0YWJsZUFjdGl2ZSIsInJlc2V0Q2hhbmdlcyIsImdldE1vZGVsIiwiZGVsZXRlIiwiZ2V0Q2Fub25pY2FsUGF0aCIsIkVycm9yIiwicmVtb3ZlSG9sZEtleSIsIm9FcnJvciIsImFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSIsInNob3dNZXNzYWdlcyIsInVuSG9sZEtleSIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJjb2RlIiwidGVjaG5pY2FsRGV0YWlscyIsImZlIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwidXBkYXRlSW5mb0Zyb21TaWJsaW5nIiwiaW5mbyIsImRlbGV0YWJsZVBhdGgiLCJzdGF0aWNEZWxldGFibGUiLCJpc0FjdGl2ZSIsImhhc0FjdGl2ZSIsInNpYmxpbmdJbmZvcm1hdGlvbiIsImNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24iLCJzaWJsaW5nRGVsZXRhYmxlIiwicmVxdWVzdFByb3BlcnR5IiwiaGFzRHJhZnQiLCJwcm9wZXJ0aWVzVG9GZXRjaCIsImxvY2tlZCIsInBhdGhNYXBwaW5nIiwiZGVsZXRhYmxlIiwiX2UiLCJnZXRDb250ZXh0SW5mb3MiLCJpc1RyYW5zaWVudCIsImlzSW5hY3RpdmUiLCJtZXRhQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFDb250ZXh0IiwiaXNEcmFmdFJvb3QiLCJpc0RyYWZ0Tm9kZSIsImlzSW5hY3RpdmVDb250ZXh0IiwiY29udGV4dERhdGEiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIkluUHJvY2Vzc0J5VXNlciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dEluZm9zIiwiYnVja2V0cyIsImtleSIsInZhbHVlIiwiY29udGV4dFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlbGV0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5cbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbmVudW0gRGVsZXRlT3B0aW9uVHlwZXMge1xuXHRkZWxldGFibGVDb250ZXh0cyA9IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHR1blNhdmVkQ29udGV4dHMgPSBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID0gXCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZVwiXG59XG5cbmVudW0gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wge1xuXHRDSEVDS0JPWCA9IFwiY2hlY2tCb3hcIixcblx0VEVYVCA9IFwidGV4dFwiXG59XG5cbmV4cG9ydCB0eXBlIERyYWZ0U2libGluZ1BhaXIgPSB7XG5cdGRyYWZ0OiBPRGF0YVY0Q29udGV4dDtcblx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZU9wdGlvbiA9IHtcblx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXM7XG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRzZWxlY3RlZDogYm9vbGVhbjtcblx0dGV4dD86IHN0cmluZztcblx0Y29udHJvbD86IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udGV4dEluZm8gPSB7XG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXHRpc0RyYWZ0Um9vdDogYm9vbGVhbjtcblx0aXNEcmFmdE5vZGU6IGJvb2xlYW47XG5cdGlzQWN0aXZlOiBib29sZWFuO1xuXHRoYXNBY3RpdmU6IGJvb2xlYW47XG5cdGhhc0RyYWZ0OiBib29sZWFuO1xuXHRsb2NrZWQ6IGJvb2xlYW47XG5cdGRlbGV0YWJsZTogYm9vbGVhbjtcblx0c2libGluZ0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNJbmFjdGl2ZUNvbnRleHQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGUgPSB7XG5cdERyYWZ0VVVJRDogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXI/OiBzdHJpbmc7XG5cdEluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdENyZWF0ZWRCeVVzZXI/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlUGFyYW1ldGVycyA9IHtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cz86IG51bWJlcjtcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBwYXRoOiBzdHJpbmcgfTtcblx0YmVmb3JlRGVsZXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0dW5TYXZlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZT86IE9EYXRhVjRDb250ZXh0W107XG5cdGxvY2tlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZT86IERyYWZ0U2libGluZ1BhaXJbXTtcblx0c2lsZW50TW9kZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0SW5mbyA9IHtcblx0aW5mb1R4dD86IHN0cmluZztcblx0b3B0aW9uVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25XaXRob3V0VHh0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLFxuXHRzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRjb250ZXh0c1RvUmVtb3ZlOiBPRGF0YVY0Q29udGV4dFtdXG4pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0Y29uc3QgcmV0U2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0Y29udGV4dHNUb1JlbW92ZS5mb3JFYWNoKChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGlkeCA9IHJldFNlbGVjdGVkQ29udGV4dHMuaW5kZXhPZihjb250ZXh0KTtcblx0XHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdFx0cmV0U2VsZWN0ZWRDb250ZXh0cy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eSh0eXBlLCBbXSk7XG5cblx0cmV0dXJuIHJldFNlbGVjdGVkQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbjogRGVsZXRlT3B0aW9uKTogdm9pZCB7XG5cdGxldCBzZWxlY3RlZENvbnRleHRzID0gKGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSBhcyBPRGF0YVY0Q29udGV4dFtdKSB8fCBbXTtcblxuXHRpZiAob3B0aW9uLnR5cGUgPT09IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzKSB7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykgfHwgW11cblx0XHQpO1xuXG5cdFx0Y29uc3QgZHJhZnRTaWJsaW5nUGFpcnMgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlKSB8fCBbXTtcblx0XHRjb25zdCBkcmFmdHMgPSBkcmFmdFNpYmxpbmdQYWlycy5tYXAoKGNvbnRleHRQYWlyOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29udGV4dFBhaXIuZHJhZnQ7XG5cdFx0fSk7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGRyYWZ0c1xuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgY29udGV4dHNUb1JlbW92ZSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9wdGlvbi50eXBlKSB8fCBbXTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbi50eXBlLCBzZWxlY3RlZENvbnRleHRzLCBjb250ZXh0c1RvUmVtb3ZlKTtcblx0fVxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZWxldGVQcm9jZXNzKFxuXHRwYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGxhc3REZWxldGVkUm93SW5kZXg6IG51bWJlclxuKTogdm9pZCB7XG5cdGNvbnN0IHsgaW50ZXJuYWxNb2RlbENvbnRleHQsIGVudGl0eVNldE5hbWUgfSA9IHBhcmFtZXRlcnM7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIikgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBpZiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4gaXQgaXMgZGVsZXRlZC4gU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBzZWxlY3RlZCBjb250ZXh0cy5cblx0XHRcdFx0aWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpcyBub3Qgc2VsZWN0ZWQsIHRoZW4gdGhlIGRlbGV0ZSBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZC5cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFwiZGVsZXRlRW5hYmxlZFwiLFxuXHRcdFx0b3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFvcHRpb24uc2VsZWN0ZWQpXG5cdFx0KTtcblx0fVxuXG5cdGlmIChwYXJhbWV0ZXJzLnNpbGVudE1vZGUgIT09IHRydWUpIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9ERUxFVEVfVE9BU1RfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9QTFVSQUxcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhlIE11bHRpVmFsdWVGaWVsZCBkb2VzIG5vdCBuZWVkIHJlc2V0dGluZyBvZiBmb2N1cyBsaWtlIHRoZSB0YWJsZSwgd2l0aCB0aGUgcmVzZXR0aW5nIHdlIGdldCBjb25zb2xlIGVycm9ycyB3ZSBhdm9pZCB0cm91Z2ggdGhpcyBjaGVja1xuXHRpZiAocGFyYW1ldGVycy5wYXJlbnRDb250cm9sICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpICE9PSBcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpIHtcblx0XHRkZWxldGVIZWxwZXIuc2V0Rm9jdXNBZnRlckRlbGV0ZShwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgYXMgVGFibGUsIGNvbnRleHRzLmxlbmd0aCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Rm9jdXNBZnRlckRlbGV0ZSh0YWJsZTogVGFibGUsIGRlbGV0ZWRSb3dzQ291bnQ6IG51bWJlciwgbGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHRhYmxlUm93c0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZz8uKCk/LmdldENvdW50KCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgPSAodGFibGVSb3dzQ291bnQgPz8gMCkgKyBkZWxldGVkUm93c0NvdW50O1xuXHRsZXQgbmV4dEZvY3VzUm93SW5kZXg7XG5cblx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggIT09IC0xICYmIHRhYmxlUm93c0NvdW50ICE9PSB1bmRlZmluZWQgJiYgdGFibGVSb3dzQ291bnQgPiAwKSB7XG5cdFx0Ly9JZiB0aGUgbGFzdCByb3cgaXMgZGVsZXRlZCwgbW92ZSB0aGUgZm9jdXMgdG8gcHJldmlvdXMgcm93IHRvIGl0XG5cdFx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggPT09IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgLSAxKSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IHRhYmxlUm93c0NvdW50IC0gMTtcblx0XHRcdC8vRm9yIHRoZSBub3JtYWwgc2NlbmFyaW8sIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHJvd1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IGxhc3REZWxldGVkUm93SW5kZXggLSBkZWxldGVkUm93c0NvdW50ICsgMTtcblx0XHR9XG5cdFx0YXdhaXQgdGFibGUuZm9jdXNSb3cobmV4dEZvY3VzUm93SW5kZXgsIGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgemVybyByb3dzIG9yIGRlZmF1bHQgY2FzZSwgbW92ZSBmb2N1cyB0byB0YWJsZVxuXHRcdHRhYmxlLmZvY3VzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbbG9ja2VkVXNlcl0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGxvY2tlZFVzZXJcblx0XHRdKTtcblx0fSBlbHNlIGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIiwgW1xuXHRcdFx0bG9ja2VkQ29udGV4dHMubGVuZ3RoLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXG5cdFx0XSk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mRHJhZnRzOiBudW1iZXIsIHRvdGFsRGVsZXRhYmxlOiBudW1iZXIpOiBzdHJpbmcge1xuXHRsZXQgcmV0VHh0ID0gXCJcIjtcblxuXHRpZiAodG90YWxEZWxldGFibGUgPT09IG51bWJlck9mRHJhZnRzKSB7XG5cdFx0aWYgKG51bWJlck9mRHJhZnRzID09PSAxKSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSB1blNhdmVkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0bGV0IHNMYXN0Q2hhbmdlZEJ5VXNlciA9IFwiXCI7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdHNMYXN0Q2hhbmdlZEJ5VXNlciA9IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiXSB8fCBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyXCJdIHx8IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gc0xhc3RDaGFuZ2VkQnlVc2VyO1xufVxuXG5mdW5jdGlvbiBnZXRVbnNhdmVkQ29udGV4dHNUZXh0KFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IG51bWJlcixcblx0dW5TYXZlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyXG4pOiBEZWxldGVUZXh0SW5mbyB7XG5cdGxldCBpbmZvVHh0ID0gXCJcIixcblx0XHRvcHRpb25UeHQgPSBcIlwiLFxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSBmYWxzZTtcblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiB1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdCBhcmUgc2VsZWN0ZWRcblx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBbbGFzdENoYW5nZWRCeVVzZXJdKTtcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvL29ubHkgbXVsdGlwbGUgdW5zYXZlZCBvYmplY3RzIGFyZSBzZWxlY3RlZFxuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU19NVUxUSVBMRV9PQkpFQ1RTXCIpO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBhbGwgZGVsZXRhYmxlIGFyZSB1bnNhdmVkIGJ5IG90aGVyc1xuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9BTkRfRkVXX09CSkVDVFNfTE9DS0VEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIpO1xuXHRcdH1cblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0b3RhbERlbGV0YWJsZSA+IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGRlbGV0YWJsZSBpbmNsdWRlIHVuc2F2ZWQgYW5kIG90aGVyIHR5cGVzLlxuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0b3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19VTlNBVkVEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfUExVUkFMXCIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0dG90YWxOdW1EZWxldGFibGVDb250ZXh0czogbnVtYmVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBUZXh0IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGVudGl0eVNldE5hbWUsIGxvY2tlZENvbnRleHRzID0gW10sIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBbXSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID1cblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMhIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChcblx0XHRub25EZWxldGFibGVDb250ZXh0cyA+IDAgJiZcblx0XHQodG90YWxOdW1EZWxldGFibGVDb250ZXh0cyA9PT0gMCB8fCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA9PT0gdG90YWxOdW1EZWxldGFibGVDb250ZXh0cylcblx0KSB7XG5cdFx0Ly8gMS4gTm9uZSBvZiB0aGUgY2NvbnRleHRzIGFyZSBkZWxldGFibGVcblx0XHQvLyAyLiBPbmx5IGRyYWZ0cyBvZiBub24gZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0LlxuXHRcdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBMb2NrZWQgY29udGV4dHMgZXhpc3Rcblx0XHRcdGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX0FMTF9SRU1BSU5JTkdfTk9OX0RFTEVUQUJMRV9TSU5HVUxBUlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1BMVVJBTFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBzaW5nbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9BTkRfT05FX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3QgbXVsdGlwbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX01VTFRJUExFX0FORF9BTExfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIHNpbmdsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPiAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgbXVsdGlwbGVcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W25vbkRlbGV0YWJsZUNvbnRleHRzLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0ID8gbmV3IFRleHQoeyB0ZXh0OiByZXRUeHQgfSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlICE9PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5mdW5jdGlvbiBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zOiBEZWxldGVPcHRpb25bXSk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRyZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgb3B0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGl0ZW1zOiBDb250cm9sW10sXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdXG4pOiB2b2lkIHtcblx0bGV0IHsgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIH0gPVxuXHRcdG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRsZXQgbG9ja2VkQ29udGV4dHNUeHQgPSBcIlwiO1xuXG5cdC8vIGRyYWZ0cyB3aXRoIGFjdGl2ZVxuXHRpZiAoZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmZvckVhY2goKGRlbGV0YWJsZURyYWZ0SW5mbzogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0Ly8gSW4gZWl0aGVyIGNhc2VzLCBpZiBhbiBvd24gZHJhZnQgaXMgbG9ja2VkIG9yIG5vdCB0aGUgZHJhZnQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkIGJlZm9yZSBkZWxldGluZyBhY3RpdmUgcmVjb3JkLlxuXHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUucHVzaChkZWxldGFibGVEcmFmdEluZm8uZHJhZnQpO1xuXHRcdFx0dkNvbnRleHRzLnB1c2goZGVsZXRhYmxlRHJhZnRJbmZvLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQpO1xuXHRcdH0pO1xuXHRcdGlmIChkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaXRlbXMgbG9ja2VkIG1zZ1xuXHRpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGxvY2tlZENvbnRleHRzVHh0ID0gZGVsZXRlSGVscGVyLmdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMpIHx8IFwiXCI7XG5cdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IGxvY2tlZENvbnRleHRzVHh0IH0pKTtcblx0fVxuXG5cdC8vIG5vbiBkZWxldGFibGUgbXNnXG5cdGNvbnN0IG5vbkRlbGV0YWJsZUV4aXN0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAhPSB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVUZXh0Q3RybCA9IG5vbkRlbGV0YWJsZUV4aXN0cyAmJiBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRpZiAobm9uRGVsZXRhYmxlVGV4dEN0cmwpIHtcblx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHRDdHJsKTtcblx0fVxuXG5cdC8vIG9wdGlvbjogdW5zYXZlZCBjaGFuZ2VzIGJ5IG90aGVyc1xuXHRpZiAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCB1bnNhdmVkQ2hhbmdlc1R4dHMgPVxuXHRcdFx0ZGVsZXRlSGVscGVyLmdldFVuc2F2ZWRDb250ZXh0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSB8fCB7fTtcblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCB9KSk7XG5cdFx0fVxuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0IHx8IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25XaXRob3V0VHh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy51blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiB1blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb3B0aW9uOiBkcmFmdHMgd2l0aCBhY3RpdmUgbm90IGRlbGV0YWJsZVxuXHRpZiAoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChyZXNvdXJjZU1vZGVsLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCwgdG90YWxEZWxldGFibGUpIHx8IFwiXCI7XG5cdFx0aWYgKG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdGNvbnRleHRzOiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0XHR0ZXh0OiBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogdG90YWxEZWxldGFibGUgPiAwID8gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuQ0hFQ0tCT1ggOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zOiBEZWxldGVPcHRpb25bXSwgaXRlbXM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHQvLyBTaW5nbGUgb3B0aW9uIGRvZXNuJ3QgbmVlZCBjaGVja0JveFxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbMF07XG5cdFx0aWYgKG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcblx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRpdGVtcy5wdXNoKHRleHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBNdWx0aXBsZSBPcHRpb25zXG5cblx0XHQvLyBUZXh0c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJ0ZXh0XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG5cdFx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRcdGl0ZW1zLnB1c2godGV4dCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQ2hlY2tCb3hzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcImNoZWNrQm94XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0aXRlbXMucHVzaChcblx0XHRcdFx0XHRuZXcgQ2hlY2tCb3goe1xuXHRcdFx0XHRcdFx0dGV4dDogb3B0aW9uLnRleHQsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHNlbGVjdDogZnVuY3Rpb24gKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tCb3ggPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gY2hlY2tCb3guZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0XHRcdFx0b3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgb3JpZ2luYWwgcmVjb3JkIHNlbGVjdGVkIG9uIHRoZSBVSS5cbiAqXG4gKiBJbiB0aGUgY2FzZSB0aGUgY29udGV4dCB0byBkZWxldGUgaXMgYW4gYWN0aXZlIHJlY29yZCBidXQgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgYSBkcmFmdCByZWNvcmQuXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVsZXRlIHBhcmFtZXRlcnMgYW5kIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRUb0RlbGV0ZSBPRGF0YVY0Q29udGV4dCB0byBjaGVjay5cbiAqIEByZXR1cm5zIE9EYXRhVjRDb250ZXh0IGZvciBkZWxldGUuXG4gKi9cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCBjb250ZXh0VG9EZWxldGU6IE9EYXRhVjRDb250ZXh0KTogT0RhdGFWNENvbnRleHQge1xuXHRjb25zdCB7IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCByZXQgPSBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKChkcmFmdFNpYmxpbmdQYWlyKSA9PiBkcmFmdFNpYmxpbmdQYWlyLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQgPT09IGNvbnRleHRUb0RlbGV0ZSk7XG5cdHJldHVybiByZXQ/LmRyYWZ0ID8gcmV0LmRyYWZ0IDogY29udGV4dFRvRGVsZXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcG9zc2libGUgb3B0aW9ucyBmb3IgZGVsZXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIERlbGV0ZSBwYXJhbWV0ZXJzIGFuZCBpbmZvcm1hdGlvbiBvZiBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBkaXJlY3REZWxldGFibGVDb250ZXh0cyBDb250ZXh0cyB0aGF0IGNhbiBiZSBkZWxldGFibGUgZGlyZWN0bHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbC5cbiAqIEByZXR1cm5zIE9wdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgZm9yIHNlbGVjdGVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdGRpcmVjdERlbGV0YWJsZUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBEZWxldGVPcHRpb25bXSB7XG5cdGxldCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cyB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHsgZW50aXR5U2V0TmFtZSwgcGFyZW50Q29udHJvbCwgZGVzY3JpcHRpb24gfSA9IG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRjb25zdCB0b3RhbERlbGV0YWJsZSA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCArIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgdW5TYXZlZENvbnRleHRzLmxlbmd0aDtcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxEZWxldGFibGUgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGNvbnN0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIHNpbmdsZSBkZWxldGFibGUgY29udGV4dFxuXHRcdGNvbnN0IG9UYWJsZSA9IHBhcmVudENvbnRyb2wgYXMgVGFibGU7XG5cdFx0Y29uc3Qgc0tleSA9IG9UYWJsZSAmJiAoKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZyk7XG5cdFx0bGV0IHR4dDtcblx0XHRpZiAoc0tleSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb24gJiYgKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGUgc2VsZWN0ZWQgcmVjb3JkIGlzIGRyYWZ0KGluIFVJKS4gVGhlIEFjdGl2ZSByZWNvcmQgbmVlZHMgdG8gYmUgZGVsZXRlZChkaXJlY3REZWxldGFibGVDb250ZXh0cyBoYXMgYWN0aXZlIHJlY29yZCksIGJ1dCBkYXRhIGlzIG5vdCByZXF1ZXN0ZWQgb3IgcGFydGlhbC4gV2UgZ2V0IGRhdGEgZnJvbSB0aGUgZHJhZnQuXG5cdFx0XHRjb25zdCBvTGluZUNvbnRleHREYXRhID0gX2dldE9yaWdpbmFsU2VsZWN0ZWRSZWNvcmQobVBhcmFtZXRlcnMsIGRpcmVjdERlbGV0YWJsZUNvbnRleHRzWzBdKS5nZXRPYmplY3QoKTtcblx0XHRcdGNvbnN0IHNLZXlWYWx1ZSA9IHNLZXkgPyBvTGluZUNvbnRleHREYXRhW3NLZXldIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25QYXRoICYmIG9MaW5lQ29udGV4dERhdGFbZGVzY3JpcHRpb25QYXRoXTtcblx0XHRcdGlmIChzS2V5VmFsdWUpIHtcblx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uICYmIHNLZXkgIT09IChkZXNjcmlwdGlvbiBhcyB7IHBhdGg/OiBzdHJpbmcgfSkucGF0aCkge1xuXHRcdFx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRbc0tleVZhbHVlLCBzRGVzY3JpcHRpb25dLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9PTkxZXCIsIFtzS2V5VmFsdWVdLCBlbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0fVxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHRleHQ6IHR4dCxcblx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggIT09IHRvdGFsRGVsZXRhYmxlICYmXG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gMCAmJlxuXHRcdChkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggPiAwIHx8ICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCAmJiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApKVxuXHQpIHtcblx0XHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoICYmIG5vbkRlbGV0YWJsZUNvbnRleHRzICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgZXhpc3RzIHdpdGggcHVyZSBkZWxldGFibGUgb25lc1xuXHRcdFx0bGV0IGRlbGV0YWJsZU9wdGlvblR4dCA9IFwiXCI7XG5cdFx0XHRpZiAodG90YWxEZWxldGFibGUgPT09IDEpIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUl9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0YWJsZU9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0b3B0aW9ucy51bnNoaWZ0KHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogZGVsZXRhYmxlT3B0aW9uVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG9ubHkgZGVsZXRhYmxlXG5cdFx0XHRjb25zdCBhbGxEZWxldGFibGVUeHQgPVxuXHRcdFx0XHR0b3RhbERlbGV0YWJsZSA9PT0gMVxuXHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpXG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1BMVVJBTFwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogYWxsRGVsZXRhYmxlVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMoXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRlbmFibGVTdHJpY3RIYW5kbGluZzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duW10+IHtcblx0Y29uc3QgZHJhZnRFcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQsIGVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0IHdpdGggcGF0aCA6ICR7Y29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdGRyYWZ0RXJyb3JzLnB1c2goZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KTtcblx0cmV0dXJuIGRyYWZ0RXJyb3JzO1xufVxuXG4vKipcbiAqIEluIGNhc2Ugb2YgYSB0cmVlIHRhYmxlLCB3ZSBzaGFsbCBub3QgZGVsZXRlIGEgY29udGV4dCBpZiBvbmUgaWYgaXRzIGFuY2VzdG9ycyBpcyBhbHNvIHRvIGJlIGRlbGV0ZWQuXG4gKiBUaGlzIGZ1bmN0aW9ucyBmaWx0ZXJzIG91dCBzdWNoIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IHRlbXBDb250ZXh0czogKE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKVtdID0gWy4uLmNvbnRleHRzXTtcblx0Ly8gRmlsdGVyIG91dCBjb250ZXh0cyB3aG9zZSBhbmNlc3RvciBpcyBhbHNvIGRlbGV0ZWQsIGFzIHRoZXkgd2lsbCBiZSBkZWxldGVkIHdpdGggdGhlaXIgYW5jZXN0b3Jcblx0dGVtcENvbnRleHRzLmZvckVhY2goKHBhcmVudENvbnRleHQsIHBhcmVudEluZGV4KSA9PiB7XG5cdFx0aWYgKHBhcmVudENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGNoaWxkSW5kZXggPSBwYXJlbnRJbmRleCArIDE7IGNoaWxkSW5kZXggPCB0ZW1wQ29udGV4dHMubGVuZ3RoOyBjaGlsZEluZGV4KyspIHtcblx0XHRcdGNvbnN0IGNoaWxkQ29udGV4dCA9IHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XTtcblx0XHRcdGlmIChjaGlsZENvbnRleHQgJiYgcGFyZW50Q29udGV4dC5pc0FuY2VzdG9yT2YoY2hpbGRDb250ZXh0KSkge1xuXHRcdFx0XHR0ZW1wQ29udGV4dHNbY2hpbGRJbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdGVtcENvbnRleHRzLmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVDb25maXJtSGFuZGxlcihcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRkcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGJpbmRpbmdUeXBlPzogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG1lc3NhZ2VIYW5kbGluZ0tleSA9IG1lc3NhZ2VIYW5kbGVyLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoKTtcblx0bGV0IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdHRyeSB7XG5cdFx0Y29udGV4dHMgPSBkZWxldGVIZWxwZXIuZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChbXSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgbGFzdERlbGV0ZWRSb3dJbmRleCA9IGNvbnRleHRzW2NvbnRleHRzLmxlbmd0aCAtIDFdLmdldEluZGV4KCkgPz8gLTE7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zKTtcblxuXHRcdGNvbnN0IHsgYmVmb3JlRGVsZXRlQ2FsbEJhY2sgfSA9IG1QYXJhbWV0ZXJzO1xuXHRcdGlmIChiZWZvcmVEZWxldGVDYWxsQmFjaykge1xuXHRcdFx0YXdhaXQgYmVmb3JlRGVsZXRlQ2FsbEJhY2soeyBjb250ZXh0czogY29udGV4dHMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBjb250ZXh0cy5sZW5ndGggPT09IDEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRjb25zdCBkcmFmdEVycm9yczogdW5rbm93bltdID0gYXdhaXQgZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyhcblx0XHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdGVuYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgY29udGV4dHNUb0RlbGV0ZSA9IGNvbnRleHRzO1xuXHRcdFx0aWYgKGJpbmRpbmdUeXBlID09PSBcIlRyZWVcIikge1xuXHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlID0gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzKTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGNvbnRleHRzVG9EZWxldGUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBjb250ZXh0IHRvIGRlbGV0ZSBpcyBhIGRyYWZ0IChpLmUuIGFjdXRhbGx5IHdlIGp1c3Qgd25hdCB0byBkaXNjYXJkKSwgd2Ugc2hvdWxkIHVzZSBkcmFmdC5kZWxldGVEcmFmdCBpbiBvcmRlciB0byB1c2UgYSBkaXNjYXJkIGFjdGlvbiBpZiBkZWZpbmVkXG5cdFx0XHRcdFx0Ly8gSG93ZXZlciwgZHJhZnQuZGVsZXRlRHJhZnQgdXNlcyBnZXRQcm9wZXJ0eSwgd2hpY2ggcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGNvbnRleHQgaXMgbm90IHJlYWQgZnJvbSB0aGUgYmFja2VuZC5cblx0XHRcdFx0XHQvLyBUaGlzIGNhbiBiZSB0aGUgY2FzZSwgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhpcyBjb250ZXh0IHZpYSB0aGUgc2libGluZyAoZS5nLiB3aGVuIGEgZHJhZnQgZXhpc3RlZCBhbmQgd2Ugd2FudCB0byBkZWxldGUgYm90aCAtIGluIHRoYXQgY2FzZVxuXHRcdFx0XHRcdC8vIHdlIGhhdmUgYWxyZWFkeSBkaXNjYXJkZWQgdGhlIGRyYWZ0IGFib3ZlLCBhbmQgbm93IG5lZWQgdG8gZGVsZXRlIHRoZSBhY3RpdmUgb25lKS4gVG8gaWRlbnRpZnkgdGhpcyBzaXR1YXRpb24sIHdlIG11c3Qgbm90IHVzZSBnZXRQcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIChhcyB0aGUgY29udGV4dCBpcyBub3QgcmVhZCksIGJ1dCBjaGVjayB0aGUgc2FtZSBpbiB0aGUgbVBhcmFtZXRlcnMuXG5cdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhlIGNvbnRleHQuIEJ1dCB3ZSBzaG91bGQgbm90IHVzZSBjb250ZXh0LmRlbGV0ZSAoYWxzbyB1cGRhdGluZyBiaW5kaW5ncywgd2hpY2ggZmFpbHMgaW4gdGhlIGRlc2NyaWJlZCBzaXR1YXRpb24pLFxuXHRcdFx0XHRcdC8vIGJ1dCBtb2RlbC5kZWxldGUgKG9ubHkgc2VuZGluZyB0aGUgZGVsZXRlKS4gSW4gb3RoZXIgY2FzZXMgKGUuZy4gbm9uLWRyYWZ0KSwgdGhpcyBpcyBhbHNvIHN1ZmZpY2llbnQsIGFzIHdlIGFueXdheSB0YWtlIGNhcmUgb2Ygc2V0dGluZ1xuXHRcdFx0XHRcdC8vIGNvcnJlY3QgYmlkbmluZ3Mgd2l0aCB0aGUgbmF2aWdhdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIGRlbGV0aW9uLlxuXHRcdFx0XHRcdC8vIEluIGNhc2Ugb24gYW5hbHl0aWNhbCB0YWJsZSwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgY29udGV4dC5kZWxldGUsIGFzIGl0IHdpbGwgZmFpbC5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhZHJhZnRFbmFibGVkIHx8XG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKFxuXHRcdFx0XHRcdFx0XHQoZHJhZnRXaXRoRGVsZXRhYmxlQWN0aXZlKSA9PiBkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUuc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCA9PT0gY29udGV4dFxuXHRcdFx0XHRcdFx0KSB8fFxuXHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPT09IFwiQW5hbHl0aWNhbFwiXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0TW9kZWwoKS5kZWxldGUoY29udGV4dC5nZXRDYW5vbmljYWxQYXRoKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZHJhZnQuZGVsZXRlRHJhZnQoY29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRkZWxldGVIZWxwZXIuYWZ0ZXJEZWxldGVQcm9jZXNzKG1QYXJhbWV0ZXJzLCBvcHRpb25zLCBjb250ZXh0cywgcmVzb3VyY2VNb2RlbCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdFx0XHRpZiAoZHJhZnRFcnJvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihgRkUgOiBjb3JlIDogRGVsZXRlSGVscGVyIDogRXJyb3JzIG9uIGRyYWZ0IGRlbGV0ZSA6ICR7ZHJhZnRFcnJvcnN9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZUhvbGRLZXkobWVzc2FnZUhhbmRsaW5nS2V5KTtcblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0aWYgKGNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGRlbGV0ZUhlbHBlci5hZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UocmVzb3VyY2VNb2RlbCk7XG5cdFx0fVxuXHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdC8vIHJlLXRocm93IGVycm9yIHRvIGVuZm9yY2UgcmVqZWN0aW5nIHRoZSBnZW5lcmFsIHByb21pc2Vcblx0XHR0aHJvdyBvRXJyb3I7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIGRlbGV0ZSBmYWlsdXJlIG1lc3NhZ2UgdG8gbWVzc2FnZSBtb2RlbCBmb3IgcmVhZGFiaWxpdHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbCBmb3IgbWVzc2FnZSB0ZXh0XG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZShyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG5cdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVfQ0hBTkdFU0VUX0ZBSUxVUkVfTVVMVElQTEVfRVJST1JTX1RFWFRcIiksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIixcblx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVfQ0hBTkdFU0VUX0ZBSUxVUkVfTVVMVElQTEVfRVJST1JTX0RFVEFJTFNfVEVYVFwiKSxcblx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9TSU5HTEVfRVJST1JfVEVYVFwiKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0KTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgQ29udGV4dEluZm8gdXNpbmcgaXRzIHNpYmxpbmcgY29udGV4dCwgaWYgbmVlZGVkLlxuICogUmVxdWVzdHMgdGhlIHNpYmxpbmcgY29udGV4dCBhbmQgdXBkYXRlcyB0aGUgc2libGluZ0RlbGV0YWJsZSBwcm9wZXJ0eS5cbiAqIEFsc28gbWFuYWdlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbWFpbiBjb250ZXh0IGlzIGFjdGl2ZSBidXQgaGFzIGEgZHJhZnQgc2libGluZyAoLS0+IHN3YXAgYmV0d2VlbiBtYWluIGFuZCBzaWJsaW5nIGNvbnRleHQpLlxuICogQHBhcmFtIGluZm9cbiAqIEBwYXJhbSBkZWxldGFibGVQYXRoXG4gKiBAcGFyYW0gc3RhdGljRGVsZXRhYmxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUluZm9Gcm9tU2libGluZyhpbmZvOiBDb250ZXh0SW5mbywgZGVsZXRhYmxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdGF0aWNEZWxldGFibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRpZiAoIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUpIHtcblx0XHRcdC8vIENhc2UgMTogdGhlIGNvbnRleHQgaXMgYSBkcmFmdCwgd2UgbmVlZCB0byBnZXQgaXRzIGFjdGl2ZSBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGluZm8uc2libGluZ0luZm8gPSBzaWJsaW5nSW5mb3JtYXRpb247XG5cdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBkZWxldGFibGVQYXRoXG5cdFx0XHRcdD8gYXdhaXQgc2libGluZ0luZm9ybWF0aW9uPy50YXJnZXRDb250ZXh0Py5yZXF1ZXN0UHJvcGVydHkoZGVsZXRhYmxlUGF0aClcblx0XHRcdFx0OiBzdGF0aWNEZWxldGFibGU7XG5cdFx0fSBlbHNlIGlmIChpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQpIHtcblx0XHRcdC8vIENhc2UgMjogdGhlIGNvbnRleHQgaXMgYWN0aXZlLCB3ZSBuZWVkIHRvIGdldCBpdHMgZHJhZnQgc2libGluZ1xuXHRcdFx0Y29uc3Qgc2libGluZ0luZm9ybWF0aW9uID0gYXdhaXQgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihpbmZvLmNvbnRleHQsIGluZm8uY29udGV4dCk7XG5cdFx0XHRpZiAoc2libGluZ0luZm9ybWF0aW9uPy50YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vIFdlIHdlcmUgYWJsZSB0byByZXRyaWV2ZSB0aGUgZHJhZnQgc2libGluZyBmcm9tIHRoZSBhY3RpdmUgaW5zdGFuY2UgLS0+IGZhbGxiYWNrIHRvIGNhc2UgMVxuXHRcdFx0XHQvLyBieSBleGNoYW5naW5nIHRoZSBjb250ZXh0IHdpdGggdGhlIHNpYmxpbmcgY29udGV4dCBpbiB0aGUgaW5mbyBvYmplY3QuXG5cdFx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb0ZldGNoID0gW1wiSXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNBY3RpdmVFbnRpdHlcIl07XG5cdFx0XHRcdGlmIChkZWxldGFibGVQYXRoKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllc1RvRmV0Y2gucHVzaChkZWxldGFibGVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5yZXF1ZXN0UHJvcGVydHkocHJvcGVydGllc1RvRmV0Y2gpO1xuXHRcdFx0XHRpbmZvLmxvY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0RyYWZ0ID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaXNBY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5oYXNBY3RpdmUgPSB0cnVlO1xuXHRcdFx0XHQvLyBFeGNoYW5nZSBjb250ZXh0IHdpdGggc2libGluZyBjb250ZXh0XG5cdFx0XHRcdGluZm8uc2libGluZ0luZm8gPSB7IHRhcmdldENvbnRleHQ6IGluZm8uY29udGV4dCwgcGF0aE1hcHBpbmc6IFtdIH07XG5cdFx0XHRcdGluZm8uY29udGV4dCA9IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0O1xuXHRcdFx0XHQvLyBFeGNoYW5nZSBkZWxldGFibGUgd2l0aCBzaWJsaW5nIGRlbGV0YWJsZVxuXHRcdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBpbmZvLmRlbGV0YWJsZTtcblx0XHRcdFx0aW5mby5kZWxldGFibGUgPSBkZWxldGFibGVQYXRoID8gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChfZSkge1xuXHRcdC8vIERvIG5vdGhpbmdcblx0fVxufVxuXG4vKipcbiAqIENvbGxlY3QgY29udGV4dCBpbmZvcm1hdGlvbiAoaXNEcmFmdFJvb3QsIGlzRHJhZnROb2RlLCBIYXNEcmFmdEVudGl0eSwgSXNBY3RpdmVFbnRpdHksIEhhc0FjdGl2ZUVudGl0eSwgaXNMb2NrZWQsIGlzSW5hY3RpdmUpLlxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGluZm8gcHJvbWlzZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dEluZm9zKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuXHRjb25zdCBpc1RyYW5zaWVudCA9ICEhY29udGV4dD8uZ2V0T2JqZWN0KClbXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCJdO1xuXHRjb25zdCBpc0luYWN0aXZlID0gY29udGV4dD8uaXNJbmFjdGl2ZSgpO1xuXHRjb25zdCBtZXRhQ29udGV4dCA9XG5cdFx0aXNJbmFjdGl2ZSB8fCAoIWlzSW5hY3RpdmUgJiYgaXNUcmFuc2llbnQpXG5cdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0OiBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRDYW5vbmljYWxQYXRoKCkpO1xuXHRjb25zdCBkZWxldGFibGVQYXRoID0gbWV0YUNvbnRleHQ/LmdldFByb3BlcnR5KFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zL0RlbGV0YWJsZS8kUGF0aFwiKTtcblx0Y29uc3Qgc3RhdGljRGVsZXRhYmxlID0gIWRlbGV0YWJsZVBhdGggJiYgbWV0YUNvbnRleHQ/LmdldFByb3BlcnR5KFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zL0RlbGV0YWJsZVwiKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KGRlbGV0YWJsZVBhdGgpIDogc3RhdGljRGVsZXRhYmxlO1xuXG5cdGNvbnN0IGluZm86IENvbnRleHRJbmZvID0ge1xuXHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0aXNEcmFmdFJvb3Q6ICEhbWV0YUNvbnRleHQ/LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIiksXG5cdFx0aXNEcmFmdE5vZGU6ICEhbWV0YUNvbnRleHQ/LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIiksXG5cdFx0aXNBY3RpdmU6IHRydWUsXG5cdFx0aGFzQWN0aXZlOiBmYWxzZSxcblx0XHRoYXNEcmFmdDogZmFsc2UsXG5cdFx0bG9ja2VkOiBmYWxzZSxcblx0XHQvLyBmb3IgYW4gZW1wdHlSb3cgKGluYWN0aXZlIGNvbnRleHQpIGl0J3MgYWx3YXlzIGRlbGV0YWJsZSBhcyBsb25nIGFzIHRoZSBjb250ZXh0IGtlcHQgaW5hY3RpdmUuLlxuXHRcdGRlbGV0YWJsZTogZGVsZXRhYmxlLFxuXHRcdHNpYmxpbmdJbmZvOiB1bmRlZmluZWQsXG5cdFx0c2libGluZ0RlbGV0YWJsZTogZmFsc2UsXG5cdFx0aXNJbmFjdGl2ZUNvbnRleHQ6ICEhY29udGV4dC5pc0luYWN0aXZlKClcblx0fTtcblx0aWYgKCFjb250ZXh0LmlzSW5hY3RpdmUoKSAmJiBpbmZvLmlzRHJhZnRSb290KSB7XG5cdFx0Y29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGluZm8ubG9ja2VkID0gISFjb250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YT8uSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdGluZm8uaGFzRHJhZnQgPSBjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eTtcblx0XHRpbmZvLmlzQWN0aXZlID0gY29udGV4dERhdGEuSXNBY3RpdmVFbnRpdHk7XG5cdFx0aW5mby5oYXNBY3RpdmUgPSBjb250ZXh0RGF0YS5IYXNBY3RpdmVFbnRpdHk7XG5cdFx0YXdhaXQgdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm8sIGRlbGV0YWJsZVBhdGgsIHN0YXRpY0RlbGV0YWJsZSk7XG5cdH1cblx0cmV0dXJuIGluZm87XG59XG5cbi8vIFRhYmxlIFJ1bnRpbWUgSGVscGVyczpcblxuLyogcmVmcmVzaGVzIGRhdGEgaW4gaW50ZXJuYWwgbW9kZWwgcmVsZXZhbnQgZm9yIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvbiBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgY29udGV4dHNcbnJlbGV2YW50IGRhdGEgYXJlOiBkZWxldGFibGVDb250ZXh0cywgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdW5TYXZlZENvbnRleHRzLCBkZWxldGVFbmFibGVkXG5ub3QgcmVsZXZhbnQ6IGxvY2tlZENvbnRleHRzXG4qL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0c2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGNvbnRleHRJbmZvcyA9IGF3YWl0IFByb21pc2UuYWxsKHNlbGVjdGVkQ29udGV4dHMubWFwKGdldENvbnRleHRJbmZvcykpO1xuXG5cdGNvbnN0IGJ1Y2tldHMgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEluIHRoYXQgY2FzZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbnQgZm9yIHRoZSBhY3RpdmUgKGkuZS4gdGhlIHNpYmxpbmcpLFxuXHRcdFx0Ly8gd2hpbGUgaW4gZHJhZnQgbm9kZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbmQgZm9yIHRoZSBkcmFmdCBpdHNlbGZcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSAmJiBpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHQvLyBvbmx5IGZvciBkcmFmdCByb290OiBGb3IgZHJhZnQgbm9kZSwgd2Ugb25seSByZWx5IG9uIGluZm9ybWF0aW9uIGluIHRoZSBkcmFmdCBpdHNlbGYgKG5vdCBpdHMgYWN0aXZlIHNpYmxpbmcpXG5cdFx0XHQvLyBhcHBsaWNhdGlvbiBoYXMgdG8gdGFrZSBjYXJlIHRvIHNldCB0aGlzIGNvcnJlY3RseSAoaW4gY2FzZSBhY3RpdmUgc2libGluZyBtdXN0IG5vdCBiZSBkZWxldGFibGUsIGFjdGl2YXRpb25cblx0XHRcdC8vIG9mIGRyYWZ0IHdpdGggZGVsZXRlZCBub2RlIHdvdWxkIGFsc28gZGVsdGUgYWN0aXZlIHNpYmxpbmcgPT4gZGVsZXRpb24gb2YgZHJhZnQgbm9kZSB0byBiZSBhdm9pZGVkKVxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmICFpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJsb2NrZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiBpbmZvLmxvY2tlZFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiAhaW5mby5sb2NrZWRcblx0XHRcdClcblx0XHR9LFxuXHRcdC8vIG5vbi1kcmFmdC9zdGlja3kgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGFjdGl2ZSBkcmFmdCByb290IHdpdGhvdXQgYW55IGRyYWZ0IGFuZCBkZWxldGFibGVcblx0XHQvLyBjcmVhdGVkIGRyYWZ0IHJvb3QgKHJlZ2FyZGxlc3Mgb2YgZGVsZXRhYmxlKVxuXHRcdC8vIGRyYWZ0IG5vZGUgb25seSBhY2NvcmRpbmcgdG8gaXRzIGFubm90YXRpb25cblx0XHR7XG5cdFx0XHRrZXk6IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT5cblx0XHRcdFx0XHRpbmZvLmlzSW5hY3RpdmVDb250ZXh0IHx8XG5cdFx0XHRcdFx0KCFpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzRHJhZnQgJiYgaW5mby5kZWxldGFibGUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzQWN0aXZlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKVxuXHRcdFx0KVxuXHRcdH1cblx0XTtcblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Zm9yIChjb25zdCB7IGtleSwgdmFsdWUgfSBvZiBidWNrZXRzKSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRjb250ZXh0UGF0aCArIGtleSxcblx0XHRcdC8vIEN1cnJlbnRseSwgYnVja2V0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSAoY29udGFpbmluZyBhbHNvIHNpYmxpbmcgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHVzZWRcblx0XHRcdC8vIGluIGNhc2Ugb2YgZGVsZXRpb24pLiBQb3NzaWJsZSBpbXByb3ZlbWVudDogUmVhZCBzaWJsaW5nIGluZm9ybWF0aW9uIG9ubHkgd2hlbiBuZWVkZWQsIGFuZCBidWlsZCBhbGwgYnVja2V0cyB3aXRoIHNhbWVcblx0XHRcdC8vIHN0cnVjdHVyZS4gSG93ZXZlciwgaW4gdGhhdCBjYXNlIHNpYmxpbmdJbmZvcm1hdGlvbiBtaWdodCBuZWVkIHRvIGJlIHJlYWQgdHdpY2UgKGlmIGFscmVhZHkgbmVlZGVkIGZvciBidXR0b24gZW5hYmxlbWVudCksXG5cdFx0XHQvLyB0aHVzIGEgYnVmZmVyIHByb2JhYmx5IHdvdWxkIG1ha2Ugc2Vuc2UuXG5cdFx0XHR2YWx1ZS5tYXAoKGluZm8pID0+XG5cdFx0XHRcdGtleSA9PT0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIgPyB7IGRyYWZ0OiBpbmZvLmNvbnRleHQsIHNpYmxpbmdJbmZvOiBpbmZvLnNpYmxpbmdJbmZvIH0gOiBpbmZvLmNvbnRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IGRlbGV0ZUhlbHBlciA9IHtcblx0Z2V0Tm9uRGVsZXRhYmxlVGV4dCxcblx0ZGVsZXRlQ29uZmlybUhhbmRsZXIsXG5cdGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0dXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyxcblx0dXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQsXG5cdGdldExvY2tlZE9iamVjdHNUZXh0LFxuXHRnZXRVbnNhdmVkQ29udGV4dHNUZXh0LFxuXHRnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRhZnRlckRlbGV0ZVByb2Nlc3MsXG5cdHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzLFxuXHREZWxldGVPcHRpb25UeXBlcyxcblx0RGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wsXG5cdHNldEZvY3VzQWZ0ZXJEZWxldGUsXG5cdGdldENvbnRleHRJbmZvcyxcblx0YWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlLFxuXHRyZW1vdmVEZXNjZW5kYW50Q29udGV4dHNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlbGV0ZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztNQW9CS0EsaUJBQWlCLDBCQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFBLE9BQWpCQSxpQkFBaUI7RUFBQSxFQUFqQkEsaUJBQWlCO0VBQUEsSUFRakJDLDBCQUEwQiwwQkFBMUJBLDBCQUEwQjtJQUExQkEsMEJBQTBCO0lBQTFCQSwwQkFBMEI7SUFBQSxPQUExQkEsMEJBQTBCO0VBQUEsRUFBMUJBLDBCQUEwQjtFQThEL0IsU0FBU0Msb0JBQW9CQSxDQUM1QkMsb0JBQTBDLEVBQzFDQyxJQUF1QixFQUN2QkMsZ0JBQWtDLEVBQ2xDQyxnQkFBa0MsRUFDZjtJQUNuQixNQUFNQyxtQkFBcUMsR0FBRyxDQUFDLEdBQUdGLGdCQUFnQixDQUFDO0lBQ25FQyxnQkFBZ0IsQ0FBQ0UsT0FBTyxDQUFFQyxPQUF1QixJQUFLO01BQ3JELE1BQU1DLEdBQUcsR0FBR0gsbUJBQW1CLENBQUNJLE9BQU8sQ0FBQ0YsT0FBTyxDQUFDO01BQ2hE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
|
|
@@ -527,17 +527,12 @@ function getOptionsForDeletableTexts(
|
|
|
527
527
|
let txt;
|
|
528
528
|
if (sKey) {
|
|
529
529
|
const descriptionPath = description && (description as { path?: string }).path;
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
if (!oLineContextData || Object.keys(oLineContextData).length === 0) {
|
|
533
|
-
// In case original selected record is draft(in UI). The Active record needs to be deleted(directDeletableContexts has active record), but data is not requested. We get data from the draft.
|
|
534
|
-
singleContext = _getOriginalSelectedRecord(mParameters, singleContext);
|
|
535
|
-
oLineContextData = singleContext.getObject();
|
|
536
|
-
}
|
|
530
|
+
// In case the selected record is draft(in UI). The Active record needs to be deleted(directDeletableContexts has active record), but data is not requested or partial. We get data from the draft.
|
|
531
|
+
const oLineContextData = _getOriginalSelectedRecord(mParameters, directDeletableContexts[0]).getObject();
|
|
537
532
|
const sKeyValue = sKey ? oLineContextData[sKey] : undefined;
|
|
538
533
|
const sDescription = descriptionPath && oLineContextData[descriptionPath];
|
|
539
534
|
if (sKeyValue) {
|
|
540
|
-
if (
|
|
535
|
+
if (description && sKey !== (description as { path?: string }).path) {
|
|
541
536
|
txt = resourceModel.getText(
|
|
542
537
|
"C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO",
|
|
543
538
|
[sKeyValue, sDescription],
|
|
@@ -667,7 +662,7 @@ async function deleteConfirmHandler(
|
|
|
667
662
|
const lastDeletedRowIndex = contexts[contexts.length - 1].getIndex() ?? -1;
|
|
668
663
|
const draftsToDeleteBeforeActive = getDraftsToDeleteBeforeActive(options);
|
|
669
664
|
|
|
670
|
-
const { beforeDeleteCallBack
|
|
665
|
+
const { beforeDeleteCallBack } = mParameters;
|
|
671
666
|
if (beforeDeleteCallBack) {
|
|
672
667
|
await beforeDeleteCallBack({ contexts: contexts });
|
|
673
668
|
}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUtils"], function (Log, ObjectPath, CommonUtils) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const FPMHelper = {
|
|
9
|
-
loadModuleAndCallMethod: async function (module, method,
|
|
9
|
+
loadModuleAndCallMethod: async function (module, method, source) {
|
|
10
10
|
for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
|
11
11
|
args[_key - 3] = arguments[_key];
|
|
12
12
|
}
|
|
13
13
|
return new Promise(function (resolve) {
|
|
14
14
|
let extensionAPI;
|
|
15
|
+
let view;
|
|
16
|
+
if (source.isA("sap.ui.base.Event")) {
|
|
17
|
+
view = CommonUtils.getTargetView(source.getSource());
|
|
18
|
+
} else {
|
|
19
|
+
view = source;
|
|
20
|
+
}
|
|
15
21
|
if (view.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || view.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
|
|
16
22
|
extensionAPI = view.getController().getExtensionAPI();
|
|
17
23
|
}
|
|
@@ -93,4 +99,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
93
99
|
};
|
|
94
100
|
return FPMHelper;
|
|
95
101
|
}, false);
|
|
96
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsIm1vZHVsZSIsIm1ldGhvZCIsInZpZXciLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXh0ZW5zaW9uQVBJIiwiZ2V0Q29udHJvbGxlck5hbWUiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwic3RhcnRzV2l0aCIsImZuVGFyZ2V0IiwiT2JqZWN0UGF0aCIsImdldCIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJsb2FkZWRNb2R1bGUiLCJiaW5kIiwiYWN0aW9uV3JhcHBlciIsIm9FdmVudCIsInNNb2R1bGUiLCJzTWV0aG9kIiwib1BhcmFtZXRlcnMiLCJMb2ciLCJkZWJ1ZyIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibGlzdEJpbmRpbmciLCJhU2VsZWN0ZWRDb250ZXh0cyIsInVuZGVmaW5lZCIsImNvbnRleHRzIiwiZ2V0UGFyZW50IiwiaXNBIiwiZ2V0TWRjVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY29udHJvbCIsInBhcmVudCIsInZhbGlkYXRpb25XcmFwcGVyIiwib1ZhbGlkYXRpb25Db250ZXh0cyIsImdldEN1c3RvbUZ1bmN0aW9uIiwibW9kdWxlTmFtZSIsImZ1bmN0aW9uTmFtZSIsInNvdXJjZSIsImN1c3RvbUZ1bmN0aW9uIiwiY29udHJvbGxlckV4dCIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGUE1IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1kY1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY29uc3QgRlBNSGVscGVyID0ge1xuXHRsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZDogYXN5bmMgZnVuY3Rpb24gKG1vZHVsZTogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgdmlldzogVmlldywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcblx0XHRcdGxldCBleHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0dmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiIHx8XG5cdFx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlck5hbWUoKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGV4dGVuc2lvbkFQSSA9ICh2aWV3IGFzIEZFVmlldykuZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlLnN0YXJ0c1dpdGgoXCIvZXh0ZW5zaW9uL1wiKSkge1xuXHRcdFx0XHRjb25zdCBmblRhcmdldCA9IE9iamVjdFBhdGguZ2V0KG1vZHVsZS5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLnN1YnN0cmluZygxKSwgZXh0ZW5zaW9uQVBJKTtcblx0XHRcdFx0cmVzb2x2ZShmblRhcmdldFttZXRob2RdKC4uLmFyZ3MpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFttb2R1bGVdLCBmdW5jdGlvbiAobG9hZGVkTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pIHtcblx0XHRcdFx0XHQvLyAtIHdlIGJpbmQgdGhlIGFjdGlvbiB0byB0aGUgZXh0ZW5zaW9uQVBJIG9mIHRoZSBjb250cm9sbGVyIHNvIGl0IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIGN1c3RvbSBzZWN0aW9uXG5cdFx0XHRcdFx0Ly8gLSB3ZSBwcm92aWRlIHRoZSBjb250ZXh0IGFzIEFQSSwgbWF5YmUgaWYgbmVlZGVkIGZ1cnRoZXIgcHJvcGVydGllc1xuXHRcdFx0XHRcdHJlc29sdmUobG9hZGVkTW9kdWxlW21ldGhvZF0uYmluZChleHRlbnNpb25BUEkpKC4uLmFyZ3MpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0YWN0aW9uV3JhcHBlcjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0c01vZHVsZT86IHN0cmluZyxcblx0XHRzTWV0aG9kPzogc3RyaW5nLFxuXHRcdG9QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9XG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGlmICghc01vZHVsZSB8fCAhc01ldGhvZCkge1xuXHRcdFx0TG9nLmRlYnVnKFwiQm90aCB0aGUgbW9kdWxlIGFuZCB0aGUgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCB0byBleGVjdXRlIGEgY3VzdG9tIGFjdGlvblwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvL1RoZSBzb3VyY2Ugd291bGQgYmUgY29tbWFuZCBleGVjdXRpb24sIGluIGNhc2UgYSBjb21tYW5kIGlzIGRlZmluZWQgZm9yIHRoZSBhY3Rpb24gaW4gdGhlIG1hbmlmZXN0LlxuXHRcdGNvbnN0IG9Tb3VyY2UgPSAob0V2ZW50LmdldFNvdXJjZSA/IG9FdmVudC5nZXRTb3VyY2UoKSA6IChvRXZlbnQgYXMgeyBvU291cmNlPzogRXZlbnRQcm92aWRlciB9KS5vU291cmNlKSBhcyBDb250cm9sLFxuXHRcdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2UpLFxuXHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpITtcblxuXHRcdGxldCBsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRsZXQgYVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXTtcblxuXHRcdGlmIChvUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9QYXJhbWV0ZXJzLmNvbnRleHRzIHx8IFtdO1xuXHRcdH0gZWxzZSBpZiAob0JpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gW29CaW5kaW5nQ29udGV4dF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gW107XG5cdFx0fVxuXHRcdGlmIChvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSB8fCBvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAubS5NZW51XCIpKSB7XG5cdFx0XHRsaXN0QmluZGluZyA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShvU291cmNlKT8uZ2V0Um93QmluZGluZygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2Qoc01vZHVsZSwgc01ldGhvZCwgb1ZpZXcsIG9CaW5kaW5nQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMsIGxpc3RCaW5kaW5nKTtcblx0fSxcblx0Z2V0TWRjVGFibGU6IGZ1bmN0aW9uIChjb250cm9sOiBVSTVFbGVtZW50KTogTWRjVGFibGUgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdGlmICghcGFyZW50IHx8IHBhcmVudC5pc0E8TWRjVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIEZQTUhlbHBlci5nZXRNZGNUYWJsZShwYXJlbnQgYXMgQ29udHJvbCk7XG5cdH0sXG5cdHZhbGlkYXRpb25XcmFwcGVyOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0c01vZHVsZTogc3RyaW5nLFxuXHRcdHNNZXRob2Q6IHN0cmluZyxcblx0XHRvVmFsaWRhdGlvbkNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvVmlldzogVmlldyxcblx0XHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHRcblx0KTogUHJvbWlzZTx7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdPiB7XG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChzTW9kdWxlLCBzTWV0aG9kLCBvVmlldywgb0JpbmRpbmdDb250ZXh0LCBvVmFsaWRhdGlvbkNvbnRleHRzKSBhcyBQcm9taXNlPFxuXHRcdFx0eyBtZXNzYWdlVGFyZ2V0Pzogc3RyaW5nOyBtZXNzYWdlVGV4dDogc3RyaW5nIH1bXVxuXHRcdD47XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGV4dGVybmFsIGN1c3RvbSBmdW5jdGlvbiBkZWZpbmVkIGVpdGhlciBpbiBhIGN1c3RvbSBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBpbiBhbiBleHRlcm5hbCBtb2R1bGUuXG5cdCAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBleHRlcm5hbCBtb2R1bGUgbmFtZSwgb3IgL2V4dGVuc2lvbi88cGF0aCB0byB0aGUgY3VzdG9tIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG1vZHVsZT5cblx0ICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cblx0ICogQHBhcmFtIHNvdXJjZSBBIGNvbnRyb2wgaW4gdGhlIHZpZXcgb3IgYW4gZXZlbnQgdHJpZ2dlcmVkIGJ5IGEgY29udHJvbCBpbiB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24gKG9yIHVuZGVmaW5lZCBpZiBpdCBjb3VsZG4ndCBiZSBmb3VuZClcblx0ICovXG5cdGdldEN1c3RvbUZ1bmN0aW9uPEZ1bmN0aW9uVHlwZT4oXG5cdFx0bW9kdWxlTmFtZTogc3RyaW5nLFxuXHRcdGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdHNvdXJjZTogQ29udHJvbCB8IFVJNUV2ZW50PHt9LCBDb250cm9sPlxuXHQpOiBGdW5jdGlvblR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb250cm9sOiBDb250cm9sO1xuXHRcdGlmIChzb3VyY2UuaXNBPFVJNUV2ZW50PihcInNhcC51aS5iYXNlLkV2ZW50XCIpKSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlLmdldFNvdXJjZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhjb250cm9sKTtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRFeHRlbnNpb25BUEkoKTtcblxuXHRcdGxldCBjdXN0b21GdW5jdGlvbjogRnVuY3Rpb25UeXBlIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyRXh0ID0gT2JqZWN0UGF0aC5nZXQobW9kdWxlTmFtZS5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLnN1YnN0cmluZygxKSwgZXh0ZW5zaW9uQVBJKTtcblx0XHRcdGN1c3RvbUZ1bmN0aW9uID0gY29udHJvbGxlckV4dCA/IGNvbnRyb2xsZXJFeHRbZnVuY3Rpb25OYW1lXSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW9kdWxlID0gc2FwLnVpLnJlcXVpcmUobW9kdWxlTmFtZSk7XG5cdFx0XHRjdXN0b21GdW5jdGlvbiA9IG1vZHVsZSA/IG1vZHVsZVtmdW5jdGlvbk5hbWVdPy5iaW5kKGV4dGVuc2lvbkFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdXN0b21GdW5jdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBmaW5kIG1ldGhvZCAke2Z1bmN0aW9uTmFtZX0gaW4gJHttb2R1bGVOYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VzdG9tRnVuY3Rpb247XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZQTUhlbHBlcjtcbiJd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
|
|
102
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsIm1vZHVsZSIsIm1ldGhvZCIsInNvdXJjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJleHRlbnNpb25BUEkiLCJ2aWV3IiwiaXNBIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0U291cmNlIiwiZ2V0Q29udHJvbGxlck5hbWUiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwic3RhcnRzV2l0aCIsImZuVGFyZ2V0IiwiT2JqZWN0UGF0aCIsImdldCIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJsb2FkZWRNb2R1bGUiLCJiaW5kIiwiYWN0aW9uV3JhcHBlciIsIm9FdmVudCIsInNNb2R1bGUiLCJzTWV0aG9kIiwib1BhcmFtZXRlcnMiLCJMb2ciLCJkZWJ1ZyIsIm9Tb3VyY2UiLCJvVmlldyIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibGlzdEJpbmRpbmciLCJhU2VsZWN0ZWRDb250ZXh0cyIsInVuZGVmaW5lZCIsImNvbnRleHRzIiwiZ2V0UGFyZW50IiwiZ2V0TWRjVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY29udHJvbCIsInBhcmVudCIsInZhbGlkYXRpb25XcmFwcGVyIiwib1ZhbGlkYXRpb25Db250ZXh0cyIsImdldEN1c3RvbUZ1bmN0aW9uIiwibW9kdWxlTmFtZSIsImZ1bmN0aW9uTmFtZSIsImN1c3RvbUZ1bmN0aW9uIiwiY29udHJvbGxlckV4dCIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGUE1IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1kY1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuY29uc3QgRlBNSGVscGVyID0ge1xuXHRsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG1vZHVsZTogc3RyaW5nLFxuXHRcdG1ldGhvZDogc3RyaW5nLFxuXHRcdHNvdXJjZTogVmlldyB8IFVJNUV2ZW50PHt9LCBDb250cm9sPixcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcblx0XHRcdGxldCBleHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCB2aWV3OiBWaWV3O1xuXHRcdFx0aWYgKHNvdXJjZS5pc0E8VUk1RXZlbnQ+KFwic2FwLnVpLmJhc2UuRXZlbnRcIikpIHtcblx0XHRcdFx0dmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoc291cmNlLmdldFNvdXJjZSgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZpZXcgPSBzb3VyY2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0dmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiIHx8XG5cdFx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlck5hbWUoKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGV4dGVuc2lvbkFQSSA9ICh2aWV3IGFzIEZFVmlldykuZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlLnN0YXJ0c1dpdGgoXCIvZXh0ZW5zaW9uL1wiKSkge1xuXHRcdFx0XHRjb25zdCBmblRhcmdldCA9IE9iamVjdFBhdGguZ2V0KG1vZHVsZS5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLnN1YnN0cmluZygxKSwgZXh0ZW5zaW9uQVBJKTtcblx0XHRcdFx0cmVzb2x2ZShmblRhcmdldFttZXRob2RdKC4uLmFyZ3MpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFttb2R1bGVdLCBmdW5jdGlvbiAobG9hZGVkTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pIHtcblx0XHRcdFx0XHQvLyAtIHdlIGJpbmQgdGhlIGFjdGlvbiB0byB0aGUgZXh0ZW5zaW9uQVBJIG9mIHRoZSBjb250cm9sbGVyIHNvIGl0IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIGN1c3RvbSBzZWN0aW9uXG5cdFx0XHRcdFx0Ly8gLSB3ZSBwcm92aWRlIHRoZSBjb250ZXh0IGFzIEFQSSwgbWF5YmUgaWYgbmVlZGVkIGZ1cnRoZXIgcHJvcGVydGllc1xuXHRcdFx0XHRcdHJlc29sdmUobG9hZGVkTW9kdWxlW21ldGhvZF0uYmluZChleHRlbnNpb25BUEkpKC4uLmFyZ3MpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0YWN0aW9uV3JhcHBlcjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0c01vZHVsZT86IHN0cmluZyxcblx0XHRzTWV0aG9kPzogc3RyaW5nLFxuXHRcdG9QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9XG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGlmICghc01vZHVsZSB8fCAhc01ldGhvZCkge1xuXHRcdFx0TG9nLmRlYnVnKFwiQm90aCB0aGUgbW9kdWxlIGFuZCB0aGUgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCB0byBleGVjdXRlIGEgY3VzdG9tIGFjdGlvblwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvL1RoZSBzb3VyY2Ugd291bGQgYmUgY29tbWFuZCBleGVjdXRpb24sIGluIGNhc2UgYSBjb21tYW5kIGlzIGRlZmluZWQgZm9yIHRoZSBhY3Rpb24gaW4gdGhlIG1hbmlmZXN0LlxuXHRcdGNvbnN0IG9Tb3VyY2UgPSAob0V2ZW50LmdldFNvdXJjZSA/IG9FdmVudC5nZXRTb3VyY2UoKSA6IChvRXZlbnQgYXMgeyBvU291cmNlPzogRXZlbnRQcm92aWRlciB9KS5vU291cmNlKSBhcyBDb250cm9sLFxuXHRcdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2UpLFxuXHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpITtcblxuXHRcdGxldCBsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRsZXQgYVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXTtcblxuXHRcdGlmIChvUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9QYXJhbWV0ZXJzLmNvbnRleHRzIHx8IFtdO1xuXHRcdH0gZWxzZSBpZiAob0JpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gW29CaW5kaW5nQ29udGV4dF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gW107XG5cdFx0fVxuXHRcdGlmIChvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSB8fCBvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAubS5NZW51XCIpKSB7XG5cdFx0XHRsaXN0QmluZGluZyA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShvU291cmNlKT8uZ2V0Um93QmluZGluZygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2Qoc01vZHVsZSwgc01ldGhvZCwgb1ZpZXcsIG9CaW5kaW5nQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMsIGxpc3RCaW5kaW5nKTtcblx0fSxcblx0Z2V0TWRjVGFibGU6IGZ1bmN0aW9uIChjb250cm9sOiBVSTVFbGVtZW50KTogTWRjVGFibGUgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdGlmICghcGFyZW50IHx8IHBhcmVudC5pc0E8TWRjVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIEZQTUhlbHBlci5nZXRNZGNUYWJsZShwYXJlbnQgYXMgQ29udHJvbCk7XG5cdH0sXG5cdHZhbGlkYXRpb25XcmFwcGVyOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0c01vZHVsZTogc3RyaW5nLFxuXHRcdHNNZXRob2Q6IHN0cmluZyxcblx0XHRvVmFsaWRhdGlvbkNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvVmlldzogVmlldyxcblx0XHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHRcblx0KTogUHJvbWlzZTx7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdPiB7XG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChzTW9kdWxlLCBzTWV0aG9kLCBvVmlldywgb0JpbmRpbmdDb250ZXh0LCBvVmFsaWRhdGlvbkNvbnRleHRzKSBhcyBQcm9taXNlPFxuXHRcdFx0eyBtZXNzYWdlVGFyZ2V0Pzogc3RyaW5nOyBtZXNzYWdlVGV4dDogc3RyaW5nIH1bXVxuXHRcdD47XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGV4dGVybmFsIGN1c3RvbSBmdW5jdGlvbiBkZWZpbmVkIGVpdGhlciBpbiBhIGN1c3RvbSBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBpbiBhbiBleHRlcm5hbCBtb2R1bGUuXG5cdCAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBleHRlcm5hbCBtb2R1bGUgbmFtZSwgb3IgL2V4dGVuc2lvbi88cGF0aCB0byB0aGUgY3VzdG9tIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG1vZHVsZT5cblx0ICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cblx0ICogQHBhcmFtIHNvdXJjZSBBIGNvbnRyb2wgaW4gdGhlIHZpZXcgb3IgYW4gZXZlbnQgdHJpZ2dlcmVkIGJ5IGEgY29udHJvbCBpbiB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24gKG9yIHVuZGVmaW5lZCBpZiBpdCBjb3VsZG4ndCBiZSBmb3VuZClcblx0ICovXG5cdGdldEN1c3RvbUZ1bmN0aW9uPEZ1bmN0aW9uVHlwZT4oXG5cdFx0bW9kdWxlTmFtZTogc3RyaW5nLFxuXHRcdGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdHNvdXJjZTogQ29udHJvbCB8IFVJNUV2ZW50PHt9LCBDb250cm9sPlxuXHQpOiBGdW5jdGlvblR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb250cm9sOiBDb250cm9sO1xuXHRcdGlmIChzb3VyY2UuaXNBPFVJNUV2ZW50PihcInNhcC51aS5iYXNlLkV2ZW50XCIpKSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlLmdldFNvdXJjZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhjb250cm9sKTtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRFeHRlbnNpb25BUEkoKTtcblxuXHRcdGxldCBjdXN0b21GdW5jdGlvbjogRnVuY3Rpb25UeXBlIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyRXh0ID0gT2JqZWN0UGF0aC5nZXQobW9kdWxlTmFtZS5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLnN1YnN0cmluZygxKSwgZXh0ZW5zaW9uQVBJKTtcblx0XHRcdGN1c3RvbUZ1bmN0aW9uID0gY29udHJvbGxlckV4dCA/IGNvbnRyb2xsZXJFeHRbZnVuY3Rpb25OYW1lXSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW9kdWxlID0gc2FwLnVpLnJlcXVpcmUobW9kdWxlTmFtZSk7XG5cdFx0XHRjdXN0b21GdW5jdGlvbiA9IG1vZHVsZSA/IG1vZHVsZVtmdW5jdGlvbk5hbWVdPy5iaW5kKGV4dGVuc2lvbkFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdXN0b21GdW5jdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBmaW5kIG1ldGhvZCAke2Z1bmN0aW9uTmFtZX0gaW4gJHttb2R1bGVOYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VzdG9tRnVuY3Rpb247XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZQTUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQWNBLE1BQU1BLFNBQVMsR0FBRztJQUNqQkMsdUJBQXVCLEVBQUUsZUFBQUEsQ0FDeEJDLE1BQWMsRUFDZEMsTUFBYyxFQUNkQyxNQUFvQyxFQUVqQjtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBRGhCQyxJQUFJLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxPQUFBQSxJQUFBLFdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBSkYsSUFBSSxDQUFBRSxJQUFBLFFBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BRVAsT0FBTyxJQUFJQyxPQUFPLENBQUMsVUFBVUMsT0FBaUMsRUFBRTtRQUMvRCxJQUFJQyxZQUFzQztRQUMxQyxJQUFJQyxJQUFVO1FBQ2QsSUFBSVYsTUFBTSxDQUFDVyxHQUFHLENBQVcsbUJBQW1CLENBQUMsRUFBRTtVQUM5Q0QsSUFBSSxHQUFHRSxXQUFXLENBQUNDLGFBQWEsQ0FBQ2IsTUFBTSxDQUFDYyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsTUFBTTtVQUNOSixJQUFJLEdBQUdWLE1BQU07UUFDZDtRQUVBLElBQ0NVLElBQUksQ0FBQ0ssaUJBQWlCLENBQUMsQ0FBQyxLQUFLLGtEQUFrRCxJQUMvRUwsSUFBSSxDQUFDSyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssa0RBQWtELEVBQzlFO1VBQ0ROLFlBQVksR0FBSUMsSUFBSSxDQUFZ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RUFDcUM7TUFDN0QsT0FBTzFDLFNBQVMsQ0FBQ0MsdUJBQXVCLENBQUNrQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUssS0FBSyxFQUFFQyxlQUFlLEVBQUVZLG1CQUFtQixDQUFDO0lBR3hHLENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxpQkFBaUJBLENBQ2hCQyxVQUFrQixFQUNsQkMsWUFBb0IsRUFDcEJyRCxNQUF1QyxFQUNaO01BQzNCLElBQUkrQyxPQUFnQjtNQUNwQixJQUFJL0MsTUFBTSxDQUFDVyxHQUFHLENBQVcsbUJBQW1CLENBQUMsRUFBRTtRQUM5Q29DLE9BQU8sR0FBRy9DLE1BQU0sQ0FBQ2MsU0FBUyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxNQUFNO1FBQ05pQyxPQUFPLEdBQUcvQyxNQUFNO01BQ2pCO01BQ0EsTUFBTVUsSUFBSSxHQUFHRSxXQUFXLENBQUNDLGFBQWEsQ0FBQ2tDLE9BQU8sQ0FBQztNQUMvQyxNQUFNdEMsWUFBWSxHQUFHQyxJQUFJLENBQUNNLGFBQWEsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BRTNELElBQUlxQyxjQUF3QztNQUU1QyxJQUFJRixVQUFVLENBQUNsQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDekMsTUFBTXFDLGFBQWEsR0FBR25DLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDK0IsVUFBVSxDQUFDOUIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFZCxZQUFZLENBQUM7UUFDL0Y2QyxjQUFjLEdBQUdDLGFBQWEsR0FBR0EsYUFBYSxDQUFDRixZQUFZLENBQUMsR0FBR1gsU0FBUztNQUN6RSxDQUFDLE1BQU07UUFDTixNQUFNNUMsTUFBTSxHQUFHMEIsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQzBCLFVBQVUsQ0FBQztRQUN6Q0UsY0FBYyxHQUFHeEQsTUFBTSxHQUFHQSxNQUFNLENBQUN1RCxZQUFZLENBQUMsRUFBRXpCLElBQUksQ0FBQ25CLFlBQVksQ0FBQyxHQUFHaUMsU0FBUztNQUMvRTtNQUVBLElBQUksQ0FBQ1ksY0FBYyxFQUFFO1FBQ3BCcEIsR0FBRyxDQUFDc0IsS0FBSyxDQUFDLHdCQUF3QkgsWUFBWSxPQUFPRCxVQUFVLEVBQUUsQ0FBQztNQUNuRTtNQUNBLE9BQU9FLGNBQWM7SUFDdEI7RUFDRCxDQUFDO0VBQUMsT0FFYTFELFNBQVM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|