@sapui5/sap.fe.core 1.112.0 → 1.113.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-dbg.js +4 -3
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +2 -1
- package/src/sap/fe/core/AppComponent-dbg.js +9 -5
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +8 -6
- package/src/sap/fe/core/CommonUtils-dbg.js +55 -173
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +64 -208
- package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +25 -17
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +34 -22
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +69 -34
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +75 -42
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +25 -65
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +25 -69
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
- package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +34 -119
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +33 -118
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +9 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +6 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +16 -8
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -9
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +11 -7
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +11 -14
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +68 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.ts +7 -1
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +19 -26
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +23 -28
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -6
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +15 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +35 -17
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -12
- package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
- package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -4
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +54 -32
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +69 -49
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +21 -14
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +18 -15
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +92 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +93 -24
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +8 -6
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +7 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +36 -23
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +10 -14
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -11
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +11 -11
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +7 -2
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +2 -2
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +2 -2
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -5
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +5 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +5 -4
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +4 -5
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +15 -2
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +16 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +39 -5
- package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
- package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
- package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.ts +151 -1
- package/src/sap/fe/core/library-dbg.js +1 -1
- package/src/sap/fe/core/library-preload.js +84 -70
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
- package/src/sap/fe/core/messagebundle.properties +2 -0
- package/src/sap/fe/core/messagebundle_ar.properties +4 -3
- package/src/sap/fe/core/messagebundle_bg.properties +10 -9
- package/src/sap/fe/core/messagebundle_ca.properties +1 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -1
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +11 -10
- package/src/sap/fe/core/messagebundle_el.properties +4 -3
- package/src/sap/fe/core/messagebundle_en.properties +1 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +1 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
- package/src/sap/fe/core/messagebundle_es.properties +2 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -10
- package/src/sap/fe/core/messagebundle_hi.properties +11 -10
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +11 -10
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +11 -10
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +11 -10
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +2 -1
- package/src/sap/fe/core/messagebundle_pl.properties +11 -10
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +14 -13
- package/src/sap/fe/core/messagebundle_ru.properties +11 -10
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +11 -10
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -10
- package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -10
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +8 -4
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +7 -3
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +6 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +10 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +13 -1
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +24 -18
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -24
- package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +43 -32
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
|
@@ -17,7 +17,6 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
17
17
|
var getInsertUpdateActionsTemplating = StandardActions.getInsertUpdateActionsTemplating;
|
|
18
18
|
var getDeleteVisibility = StandardActions.getDeleteVisibility;
|
|
19
19
|
var getCreationRow = StandardActions.getCreationRow;
|
|
20
|
-
var getCreateVisibility = StandardActions.getCreateVisibility;
|
|
21
20
|
var generateStandardActionsContext = StandardActions.generateStandardActionsContext;
|
|
22
21
|
var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
|
|
23
22
|
var VisualizationType = ManifestSettings.VisualizationType;
|
|
@@ -32,9 +31,6 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
32
31
|
var isReferencePropertyStaticallyHidden = DataFieldHelper.isReferencePropertyStaticallyHidden;
|
|
33
32
|
var AggregationHelper = Aggregation.AggregationHelper;
|
|
34
33
|
var isMultiValueField = UIFormatters.isMultiValueField;
|
|
35
|
-
var isProperty = PropertyHelper.isProperty;
|
|
36
|
-
var isPathExpression = PropertyHelper.isPathExpression;
|
|
37
|
-
var isNavigationProperty = PropertyHelper.isNavigationProperty;
|
|
38
34
|
var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
|
|
39
35
|
var getAssociatedTimezoneProperty = PropertyHelper.getAssociatedTimezoneProperty;
|
|
40
36
|
var getAssociatedCurrencyProperty = PropertyHelper.getAssociatedCurrencyProperty;
|
|
@@ -45,6 +41,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
45
41
|
var isPathDeletable = DataModelPathHelper.isPathDeletable;
|
|
46
42
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
47
43
|
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
44
|
+
var isTypeDefinition = TypeGuards.isTypeDefinition;
|
|
45
|
+
var isProperty = TypeGuards.isProperty;
|
|
46
|
+
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
47
|
+
var isNavigationProperty = TypeGuards.isNavigationProperty;
|
|
48
48
|
var isAnnotationOfType = TypeGuards.isAnnotationOfType;
|
|
49
49
|
var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
|
|
50
50
|
var generate = StableIdHelper.generate;
|
|
@@ -321,7 +321,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
321
321
|
}
|
|
322
322
|
const displayMode = getDisplayMode(oProperty),
|
|
323
323
|
textAnnotation = (_oProperty$annotation7 = oProperty.annotations.Common) === null || _oProperty$annotation7 === void 0 ? void 0 : _oProperty$annotation7.Text;
|
|
324
|
-
if (
|
|
324
|
+
if (isPathAnnotationExpression(textAnnotation) && displayMode !== "Value") {
|
|
325
325
|
const oTextColumn = findColumnByPath(textAnnotation.path);
|
|
326
326
|
if (oTextColumn && oTextColumn.name !== oTableColumn.name) {
|
|
327
327
|
oTableColumn.textArrangement = {
|
|
@@ -432,7 +432,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
432
432
|
const updatable = restrictions.isUpdatable;
|
|
433
433
|
const isOnlyDynamicOnCurrentEntity = !isConstant(updatable.expression) && updatable.navigationExpression._type === "Unresolvable";
|
|
434
434
|
const updatableExpression = entitySet === null || entitySet === void 0 ? void 0 : (_entitySet$annotation = entitySet.annotations.Capabilities) === null || _entitySet$annotation === void 0 ? void 0 : (_entitySet$annotation2 = _entitySet$annotation.UpdateRestrictions) === null || _entitySet$annotation2 === void 0 ? void 0 : _entitySet$annotation2.Updatable;
|
|
435
|
-
const updatablePropertyPath =
|
|
435
|
+
const updatablePropertyPath = isPathAnnotationExpression(updatableExpression) && updatableExpression.path;
|
|
436
436
|
return isOnlyDynamicOnCurrentEntity ? updatablePropertyPath : "";
|
|
437
437
|
}
|
|
438
438
|
|
|
@@ -513,7 +513,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
513
513
|
sExpression = source === null || source === void 0 ? void 0 : source.visible;
|
|
514
514
|
}
|
|
515
515
|
let sPath;
|
|
516
|
-
if (
|
|
516
|
+
if (isPathAnnotationExpression(sExpression)) {
|
|
517
517
|
sPath = sExpression.path;
|
|
518
518
|
} else {
|
|
519
519
|
sPath = sExpression;
|
|
@@ -523,11 +523,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
523
523
|
sPath = sPath.substring(1, sPath.length - 1);
|
|
524
524
|
}
|
|
525
525
|
if (sPath.indexOf("/") > 0) {
|
|
526
|
-
var _contextDataModelObje;
|
|
527
526
|
//check if the navigation property is correct:
|
|
528
527
|
const aSplitPath = sPath.split("/");
|
|
529
528
|
const sNavigationPath = aSplitPath[0];
|
|
530
|
-
if ((contextDataModelObjectPath === null || contextDataModelObjectPath === void 0 ? void 0 :
|
|
529
|
+
if (isNavigationProperty(contextDataModelObjectPath === null || contextDataModelObjectPath === void 0 ? void 0 : contextDataModelObjectPath.targetObject) && contextDataModelObjectPath.targetObject.partner === sNavigationPath) {
|
|
531
530
|
return pathInModel(aSplitPath.slice(1).join("/"));
|
|
532
531
|
} else {
|
|
533
532
|
return constant(true);
|
|
@@ -773,7 +772,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
773
772
|
lineItemAnnotation.filter(dataField => {
|
|
774
773
|
return !dataFieldIsCopyAction(dataField);
|
|
775
774
|
}).forEach(dataField => {
|
|
776
|
-
var _dataField$annotation10, _dataField$annotation11, _dataField$annotation12, _dataField$Inline3, _dataField$Determinin, _dataField$ActionTarg3, _dataField$ActionTarg4, _dataField$ActionTarg5, _dataField$
|
|
775
|
+
var _dataField$annotation10, _dataField$annotation11, _dataField$annotation12, _dataField$Inline3, _dataField$Determinin, _dataField$ActionTarg3, _dataField$ActionTarg4, _dataField$ActionTarg5, _dataField$annotation13, _dataField$annotation14, _dataField$annotation15, _dataField$annotation16;
|
|
777
776
|
if (((_dataField$annotation10 = dataField.annotations) === null || _dataField$annotation10 === void 0 ? void 0 : (_dataField$annotation11 = _dataField$annotation10.UI) === null || _dataField$annotation11 === void 0 ? void 0 : (_dataField$annotation12 = _dataField$annotation11.Hidden) === null || _dataField$annotation12 === void 0 ? void 0 : _dataField$annotation12.valueOf()) === true) {
|
|
778
777
|
hiddenTableActions.push({
|
|
779
778
|
type: ActionType.Default,
|
|
@@ -782,9 +781,25 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
782
781
|
} else if (isDataFieldForActionAbstract(dataField) && ((_dataField$Inline3 = dataField.Inline) === null || _dataField$Inline3 === void 0 ? void 0 : _dataField$Inline3.valueOf()) !== true && ((_dataField$Determinin = dataField.Determining) === null || _dataField$Determinin === void 0 ? void 0 : _dataField$Determinin.valueOf()) !== true) {
|
|
783
782
|
switch (dataField.$Type) {
|
|
784
783
|
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
785
|
-
//
|
|
786
|
-
//
|
|
787
|
-
|
|
784
|
+
// There are three cases when a table action has an OperationAvailable that leads to an enablement expression
|
|
785
|
+
// and is not dependent upon the table entries.
|
|
786
|
+
// 1. An action with an overload, that is executed against a parent entity.
|
|
787
|
+
// 2. An unbound action
|
|
788
|
+
// 3. A static action (that is, bound to a collection)
|
|
789
|
+
let useEnabledExpression = false;
|
|
790
|
+
if (((_dataField$ActionTarg3 = dataField.ActionTarget) === null || _dataField$ActionTarg3 === void 0 ? void 0 : (_dataField$ActionTarg4 = _dataField$ActionTarg3.annotations) === null || _dataField$ActionTarg4 === void 0 ? void 0 : (_dataField$ActionTarg5 = _dataField$ActionTarg4.Core) === null || _dataField$ActionTarg5 === void 0 ? void 0 : _dataField$ActionTarg5.OperationAvailable) !== undefined) {
|
|
791
|
+
var _dataField$ActionTarg6, _dataField$ActionTarg7, _dataField$ActionTarg8, _dataField$ActionTarg9;
|
|
792
|
+
if (!((_dataField$ActionTarg6 = dataField.ActionTarget) !== null && _dataField$ActionTarg6 !== void 0 && _dataField$ActionTarg6.isBound)) {
|
|
793
|
+
// Unbound action. Is recognised, but getExpressionFromAnnotation checks for isBound = true, so not generated.
|
|
794
|
+
useEnabledExpression = true;
|
|
795
|
+
} else if ((_dataField$ActionTarg7 = dataField.ActionTarget) !== null && _dataField$ActionTarg7 !== void 0 && _dataField$ActionTarg7.isBound && ((_dataField$ActionTarg8 = dataField.ActionTarget) === null || _dataField$ActionTarg8 === void 0 ? void 0 : _dataField$ActionTarg8.sourceType) !== sEntityType) {
|
|
796
|
+
// Overload action
|
|
797
|
+
useEnabledExpression = true;
|
|
798
|
+
} else if ((_dataField$ActionTarg9 = dataField.ActionTarget) !== null && _dataField$ActionTarg9 !== void 0 && _dataField$ActionTarg9.parameters[0].isCollection) {
|
|
799
|
+
// Static action
|
|
800
|
+
useEnabledExpression = true;
|
|
801
|
+
}
|
|
802
|
+
}
|
|
788
803
|
const tableAction = {
|
|
789
804
|
type: ActionType.DataFieldForAction,
|
|
790
805
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
@@ -910,7 +925,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
910
925
|
const targetEntitySet = converterContext.getEntitySet();
|
|
911
926
|
navigationTarget = (_navigationSettings$d3 = navigationSettings.detail) === null || _navigationSettings$d3 === void 0 ? void 0 : _navigationSettings$d3.route;
|
|
912
927
|
criticalityProperty = getHighlightRowBinding((_lineItemAnnotation$a = lineItemAnnotation.annotations) === null || _lineItemAnnotation$a === void 0 ? void 0 : (_lineItemAnnotation$a2 = _lineItemAnnotation$a.UI) === null || _lineItemAnnotation$a2 === void 0 ? void 0 : _lineItemAnnotation$a2.Criticality, !!ModelHelper.getDraftRoot(targetEntitySet) || !!ModelHelper.getDraftNode(targetEntitySet), targetEntityType);
|
|
913
|
-
if (navigationTarget &&
|
|
928
|
+
if (navigationTarget && TypeGuards.isEntitySet(targetEntitySet)) {
|
|
914
929
|
pressProperty = "API.onTableRowPress($event, $controller, ${$parameters>bindingContext}, { callExtension: true, targetPath: '" + targetPath + "', editable : " + (ModelHelper.getDraftRoot(targetEntitySet) || ModelHelper.getDraftNode(targetEntitySet) ? "!${$parameters>bindingContext}.getProperty('IsActiveEntity')" : "undefined") + (tableType === "AnalyticalTable" || tableType === "TreeTable" ? ", bRecreateContext: true" : "") + "})"; //Need to access to DraftRoot and DraftNode !!!!!!!
|
|
915
930
|
}
|
|
916
931
|
}
|
|
@@ -1336,7 +1351,12 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
1336
1351
|
if (relatedColumn === undefined) {
|
|
1337
1352
|
// Case 1: Key contains DataField prefix to ensure all property columns have the same key format.
|
|
1338
1353
|
// New created property column is set to hidden.
|
|
1339
|
-
|
|
1354
|
+
const column = getColumnDefinitionFromProperty(property, annotationPath, name, true, false, nonSortableColumns, aggregationHelper, converterContext, textOnlyColumnsFromTextAnnotation);
|
|
1355
|
+
column.isPartOfLineItem = existingColumns.some(existingColumn => {
|
|
1356
|
+
var _existingColumn$prope;
|
|
1357
|
+
return ((_existingColumn$prope = existingColumn.propertyInfos) === null || _existingColumn$prope === void 0 ? void 0 : _existingColumn$prope.includes(name)) && existingColumn.isPartOfLineItem;
|
|
1358
|
+
});
|
|
1359
|
+
relatedColumns.push(column);
|
|
1340
1360
|
} else if (relatedColumn.annotationPath !== annotationPath || relatedColumn.propertyInfos) {
|
|
1341
1361
|
// Case 2: The existing column points to a LineItem (or)
|
|
1342
1362
|
// Case 3: This is a self reference from an existing column
|
|
@@ -1499,7 +1519,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
1499
1519
|
* @returns True if the DataField corresponds to a multi-value field.
|
|
1500
1520
|
*/
|
|
1501
1521
|
const _isColumnMultiValued = function (dataField, converterContext) {
|
|
1502
|
-
if (isDataFieldTypes(dataField) &&
|
|
1522
|
+
if (isDataFieldTypes(dataField) && isPathAnnotationExpression(dataField.Value)) {
|
|
1503
1523
|
const propertyObjectPath = enhanceDataModelPath(converterContext.getDataModelObjectPath(), dataField.Value.path);
|
|
1504
1524
|
return isMultiValueField(propertyObjectPath);
|
|
1505
1525
|
} else {
|
|
@@ -1533,12 +1553,12 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
1533
1553
|
};
|
|
1534
1554
|
_exports.isFilteringCaseSensitive = isFilteringCaseSensitive;
|
|
1535
1555
|
function _getFilterFunctions(ConverterContext) {
|
|
1536
|
-
|
|
1537
|
-
if (
|
|
1538
|
-
|
|
1556
|
+
const entitySet = ConverterContext.getEntitySet();
|
|
1557
|
+
if (TypeGuards.isEntitySet(entitySet)) {
|
|
1558
|
+
var _entitySet$annotation3, _ConverterContext$get;
|
|
1559
|
+
return ((_entitySet$annotation3 = entitySet.annotations.Capabilities) === null || _entitySet$annotation3 === void 0 ? void 0 : _entitySet$annotation3.FilterFunctions) ?? ((_ConverterContext$get = ConverterContext.getEntityContainer().annotations.Capabilities) === null || _ConverterContext$get === void 0 ? void 0 : _ConverterContext$get.FilterFunctions);
|
|
1539
1560
|
}
|
|
1540
|
-
|
|
1541
|
-
return (capabilities === null || capabilities === void 0 ? void 0 : capabilities.FilterFunctions) || ((_ConverterContext$get3 = ConverterContext.getEntityContainer()) === null || _ConverterContext$get3 === void 0 ? void 0 : (_ConverterContext$get4 = _ConverterContext$get3.annotations) === null || _ConverterContext$get4 === void 0 ? void 0 : (_ConverterContext$get5 = _ConverterContext$get4.Capabilities) === null || _ConverterContext$get5 === void 0 ? void 0 : _ConverterContext$get5.FilterFunctions);
|
|
1561
|
+
return undefined;
|
|
1542
1562
|
}
|
|
1543
1563
|
|
|
1544
1564
|
/**
|
|
@@ -1625,10 +1645,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
1625
1645
|
const formatOptionsObj = {
|
|
1626
1646
|
hasDraftIndicator: true,
|
|
1627
1647
|
semantickeys: semanticKey.values,
|
|
1628
|
-
|
|
1648
|
+
showErrorObjectStatus: compileExpression(getRowStatusVisibility(name, false))
|
|
1629
1649
|
};
|
|
1630
1650
|
if (isFieldGroupColumn && semanticKeyInFieldGroup.semanticKeyHasPropertyInFieldGroup) {
|
|
1631
|
-
formatOptionsObj.
|
|
1651
|
+
formatOptionsObj.showErrorObjectStatus = compileExpression(getRowStatusVisibility(name, true));
|
|
1632
1652
|
formatOptionsObj.fieldGroupDraftIndicatorPropertyPath = semanticKeyInFieldGroup.propertyPath;
|
|
1633
1653
|
}
|
|
1634
1654
|
return formatOptionsObj;
|
|
@@ -1639,7 +1659,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
1639
1659
|
return {
|
|
1640
1660
|
fieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
|
|
1641
1661
|
fieldGroupName: name,
|
|
1642
|
-
|
|
1662
|
+
showErrorObjectStatus: compileExpression(getRowStatusVisibility(name, true))
|
|
1643
1663
|
};
|
|
1644
1664
|
}
|
|
1645
1665
|
}
|
|
@@ -2282,9 +2302,8 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
2282
2302
|
const creationBehaviour = _getCreationBehaviour(lineItemAnnotation, tableManifestConfiguration, converterContext, navigationSettings, visualizationPath);
|
|
2283
2303
|
const standardActionsContext = generateStandardActionsContext(converterContext, creationBehaviour.mode, tableManifestConfiguration, viewConfiguration);
|
|
2284
2304
|
const deleteButtonVisibilityExpression = getDeleteVisibility(converterContext, standardActionsContext);
|
|
2285
|
-
const createButtonVisibilityExpression = getCreateVisibility(converterContext, standardActionsContext);
|
|
2286
2305
|
const massEditButtonVisibilityExpression = getMassEditVisibility(converterContext, standardActionsContext);
|
|
2287
|
-
const isInsertUpdateTemplated = getInsertUpdateActionsTemplating(standardActionsContext, isDraftOrStickySupported(converterContext)
|
|
2306
|
+
const isInsertUpdateTemplated = getInsertUpdateActionsTemplating(standardActionsContext, isDraftOrStickySupported(converterContext));
|
|
2288
2307
|
const selectionMode = getSelectionMode(lineItemAnnotation, visualizationPath, converterContext, hasAbsolutePath, targetCapabilities, deleteButtonVisibilityExpression, massEditButtonVisibilityExpression);
|
|
2289
2308
|
let threshold = navigationPropertyPath ? 10 : 30;
|
|
2290
2309
|
if (presentationVariantAnnotation !== null && presentationVariantAnnotation !== void 0 && presentationVariantAnnotation.MaxItems) {
|
|
@@ -2570,17 +2589,20 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
2570
2589
|
}
|
|
2571
2590
|
_exports.getTableManifestConfiguration = getTableManifestConfiguration;
|
|
2572
2591
|
function getTypeConfig(oProperty, dataType) {
|
|
2573
|
-
var
|
|
2574
|
-
let oTargetMapping
|
|
2575
|
-
if (
|
|
2576
|
-
oTargetMapping = EDM_TYPE_MAPPING[oProperty.targetType.underlyingType];
|
|
2592
|
+
var _oTargetMapping, _propertyTypeConfig$t, _propertyTypeConfig$t2, _propertyTypeConfig$t3, _propertyTypeConfig$t4;
|
|
2593
|
+
let oTargetMapping;
|
|
2594
|
+
if (isProperty(oProperty)) {
|
|
2595
|
+
oTargetMapping = isTypeDefinition(oProperty.targetType) ? EDM_TYPE_MAPPING[oProperty.targetType.underlyingType] : EDM_TYPE_MAPPING[oProperty.type];
|
|
2596
|
+
}
|
|
2597
|
+
if (oTargetMapping === undefined && dataType !== undefined) {
|
|
2598
|
+
oTargetMapping = EDM_TYPE_MAPPING[dataType];
|
|
2577
2599
|
}
|
|
2578
2600
|
const propertyTypeConfig = {
|
|
2579
2601
|
type: (_oTargetMapping = oTargetMapping) === null || _oTargetMapping === void 0 ? void 0 : _oTargetMapping.type,
|
|
2580
2602
|
constraints: {},
|
|
2581
2603
|
formatOptions: {}
|
|
2582
2604
|
};
|
|
2583
|
-
if (isProperty(oProperty)) {
|
|
2605
|
+
if (isProperty(oProperty) && oTargetMapping !== undefined) {
|
|
2584
2606
|
var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$annotation8, _oProperty$annotation9, _oProperty$annotation10, _oProperty$annotation11, _oTargetMapping$const6, _oProperty$annotation12, _oProperty$annotation13, _oProperty$annotation14, _oProperty$annotation15, _oTargetMapping$const7, _oProperty$annotation16, _oProperty$annotation17;
|
|
2585
2607
|
propertyTypeConfig.constraints = {
|
|
2586
2608
|
scale: (_oTargetMapping$const = oTargetMapping.constraints) !== null && _oTargetMapping$const !== void 0 && _oTargetMapping$const.$Scale ? oProperty.scale : undefined,
|
|
@@ -2621,4 +2643,4 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
2621
2643
|
updateTableVisualizationForType
|
|
2622
2644
|
};
|
|
2623
2645
|
}, false);
|
|
2624
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZW5hYmxlZCIsInZpc2libGUiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJjb21tYW5kIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImFubm90YXRpb25Db2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyIsIm1hbmlmZXN0Q29sdW1ucyIsImdldENvbHVtbnNGcm9tTWFuaWZlc3QiLCJjb2x1bW5zIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ3aWR0aCIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMiLCJTZXQiLCJmb3JFYWNoIiwidGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImRlZmluaXRpb25zIiwiYW5ub3RhdGlvbiIsImFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJyZXN1bHQiLCJyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiZGVmYXVsdEFnZ3JlZ2F0ZSIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSIsImZvdW5kQ29sdW1uIiwicHVzaCIsImxlbmd0aCIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiZW5hYmxlJHNlbGVjdCIsImVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCIsImFnZ3JlZ2F0ZXMiLCJfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUJhc2ljU2VhcmNoIiwiaW5kZXhPZiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiaW5jbHVkZXMiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImZpbmRDb2x1bW5CeVBhdGgiLCJvQ29sdW1uIiwib1RhYmxlQ29sdW1uIiwib1Byb3BlcnR5Iiwib1Byb3AiLCJvVW5pdCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9UaW1lem9uZSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5Iiwic1RpbWV6b25lIiwiQ29tbW9uIiwiVGltZXpvbmUiLCJvVW5pdENvbHVtbiIsInNVbml0IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJ1bml0VGV4dCIsIm9UaW1lem9uZUNvbHVtbiIsInRpbWV6b25lIiwidGltZXpvbmVUZXh0IiwidG9TdHJpbmciLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwiaXNQYXRoRXhwcmVzc2lvbiIsIm9UZXh0Q29sdW1uIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwibW9kZSIsImdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsIlNlbWFudGljS2V5IiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiVHlwZU5hbWUiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVySW5mb1RpdGxlIiwic2VtYW50aWNLZXlzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImlzQmxhbmtUYWJsZSIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJBY3Rpb25IZWxwZXIiLCJnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aCIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsInVwZGF0YWJsZSIsImlzVXBkYXRhYmxlIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsImlzQ29uc3RhbnQiLCJleHByZXNzaW9uIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJfdHlwZSIsInVwZGF0YWJsZUV4cHJlc3Npb24iLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0QmluZGluZ0V4cEZyb21Db250ZXh0Iiwic291cmNlIiwic0V4cHJlc3Npb24iLCJzUGF0aCIsInN1YnN0cmluZyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNOYXZpZ2F0aW9uUGF0aCIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwiY29uc3RhbnQiLCJ1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0IiwiZGF0YUZpZWxkSWQiLCJzb21lIiwiYWN0aW9uS2V5IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwibWFuaWZlc3RBY3Rpb25JZCIsImdlbmVyYXRlIiwiQWN0aW9uIiwiU2VtYW50aWNPYmplY3QiLCJoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsImFjdGlvbiIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyIsImFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJiTWFzc0VkaXRFbmFibGVkIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsIk11bHRpIiwiQXV0byIsIlNpbmdsZSIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJmaWx0ZXIiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJzRW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIkFjdGlvblR5cGUiLCJDb3B5IiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwibm90IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInRleHQiLCJMYWJlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiRGVmYXVsdCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJEZXRlcm1pbmluZyIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwic291cmNlVHlwZSIsInRhYmxlQWN0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3RPck5vZGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJNZXNzYWdlVHlwZSIsImdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSIsImFNaXNzaW5nS2V5cyIsImZvcm1hdFJlc3VsdCIsIkVudGl0eSIsIkhhc0FjdGl2ZSIsIklzQWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlIiwiZGV0YWlsIiwib3JpZ2luYWxUYWJsZVNldHRpbmdzIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwidGFyZ2V0QW5ub3RhdGlvbnNDb21tb24iLCJ0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24iLCJTZXNzaW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsIk5ld1BhZ2UiLCJfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhYmxlVHlwZSIsInByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwiaXNTaW5nbGV0b24iLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJJc0luYWN0aXZlIiwiY29sdW1uc1RvQmVDcmVhdGVkIiwibm9uU29ydGFibGVDb2x1bW5zIiwidGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbiIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsInJlbGF0ZWRDb2x1bW5zIiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJleHBvcnRUeXBlIiwic0RhdGVJbnB1dEZvcm1hdCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiY29uc3RyYWludHMiLCJfaXNFeHBvcnRhYmxlQ29sdW1uIiwiaW5wdXRGb3JtYXQiLCJzY2FsZSIsImRlbGltaXRlciIsImNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyIsIl9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJnZXRMYWJlbCIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwidGFyZ2V0VmFsdWVmcm9tRFAiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCIsInByb3BlcnR5VHlwZSIsImRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSIsImlzUHJvcGVydHkiLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsIlRhcmdldCIsIiR0YXJnZXQiLCJNZWRpYVR5cGUiLCJ0ZXJtIiwiaXNVUkwiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInByb3BlcnR5VmFsdWUiLCJpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkIiwiaXNBbmFseXRpY2FsTGVhZiIsIl9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJkYXRhRmllbGRHcm91cCIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZGF0YUZpZWxkRGVmYXVsdCIsImlzRGF0YUZpZWxkVHlwZXMiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiY29sTmFtZSIsImlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwibmV3TmFtZSIsImlzUGFydE9mTGluZUl0ZW0iLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSIsInJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwIiwiY29sdW1uRXhpc3RzIiwiYWRkaXRpb25hbFByb3BlcnR5IiwidGVjaG5pY2FsQ29sdW1uIiwiYWdncmVnYXRhYmxlIiwiZXh0ZW5zaW9uIiwidGVjaG5pY2FsbHlHcm91cGFibGUiLCJ0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSIsIl9nZXRTaG93RGF0YUZpZWxkc0xhYmVsIiwiZmllbGRHcm91cE5hbWUiLCJvQ29sdW1ucyIsImFDb2x1bW5LZXlzIiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsImxhc3RJbmRleE9mIiwiX2lzQ29sdW1uTXVsdGlWYWx1ZWQiLCJwcm9wZXJ0eU9iamVjdFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiX2lzQ29sdW1uU29ydGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJmaWx0ZXJGdW5jdGlvbnMiLCJfZ2V0RmlsdGVyRnVuY3Rpb25zIiwiaXNBcnJheSIsIkNvbnZlcnRlckNvbnRleHQiLCJjYXBhYmlsaXRpZXMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwidmFsdWVzIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZvcm1hdE9wdGlvbnNPYmoiLCJoYXNEcmFmdEluZGljYXRvciIsInNlbWFudGlja2V5cyIsIm9iamVjdFN0YXR1c1RleHRWaXNpYmlsaXR5IiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiX2dldEltcE51bWJlciIsIkltcG9ydGFuY2UiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsIl9nZXRNYXhJbXBvcnRhbmNlIiwiZmllbGRzIiwibWF4SW1wTnVtYmVyIiwiaW1wTnVtYmVyIiwiRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UiLCJmaWVsZCIsImZpZWxkc1dpdGhJbXBvcnRhbmNlIiwibWFwU2VtYW50aWNLZXlzIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZGF0YUZpZWxkVGFyZ2V0IiwiZmllbGRHcm91cERhdGEiLCJmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiSGlnaCIsIml0ZW0iLCJnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMiLCJ0YWJsZUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImxpbmVJdGVtIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJzTGFiZWwiLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJpc011bHRpVmFsdWUiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwicmVsYXRlZFByb3BlcnR5TmFtZSIsImFkZGl0aW9uYWxQcm9wZXJ0eU5hbWUiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJpbnRlcm5hbENvbHVtbnMiLCJpc0Fubm90YXRpb25Db2x1bW4iLCJpc1Nsb3RDb2x1bW4iLCJtYW5pZmVzdENvbHVtbiIsIlNsb3QiLCJpc0N1c3RvbUNvbHVtbiIsIl91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zIiwiYW5ub3RhdGlvblRhYmxlQ29sdW1ucyIsInByb3AiLCJyZXBsYWNlIiwidmFsaWRhdGVLZXkiLCJiYXNlVGFibGVDb2x1bW4iLCJwb3NpdGlvbiIsImFuY2hvciIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbiIsImlzQWN0aW9uTmF2aWdhYmxlIiwiYmFzZU1hbmlmZXN0Q29sdW1uIiwiaGVhZGVyIiwiSG9yaXpvbnRhbEFsaWduIiwiQmVnaW4iLCJpZCIsImN1c3RvbVRhYmxlQ29sdW1uIiwibWVzc2FnZSIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiTWFuaWZlc3QiLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9uQ29sdW1ucyIsIkludmFsaWRLZXkiLCJnZXRQMTNuTW9kZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwiaXNBbmFseXRpY2FsVGFibGUiLCJpc1Jlc3BvbnNpdmVUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJhZ2dyZWdhdGUiLCJMaXN0UmVwb3J0IiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFNvcnRDb25kaXRpb25zIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwic29ydENvbmRpdGlvbnMiLCJTb3J0T3JkZXIiLCJzb3J0ZXJzIiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsImNvbmRpdGlvblByb3BlcnR5IiwiUHJvcGVydHkiLCJpbmZvTmFtZSIsImNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsImdldEluaXRpYWxFeHBhbnNpb25MZXZlbCIsImxldmVsIiwiSW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lIiwiYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uIiwiY3VzdG9tQWdncmVnYXRlIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mbyIsIlRvdGFsIiwiYVRvdGFscyIsInR5cGVOYW1lUGx1cmFsIiwiVHlwZU5hbWVQbHVyYWwiLCJ0aXRsZSIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJnZXRUYWJsZUlEIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsIm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRNYXNzRWRpdFZpc2liaWxpdHkiLCJpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwic3RhbmRhcmRBY3Rpb25zIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJkZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSIsInBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsIm1hc3NFZGl0IiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImNyZWF0aW9uUm93IiwiZ2V0Q3JlYXRpb25Sb3ciLCJlbnRpdHlOYW1lIiwiY29sbGVjdGlvbiIsIm5hdmlnYXRpb25QYXRoIiwicm93IiwiaXNJbkRpc3BsYXlNb2RlIiwiYXV0b0JpbmRPbkluaXQiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwiaXNDb21wbGV4UHJvcGVydHkiLCJleHBvcnREYXRhVHlwZSIsInRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwiX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlIiwiaXNJcGhvbmUiLCJlbmFibGVGdWxsU2NyZWVuIiwiSXNzdWVUeXBlIiwiRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQiLCJfZ2V0TXVsdGlTZWxlY3RNb2RlIiwibXVsdGlTZWxlY3RNb2RlIiwic2VsZWN0QWxsIiwidXNlSWNvblRhYkJhciIsIl9nZXRUYWJsZVR5cGUiLCJpc0Rlc2t0b3AiLCJfZ2V0R3JpZFRhYmxlTW9kZSIsImlzVGVtcGxhdGVMaXN0UmVwb3J0Iiwicm93Q291bnRNb2RlIiwicm93Q291bnQiLCJfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQiLCJfdGFibGVUeXBlIiwiX3RhYmxlU2V0dGluZ3MiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsIl9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0Iiwic2VsZWN0aW9uTGltaXQiLCJfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsIl9nZXRGaWx0ZXJzIiwicXVpY2tGaWx0ZXJQYXRocyIsInF1aWNrU2VsZWN0aW9uVmFyaWFudCIsInF1aWNrRmlsdGVycyIsInNob3dDb3VudHMiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJfZ2V0RW5hYmxlRXhwb3J0IiwiZW5hYmxlUGFzdGUiLCJlbmFibGVFeHBvcnQiLCJfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlcnMiLCJoaWRlVGFibGVUaXRsZSIsImhlYWRlclZpc2libGUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnR5IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJncmlkVGFibGVSb3dNb2RlIiwib0NvbmZpZ3VyYXRpb24iLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlTWFzc0VkaXQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwic2hvd1Jvd0NvdW50IiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsImlzQ29tcGFjdFR5cGUiLCJ0YWJsZUNvbmZpZ3VyYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEVudGl0eVR5cGUsXG5cdEVudW1WYWx1ZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoLFxuXHRUeXBlRGVmaW5pdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRnVuY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV4UHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMsXG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5LFxuXHRnZXREYXRhRmllbGREYXRhVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50LFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZFR5cGVzLFxuXHRpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb21iaW5lZEFjdGlvbiwgQ3VzdG9tQWN0aW9uLCBPdmVycmlkZVR5cGVBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldENvcHlBY3Rpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZUNhdGVnb3J5VHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlLCByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgdHlwZSBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGlzTXVsdGlWYWx1ZUZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0Rm9ybWF0T3B0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEhvcml6b250YWxBbGlnbixcblx0SW1wb3J0YW5jZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIH0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGdldENyZWF0ZVZpc2liaWxpdHksXG5cdGdldENyZWF0aW9uUm93LFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0TWFzc0VkaXRWaXNpYmlsaXR5LFxuXHRnZXRSZXN0cmljdGlvbnMsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbmltcG9ydCB7IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbjtcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0aWQ6IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0cDEzbk1vZGU/OiBzdHJpbmc7XG5cdHJvdz86IHtcblx0XHRhY3Rpb24/OiBzdHJpbmc7XG5cdFx0cHJlc3M/OiBzdHJpbmc7XG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0fTtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGU+O1xuXHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBib29sZWFuO1xuXHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR9O1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogc3RyaW5nO1xuXHRncm91cENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xuXG5cdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvciA9IHtcblx0bW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRhcHBlbmQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGVUb1RhcmdldD86IHN0cmluZztcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHtcblx0aXNEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzVXBkYXRhYmxlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHBhdGhzOiBbXG5cdFx0e1xuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHR9XG5cdF07XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gPSB7XG5cdHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0Y3JlYXRlQXRFbmQ6IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0aGVhZGVyVmlzaWJsZTogYm9vbGVhbjtcblx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IEdyaWRUYWJsZVJvd0NvdW50TW9kZTtcblx0cm93Q291bnQ/OiBudW1iZXI7XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXI7XG5cdG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVQYXN0ZTogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbjogYm9vbGVhbjtcblx0c2hvd1Jvd0NvdW50OiBib29sZWFuO1xuXHRpbmxpbmVDcmVhdGlvblJvd0NvdW50PzogbnVtYmVyO1xuXHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ZW5hYmxlTWFzc0VkaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogYm9vbGVhbjtcblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCIgfCBcIlRyZWVUYWJsZVwiO1xuZXhwb3J0IHR5cGUgR3JpZFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlIChDdXN0b20gQ29sdW1uKVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG4vLyBDdXN0b20gQ29sdW1uIGZyb20gTWFuaWZlc3RcbmV4cG9ydCB0eXBlIE1hbmlmZXN0RGVmaW5lZEN1c3RvbUNvbHVtbiA9IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiAmIHtcblx0dHlwZT86IENvbHVtblR5cGUuRGVmYXVsdDtcbn07XG5cbi8vIFNsb3QgQ29sdW1uIGZyb20gQnVpbGRpbmcgQmxvY2tcbmV4cG9ydCB0eXBlIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU6IENvbHVtblR5cGUuU2xvdDtcbn07XG5cbi8vIFByb3BlcnRpZXMgYWxsIENvbHVtblR5cGVzIGhhdmU6XG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tXG5cdHdpZHRoPzogc3RyaW5nO1xuXHRpbXBvcnRhbmNlPzogSW1wb3J0YW5jZTtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG59O1xuXG4vLyBQcm9wZXJ0aWVzIG9uIEN1c3RvbSBDb2x1bW5zIGFuZCBTbG90IENvbHVtbnNcbmV4cG9ydCB0eXBlIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGlkOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0aGVhZGVyPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdGV4cG9ydFNldHRpbmdzPzoge1xuXHRcdHRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0d3JhcDogYm9vbGVhbjtcblx0fSB8IG51bGw7XG5cdGZvcm1hdE9wdGlvbnM6IHsgdGV4dExpbmVzRWRpdDogbnVtYmVyIH07XG5cdGlzR3JvdXBhYmxlOiBib29sZWFuO1xuXHRpc05hdmlnYWJsZTogYm9vbGVhbjtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfTtcblx0cHJvcGVydGllcz86IHN0cmluZ1tdOyAvL1dlIG5lZWQgdGhlIHByb3BlcnRpZXMgcmVsYXRpdmVQYXRoIHRvIGJlIGFkZGVkIHRvIHRoZSAkU2VsZWN0IHJlcXVlc3QgZm9yIGV4cG9ydGluZ1xufTtcblxuLy8gUHJvcGVydGllcyBkZXJpdmVkIGZyb20gTWFuaWZlc3QgdG8gb3ZlcnJpZGUgQW5ub3RhdGlvbiBjb25maWd1cmF0aW9uc1xuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdHNldHRpbmdzPzogVGFibGVDb2x1bW5TZXR0aW5ncztcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlQ29uc3RyYWludHMgPSBQYXJ0aWFsPHtcblx0c2NhbGU6IG51bWJlcjtcblx0cHJlY2lzaW9uOiBudW1iZXI7XG5cdG1heExlbmd0aDogbnVtYmVyO1xuXHRudWxsYWJsZTogYm9vbGVhbjtcblx0bWluaW11bTogc3RyaW5nO1xuXHRtYXhpbXVtOiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZTogYm9vbGVhbjtcbn0+O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nOiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcbn0+O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucztcblx0dHlwZUluc3RhbmNlPzogdW5rbm93bjtcblx0YmFzZVR5cGU/OiBzdHJpbmc7XG5cdGNsYXNzTmFtZT86IGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBjb2x1bW5FeHBvcnRTZXR0aW5ncyA9IFBhcnRpYWw8e1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHR3cmFwOiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlucHV0Rm9ybWF0OiBzdHJpbmc7XG5cdGZvcm1hdDogc3RyaW5nO1xuXHRzY2FsZTogbnVtYmVyO1xuXHRkZWxpbWl0ZXI6IGJvb2xlYW47XG5cdHVuaXQ6IHN0cmluZztcblx0dW5pdFByb3BlcnR5OiBzdHJpbmc7XG5cdHRpbWV6b25lOiBzdHJpbmc7XG5cdHRpbWV6b25lUHJvcGVydHk6IHN0cmluZztcblx0dXRjOiBib29sZWFuO1xufT47XG5cbi8vIFByb3BlcnRpZXMgZm9yIEFubm90YXRpb24gQ29sdW1uc1xuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd0RhdGFGaWVsZHNMYWJlbD86IGJvb2xlYW47XG5cdGlzS2V5PzogYm9vbGVhbjtcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3M/OiBjb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdHRleHRBcnJhbmdlbWVudD86IHtcblx0XHR0ZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRtb2RlOiBEaXNwbGF5TW9kZTtcblx0fTtcblx0YWRkaXRpb25hbFByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0dmlzdWFsU2V0dGluZ3M/OiBWaXN1YWxTZXR0aW5ncztcblx0dHlwZUNvbmZpZz86IFByb3BlcnR5VHlwZUNvbmZpZztcblx0aXNQYXJ0T2ZMaW5lSXRlbT86IGJvb2xlYW47IC8vIHRlbXBvcmFyeSBpbmRpY2F0b3IgdG8gb25seSBhbGxvdyBmaWx0ZXJpbmcgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdoZW4gdGhleSdyZSBwYXJ0IG9mIGEgbGluZSBpdGVtXG5cdGFkZGl0aW9uYWxMYWJlbHM/OiBzdHJpbmdbXTtcblx0ZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU/OiBzdHJpbmc7XG5cdGFnZ3JlZ2F0YWJsZT86IGJvb2xlYW47XG5cdGV4dGVuc2lvbj86IEV4dGVuc2lvbkZvckFuYWx5dGljcztcbn07XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbkZvckFuYWx5dGljcyA9IHtcblx0Y3VzdG9tQWdncmVnYXRlPzoge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsU2V0dGluZ3MgPSB7XG5cdHdpZHRoQ2FsY3VsYXRpb24/OiBXaWR0aENhbGN1bGF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkdGhDYWxjdWxhdGlvbiA9IG51bGwgfCB7XG5cdG1pbldpZHRoPzogbnVtYmVyO1xuXHRtYXhXaWR0aD86IG51bWJlcjtcblx0ZGVmYXVsdFdpZHRoPzogbnVtYmVyO1xuXHRpbmNsdWRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5leHBvcnQgdHlwZSBNYW5pZmVzdENvbHVtbiA9IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcbn07XG5cbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBhbm5vdGF0aW9uLWJhc2VkIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Y29uc3QgYVRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMudGFibGVBY3Rpb25zO1xuXHRjb25zdCBhSGlkZGVuQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMuaGlkZGVuVGFibGVBY3Rpb25zO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dHJ1ZSxcblx0XHRhSGlkZGVuQWN0aW9uc1xuXHQpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVPblNlbGVjdDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVBdXRvU2Nyb2xsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYUFubm90YXRpb25BY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGNvbHVtbnMsIGFubm90YXRpb24tYmFzZWQgYXMgd2VsbCBhcyBtYW5pZmVzdCBiYXNlZC5cbiAqIFRoZXkgYXJlIHNvcnRlZCBhbmQgc29tZSBwcm9wZXJ0aWVzIGNhbiBiZSBvdmVyd3JpdHRlbiB2aWEgdGhlIG1hbmlmZXN0IChjaGVjayBvdXQgdGhlIGtleXMgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4pLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RDb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmNvbHVtbnMsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25Db2x1bW5zIGFzIFRhYmxlQ29sdW1uW10sIG1hbmlmZXN0Q29sdW1ucyBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPj4sIHtcblx0XHR3aWR0aDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRpbXBvcnRhbmNlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGhvcml6b250YWxBbGlnbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0aXNOYXZpZ2FibGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VzdG9tIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRmdW5jdGlvbiBmaW5kQ29sdW1uRnJvbVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBLZWVwIGEgc2V0IG9mIGFsbCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMsIGFzIHdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIgdGhlbSBhcyBhZ2dyZWdhdGVzXG5cdC8vIFRoZXkgYXJlIGFnZ3JlZ2F0ZXMgZm9yIHRlY2huaWNhbCByZWFzb25zICh0byBtYW5hZ2UgbXVsdGktdW5pdHMgc2l0dWF0aW9ucykgYnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgdXNlciBzdGFuZHBvaW50XG5cdGNvbnN0IGN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAodGFibGVDb2x1bW4udW5pdCkge1xuXHRcdFx0Y3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZCh0YWJsZUNvbHVtbi51bml0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cblx0XHRpZiAoYWdncmVnYXRlZFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gYW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRkZWZpbml0aW9uc1thZ2dyZWdhdGVkUHJvcGVydHkubmFtZV0gPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdD8gY29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAoKGN0eERlZlByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY3R4RGVmUHJvcGVydHkudmFsdWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+ID0ge307XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3QgcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGRlZmluaXRpb25zW3RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aF07XG5cblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlXG5cdFx0XHRpZiAocmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJiAhY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5uYW1lKSkge1xuXHRcdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5Gcm9tUGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdLmRlZmF1bHRBZ2dyZWdhdGUuY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKSB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRlc0RlZmluaXRpb25zID0gZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdGlmIChhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cblx0XHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmRleE9mKFwic2VhcmNoXCIpID49IDAgOiB0cnVlO1xuXG5cdFx0XHQvLyBBZGQgZ3JvdXAgYW5kIHNvcnQgY29uZGl0aW9ucyBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHRcdCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zID0gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPSBcIkdyaWRUYWJsZVwiOyAvLyBBbmFseXRpY2FsVGFibGUgaXNuJ3QgYSByZWFsIHR5cGUgZm9yIHRoZSBNREM6VGFibGUsIHNvIHdlIGFsd2F5cyBzd2l0Y2ggYmFjayB0byBHcmlkXG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0KTtcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3A6IFByb3BlcnR5KSA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgb1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgc1RpbWV6b25lID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKG9Vbml0Lm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHRleHRBbm5vdGF0aW9uKSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0Py5wYXRoO1xuXHRjb25zdCBzZW1hbnRpY0tleUFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0Y29uc3QgaGVhZGVySW5mb1R5cGVOYW1lID0gY29udmVydGVyQ29udGV4dD8uZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZTtcblx0Y29uc3Qgc2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAoc2VtYW50aWNLZXlBbm5vdGF0aW9ucykge1xuXHRcdHNlbWFudGljS2V5QW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLnB1c2gob0NvbHVtbi52YWx1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0gZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnModGFibGVBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB0YWJsZUFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgaXNCbGFua1RhYmxlPzogYm9vbGVhbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSh7fSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIFtdLCBbXSwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCBbXSk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGlzQmxhbmtUYWJsZSA/IFtdIDogY29sdW1ucyksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUob1Zpc3VhbGl6YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIEFjdGlvbkhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBcInRhYmxlXCIsIGNvbnZlcnRlckNvbnRleHQpO1xufVxuXG4vKipcbiAqIEdldHMgdXBkYXRhYmxlIHByb3BlcnR5UGF0aCBmb3IgdGhlIGN1cnJlbnQgZW50aXR5c2V0IGlmIHZhbGlkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB1cGRhdGFibGUgcHJvcGVydHkgZm9yIHRoZSByb3dzXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCByZXN0cmljdGlvbnMgPSBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IHVwZGF0YWJsZSA9IHJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZTtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUV4cHJlc3Npb24gPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IGlzUGF0aEV4cHJlc3Npb24odXBkYXRhYmxlRXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlRXhwcmVzc2lvbi5wYXRoO1xuXG5cdHJldHVybiBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID8gKHVwZGF0YWJsZVByb3BlcnR5UGF0aCBhcyBzdHJpbmcpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgVGhlIHJlY29yZCBjb25zaXN0aW5nIG9mIGFjdGlvbnMgYW5kIHRoZWlyIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXTtcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSBudWxsKSB7XG5cdFx0XHQvLyBBbm5vdGF0aW9uIGNvbmZpZ3VyZWQgd2l0aCBleHBsaWNpdCAnbnVsbCcgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGV2YW50KVxuXHRcdFx0cHJvcGVydGllcy5hZGQoYWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydHkgcGF0aHMgYW5kIG5vdCBDb25zdGFudCB2YWx1ZXMuXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHByb3BlcnRpZXMpLmpvaW4oXCIsXCIpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogcmV0dXJucyBhbGwgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB1c2VkIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKGVxdWFsKGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VudGl0eVNldCksIGZhbHNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0c291cmNlOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0bGV0IHNFeHByZXNzaW9uO1xuXHRpZiAoXG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdCkge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0fSBlbHNlIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZTtcblx0fVxuXHRsZXQgc1BhdGg6IHN0cmluZztcblx0aWYgKGlzUGF0aEV4cHJlc3Npb24oc0V4cHJlc3Npb24pKSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb24gYXMgc3RyaW5nO1xuXHR9XG5cdGlmIChzUGF0aCkge1xuXHRcdGlmICgoc291cmNlIGFzIEN1c3RvbUFjdGlvbik/LnZpc2libGUpIHtcblx0XHRcdHNQYXRoID0gc1BhdGguc3Vic3RyaW5nKDEsIHNQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRpZiAoc1BhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVNwbGl0UGF0aFswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiZcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhcnRuZXIgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChhU3BsaXRQYXRoLnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSwgaWYgaXQncyBhbiBlbnRpdHlTZXQsIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgaGFzIHRvIGJlIHJldHVybmVkOlxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChzUGF0aCk7XG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlIGV4cHJlc3Npb24gYmluZGluZyBjYW5ub3QgYmUgdGFrZW4gaW50byBhY2NvdW50IGZvciB0aGUgc2VsZWN0aW9uIG1vZGUgZXZhbHVhdGlvbjpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBtYW5pZmVzdCBhY3Rpb25zIGFuZCBjaGVjayB0aGUgZm9sbG93aW5nOlxuICpcbiAqIElmIHRoZSBkYXRhIGZpZWxkIGlzIGFsc28gcmVmZXJlbmNlZCBhcyBhIGN1c3RvbSBhY3Rpb24uXG4gKiBJZiB0aGUgdW5kZXJseWluZyBtYW5pZmVzdCBhY3Rpb24gaXMgZWl0aGVyIGEgYm91bmQgYWN0aW9uIG9yIGhhcyB0aGUgJ1JlcXVpcmVzQ29udGV4dCcgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogSWYgc28sIHRoZSAncmVxdWlyZXNTZWxlY3Rpb24nIHByb3BlcnR5IGlzIGZvcmNlZCB0byAndHJ1ZScgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRJZCBJZCBvZiB0aGUgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIERhdGFGaWVsZCBpcyBmb3VuZCBhbW9uZyB0aGUgbWFuaWZlc3QgYWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRkYXRhRmllbGRJZDogc3RyaW5nLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0aWYgKGFjdGlvbktleSA9PT0gZGF0YUZpZWxkSWQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgfHxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5SZXF1aXJlc0NvbnRleHRcblx0XHRcdCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNbZGF0YUZpZWxkSWRdLnJlcXVpcmVzU2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiBjaGVjayB0aGUgZm9sbG93aW5nOlxuICogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgYW5kIHJlcXVpcmVzIGEgY29udGV4dFxuICogSWYgYW4gYWN0aW9uIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGl0IGlzIHNldCBhc2lkZSBhbmQgd2lsbCBiZSBjb25zaWRlcmVkXG4gKiB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbklkID0gZ2VuZXJhdGUoW1wiRGF0YUZpZWxkRm9yQWN0aW9uXCIsIGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nXSk7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JBY3RvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAodXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChtYW5pZmVzdEFjdGlvbklkLCBkYXRhRmllbGQsIG1hbmlmZXN0QWN0aW9ucykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdFx0XHRcdFx0XHRgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjoke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH06OiR7ZGF0YUZpZWxkLkFjdGlvbn1gLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgfHxcblx0XHRoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsIC8vIGRlZmF1bHQgZGVsZXRlIHZpc2liaWxpdHkgYXMgdHJ1ZVxuXHRcdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShhbmQoVUkuSXNFZGl0YWJsZSwgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gZXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9IGdldENvcHlBY3Rpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyk7XG5cdFx0fSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXVxuXHQpO1xuXG5cdGNvbnN0IHNFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXG5cdGlmIChjb3B5RGF0YUZpZWxkKSB7XG5cdFx0dGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5Db3B5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb3B5RGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoY29weURhdGFGaWVsZCksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRjb3B5RGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cblx0bGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gIWRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgYWN0aW9uIGhhcyBhbiBvdmVybG9hZCAoYm91bmQgdG8gcGFyZW50IGVudGl0eSkgYW5kIHRoZXJlIGlzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHQvLyBjcmVhdGUgdGhlIGVuYWJsZSBleHByZXNzaW9uLiBUaGUgYWN0aW9uIGVuYWJsZW1lbnQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHRcdFx0XHRcdFx0Y29uc3QgdXNlRW5hYmxlZEV4cHJlc3Npb24gPVxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uc291cmNlVHlwZSAhPT0gc0VudGl0eVR5cGU7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uOiBCYXNlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0aWYgKHVzZUVuYWJsZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uLmVuYWJsZWQgPSBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnMsXG5cdFx0aGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGJpbmRpbmdFeHByZXNzaW9uIGZvciB0aGUgaGlnaGxpZ2h0IHJvd1NldHRpbmcgcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSBjcml0aWNhbGl0eUFubm90YXRpb24gUGF0aCBvciB2YWx1ZSBvZiB0aGUgY3JpdGljYWxpdHlcbiAqIEBwYXJhbSBpc0RyYWZ0Um9vdE9yTm9kZSAgSXMgdGhlIGN1cnJlbnQgZW50aXR5U2V0IGFuIERyYWZ0IHJvb3Qgb3IgYSBub2RlXG4gKiBAcGFyYW0gdGFyZ2V0RW50aXR5VHlwZSBUaGUgdGFyZ2V0ZWQgZW50aXR5VHlwZVxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbkJpbmRpbmdcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3RPck5vZGU6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCB1bmRlZmluZWQpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSGFzQWN0aXZlLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5LklzQWN0aXZlLFxuXHRcdFx0YCR7aXNEcmFmdFJvb3RPck5vZGV9YCxcblx0XHRcdC4uLmFNaXNzaW5nS2V5c1xuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zQ29tbW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24sXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjtcblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKSB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IGNvbnN0YW50KE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoICRjb250cm9sbGVyICwnXCIgKyBuYXZpZ2F0aW9uVGFyZ2V0ICsgXCInLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSlcIjtcblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVR5cGUpIHtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGU7XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0KTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0ICYmICFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbih0YXJnZXRFbnRpdHlTZXQpKSB7XG5cdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFwiQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdFx0KE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8IE1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpXG5cdFx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdCh0YWJsZVR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgfHwgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gXCIsIGJSZWNyZWF0ZUNvbnRleHQ6IHRydWVcIiA6IFwiXCIpICtcblx0XHRcdFx0XHRcIn0pXCI7IC8vTmVlZCB0byBhY2Nlc3MgdG8gRHJhZnRSb290IGFuZCBEcmFmdE5vZGUgISEhISEhIVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W3BhdGhJbk1vZGVsKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoVUkuSXNJbmFjdGl2ZSkpXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJbmNsdWRlIHRleHQgcHJvcGVydGllcyBmb3VuZCBkdXJpbmcgYW5hbHlzaXMgb24gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9uc1xuXHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24ucHVzaCguLi5yZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdF0pWzBdO1xuXHRcdFx0Y29uc3Qgb0NvbHVtbkRyYWZ0SW5kaWNhdG9yID0gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKGNvbHVtbkluZm8ubmFtZSwgc2VtYW50aWNLZXlzLCBmYWxzZSwgbnVsbCk7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0NvbHVtbkRyYWZ0SW5kaWNhdG9yKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0XHQuLi5vQ29sdW1uRHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyA9IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdC4uLmNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdCA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCBkb24ndCBvbmx5IGNyZWF0ZSB0aGUgY29tcGxleCBwcm9wZXJ0eSB3aXRoIHRoZSB0ZXh0IHByb3BlcnR5IGFzIGEgY2hpbGQgcHJvcGVydHksXG5cdFx0Ly8gYnV0IGFsc28gdGhlIHByb3BlcnR5IGl0c2VsZiBhcyBpdCBjYW4gYmUgdXNlZCBhcyB3aXRoaW4gdGhlIHNvcnRDb25kaXRpb25zIG9yIG9uIGN1c3RvbSBjb2x1bW5zLlxuXHRcdC8vIFRoaXMgc3RlcCBtdXN0IGJlIHZhbGlkZSBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyA9IG5vblNvcnRhYmxlQ29sdW1ucy5jb25jYXQocHJvcGVydHkubmFtZSk7XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChcblx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBDcmVhdGUgYSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eS5cblx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdHRhYmxlQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gZnJvbSBhIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dFxuICogQHBhcmFtIHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0gYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiBEZWNpZGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lc1xuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogYFByb3BlcnR5Ojoke3JlbGF0aXZlUGF0aH1gO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBleHBvcnRUeXBlOiBzdHJpbmcgPSBfZ2V0RXhwb3J0RGF0YVR5cGUocHJvcGVydHkudHlwZSk7XG5cdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUocHJvcGVydHkpO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBkYXRhVHlwZSk7XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRjb25zdCBpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24gPVxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiAmJiB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24uaW5kZXhPZihyZWxhdGl2ZVBhdGgpID49IDA7XG5cdGNvbnN0IHNvcnRhYmxlID0gKCFpc0hpZGRlbiB8fCBpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24pICYmIG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHJlbGF0aXZlUGF0aCkgPT09IC0xO1xuXHRjb25zdCB0eXBlQ29uZmlnID0ge1xuXHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdH07XG5cdGxldCBleHBvcnRTZXR0aW5nczogY29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHRpbWV6b25lUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdW5pdFRleHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0XHRjb25zdCB0aW1lem9uZVRleHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblxuXHRcdGV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRcdGlucHV0Rm9ybWF0OiBzRGF0ZUlucHV0Rm9ybWF0LFxuXHRcdFx0c2NhbGU6IHByb3BlcnR5LnNjYWxlLFxuXHRcdFx0ZGVsaW1pdGVyOiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5JbnQ2NFwiXG5cdFx0fTtcblxuXHRcdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHVuaXRQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0fSBlbHNlIGlmICh1bml0VGV4dCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IGAke3VuaXRUZXh0fWA7XG5cdFx0fVxuXHRcdGlmICh0aW1lem9uZVByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gdGltZXpvbmVQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudXRjID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aW1lem9uZVRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gdGltZXpvbmVUZXh0LnRvU3RyaW5nKCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMocmVsYXRpdmVQYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRrZXk6IGtleSxcblx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0bGFiZWw6IGdldExhYmVsKHByb3BlcnR5LCBpc0dyb3VwKSxcblx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwocHJvcGVydHkpIDogdW5kZWZpbmVkLFxuXHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRhdmFpbGFiaWxpdHk6ICFhdmFpbGFibGVGb3JBZGFwdGF0aW9uIHx8IGlzSGlkZGVuID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6IHNvcnRhYmxlLFxuXHRcdGlzR3JvdXBhYmxlOiBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpID8gISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSA6IHNvcnRhYmxlLFxuXHRcdGlzS2V5OiBwcm9wZXJ0eS5pc0tleSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcgYXMgUHJvcGVydHlUeXBlQ29uZmlnLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KTtcblx0aWYgKHNUb29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXHRjb25zdCB0YXJnZXRWYWx1ZWZyb21EUCA9IGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQocHJvcGVydHkpO1xuXHRpZiAoaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5leHBvcnRTZXR0aW5ncykge1xuXHRcdGNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IHRhcmdldFZhbHVlZnJvbURQO1xuXHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSA9IFwiezB9L1wiICsgdGFyZ2V0VmFsdWVmcm9tRFA7XG5cdH1cblx0cmV0dXJuIGNvbHVtbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1ucywgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgZGF0YUZpZWxkIG9yIHByb3BlcnR5IHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW4sIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gX2lzRXhwb3J0YWJsZUNvbHVtbihzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRsZXQgcHJvcGVydHlUeXBlLCBwcm9wZXJ0eTtcblx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5ID0gKHNvdXJjZSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnMuVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgJiYgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5Py4kVHlwZSkge1xuXHRcdGlmIChpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGREZWZhdWx0UHJvcGVydHkpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHByb3BlcnR5VHlwZSA9IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eT8uJFR5cGU7XG5cdH0gZWxzZSBpZiAoaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oc291cmNlIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5ID0gc291cmNlIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdFx0cHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSkge1xuXHRcdFx0Ly9Gb3IgQ2hhcnRcblx0XHRcdHByb3BlcnR5VHlwZSA9IChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlO1xuXHRcdFx0cmV0dXJuIFVJQW5ub3RhdGlvblR5cGVzLkNoYXJ0RGVmaW5pdGlvblR5cGUuaW5kZXhPZihwcm9wZXJ0eVR5cGUpID09PSAtMTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5NZWRpYVR5cGU/LnRlcm0gPT09IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVkaWFUeXBlXCIgJiZcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uaXNVUkwgIT09IHRydWVcblx0XHQpIHtcblx0XHRcdC8vRm9yIFN0cmVhbVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlUeXBlXG5cdFx0PyBbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHRcdCAgXS5pbmRleE9mKHByb3BlcnR5VHlwZSkgPT09IC0xXG5cdFx0OiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKlxuICogU0FQIEZpb3JpIGVsZW1lbnRzIHdpbGwgZXZhbHVhdGUgZWl0aGVyIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBkZWZpbmVkIG9uIHRoZSBhbm5vdGF0aW9uIGl0c2VsZiBvciBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiBiaW5kIHRvIHRoZSBVSS5cbiAqL1xuZXhwb3J0IGNvbnN0IF9nZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRsZXQgcHJvcGVydHlWYWx1ZTtcblx0aWYgKHRhcmdldE9iamVjdCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0T2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHQvLyBpZiBpdCBpcyBhIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQ/LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0Ly8gRklYTUUgUHJvdmUgbWUgd3JvbmcgdGhhdCB0aGlzIGlzIHVzZWxlc3Ncblx0Y29uc3QgaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDoqLyBjb25zdGFudChmYWxzZSk7XG5cdGNvbnN0IGlzQW5hbHl0aWNhbExlYWYgPSAvKmZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gZXF1YWwoVUkuTm9kZUxldmVsLCAwKSA6Ki8gY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ISFwcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgaGlkZGVuIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIGEgZmllbGQgZ3JvdXAuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZEdyb3VwIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgQ29tcGlsZSBiaW5kaW5nIG9mIGZpZWxkIGdyb3VwIGV4cHJlc3Npb25zLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRpZiAoZGF0YUZpZWxkR3JvdXA/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGRHcm91cC5hbm5vdGF0aW9ucy5VSS5IaWRkZW4pLCB0cnVlKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcykgPT4ge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMucHVzaChfZ2V0VmlzaWJsZUV4cHJlc3Npb24oeyB0YXJnZXRPYmplY3Q6IGlubmVyRGF0YUZpZWxkIH0gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKG9yKC4uLmZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHByb3BlcnR5IGFuZCBkYXRhRmllbGQuXG4gKlxuICogQHBhcmFtIFtwcm9wZXJ0eV0gUHJvcGVydHksIERhdGFGaWVsZCBvciBOYXZpZ2F0aW9uIFByb3BlcnR5IGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0gaXNHcm91cFxuICogQHJldHVybnMgTGFiZWwgb2YgdGhlIHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNHcm91cCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpIHx8IGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSAocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5uYW1lKSk7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhwcm9wZXJ0eSkpIHtcblx0XHRpZiAoISFpc0dyb3VwICYmIHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0cHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSB8fCAocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0fVxufTtcblxuY29uc3QgX2dldFRvb2x0aXAgPSBmdW5jdGlvbiAoc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UpIHx8IHNvdXJjZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pIHtcblx0XHRyZXR1cm4gc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oc291cmNlLmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMoc291cmNlKSkge1xuXHRcdHJldHVybiBzb3VyY2UuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oc291cmNlLlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc291cmNlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gc291cmNlLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0cmV0dXJuIGRhdGFwb2ludFRhcmdldD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvd1N0YXR1c1Zpc2liaWxpdHkoY29sTmFtZTogc3RyaW5nLCBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwPzogQm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cGF0aEluTW9kZWwoYHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0Y29sTmFtZSxcblx0XHRcdGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXBcblx0XHRdLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgZWFjaCBpZGVudGlmaWVkIHByb3BlcnR5IGNvbnN1bWVkIGJ5IGEgTGluZUl0ZW0uXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBJZGVudGlmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW4gbmFtZXMgd2hpY2ggY2Fubm90IGJlIHNvcnRlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBmb3IgdGhlIExpbmVJdGVtXG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gY29sdW1uc1RvQmVDcmVhdGVkW25hbWVdLFxuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgobmFtZSksXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSByZWxhdGVkIGNvbHVtbiBhbHJlYWR5IGV4aXN0cy5cblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2FzZSAxOiBLZXkgY29udGFpbnMgRGF0YUZpZWxkIHByZWZpeCB0byBlbnN1cmUgYWxsIHByb3BlcnR5IGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSBrZXkgZm9ybWF0LlxuXHRcdFx0Ly8gTmV3IGNyZWF0ZWQgcHJvcGVydHkgY29sdW1uIGlzIHNldCB0byBoaWRkZW4uXG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRDb2x1bW4uYW5ub3RhdGlvblBhdGggIT09IGFubm90YXRpb25QYXRoIHx8IHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Ly8gQ2FzZSAyOiBUaGUgZXhpc3RpbmcgY29sdW1uIHBvaW50cyB0byBhIExpbmVJdGVtIChvcilcblx0XHRcdC8vIENhc2UgMzogVGhpcyBpcyBhIHNlbGYgcmVmZXJlbmNlIGZyb20gYW4gZXhpc3RpbmcgY29sdW1uXG5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7bmFtZX1gO1xuXG5cdFx0XHQvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZWxhdGVkIHByb3BlcnR5IGNvbHVtbiBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24uXG5cdFx0XHRpZiAoIWV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgcHJvcGVydHkgY29sdW1uIHdpdGggJ1Byb3BlcnR5OjonIHByZWZpeCxcblx0XHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiBhcyBpdCBpcyBvbmx5IGNvbnN1bWVkIGJ5IENvbXBsZXggcHJvcGVydHkgaW5mb3MuXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29sdW1uLmlzUGFydE9mTGluZUl0ZW0gPSByZWxhdGVkQ29sdW1uLmlzUGFydE9mTGluZUl0ZW07XG5cdFx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkgJiZcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKG5hbWUpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gVGhlIHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAoKHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mbyk7XG5cdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5tYXAoXG5cdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXR0aW5nIHRoZSBDb2x1bW4gTmFtZVxuICogSWYgaXQgcG9pbnRzIHRvIGEgRGF0YUZpZWxkIHdpdGggb25lIHByb3BlcnR5IG9yIERhdGFQb2ludCB3aXRoIG9uZSBwcm9wZXJ0eSwgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0Ly8gVGhpcyBpcyBuZWVkZWQgYXMgd2UgaGF2ZSBmbGV4aWJpbGl0eSBjaGFuZ2VzIGFscmVhZHkgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIGFnYWluc3Rcblx0aWYgKGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSkge1xuXHRcdHJldHVybiBkYXRhRmllbGQuVmFsdWU/LnBhdGg7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy5wYXRoKSB7XG5cdFx0Ly8gVGhpcyBpcyBmb3IgcmVtb3ZpbmcgZHVwbGljYXRlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlLCAnUHJvZ3Jlc3MnIFByb3BlcnR5IGlzIHJlbW92ZWQgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgRGF0YVBvaW50XG5cdFx0cmV0dXJuIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciB0aGUgaWRlbnRpZmllZCBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHRlY2huaWNhbCBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gY29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlIGZyb20gdGhlIHRhYmxlIHZpc3VhbGl6YXRpb24uXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydHlJbmZvIG9mIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY29sdW1ucy5cbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3QgY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRjb25zdCBrZXkgPSBgUHJvcGVydHlfVGVjaG5pY2FsOjoke25hbWV9YDtcblx0Ly8gVmFsaWRhdGUgaWYgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBoYXNuJ3QgeWV0IGJlZW4gY3JlYXRlZCBvbiBwcmV2aW91cyBpdGVyYXRpb25zLlxuXHRjb25zdCBjb2x1bW5FeGlzdHMgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KTtcblx0Ly8gUmV0cmlldmUgdGhlIHNpbXBsZSBwcm9wZXJ0eSB1c2VkIGJ5IHRoZSBoaWRkZW4gYW5ub3RhdGlvbiwgaXQgd2lsbCBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIG1hbmRhdG9yeSBhdHRyaWJ1dGVzIG9mIG5ld2x5IGNyZWF0ZWQgdGVjaG5pY2FsIHByb3BlcnR5LiBGb3IgZS5nLiByZWxhdGl2ZVBhdGhcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHQhY29sdW1uRXhpc3RzICYmIChjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUgJiYgIWNvbHVtbi5wcm9wZXJ0eUluZm9zKSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pITtcblx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IHRlY2huaWNhbENvbHVtbjogVGVjaG5pY2FsQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRsYWJlbDogYWRkaXRpb25hbFByb3BlcnR5LmxhYmVsLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGFkZGl0aW9uYWxQcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGF2YWlsYWJpbGl0eTogXCJIaWRkZW5cIixcblx0XHRcdG5hbWU6IGtleSxcblx0XHRcdHJlbGF0aXZlUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LnJlbGF0aXZlUGF0aCxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGlzS2V5OiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBudWxsLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmFsc2UsXG5cdFx0XHRhZ2dyZWdhdGFibGU6IGZhbHNlLFxuXHRcdFx0ZXh0ZW5zaW9uOiB7XG5cdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlLFxuXHRcdFx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29sdW1ucy5wdXNoKHRlY2huaWNhbENvbHVtbik7XG5cdFx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSB0ZWNobmljYWxDb2x1bW4ubmFtZTtcblx0fVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBkYXRhIGZpZWxkIGxhYmVscyBoYXZlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGZpZWxkR3JvdXBOYW1lIFRoZSBgRGF0YUZpZWxkYCBuYW1lIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGBzaG93RGF0YUZpZWxkc0xhYmVsYCB2YWx1ZSBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbiAoZmllbGRHcm91cE5hbWU6IHN0cmluZywgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29sdW1ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk/LmNvbHVtbnM7XG5cdGNvbnN0IGFDb2x1bW5LZXlzID0gb0NvbHVtbnMgJiYgT2JqZWN0LmtleXMob0NvbHVtbnMpO1xuXHRyZXR1cm4gKFxuXHRcdGFDb2x1bW5LZXlzICYmXG5cdFx0ISFhQ29sdW1uS2V5cy5maW5kKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBlbnRpdHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgYERhdGFGaWVsZGAgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhcbiAqL1xuY29uc3QgX2dldFJlbGF0aXZlUGF0aCA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBzdHJpbmcge1xuXHRsZXQgcmVsYXRpdmVQYXRoID0gXCJcIjtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8ucGF0aDtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gZGF0YUZpZWxkPy5UYXJnZXQ/LnZhbHVlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbkdyb3VwOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKSB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cblx0aWYgKGlTbGFzaEluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBwYXRoO1xuXHR9XG5cdHJldHVybiBpc0xhc3RQYXJ0ID8gcGF0aC5zdWJzdHJpbmcoaVNsYXNoSW5kZXggKyAxLCBwYXRoLmxlbmd0aCkgOiBwYXRoLnN1YnN0cmluZygwLCBpU2xhc2hJbmRleCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGNvbHVtbiBjb250YWlucyBhIG11bHRpLXZhbHVlIGZpZWxkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRGF0YUZpZWxkIGNvcnJlc3BvbmRzIHRvIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKi9cbmNvbnN0IF9pc0NvbHVtbk11bHRpVmFsdWVkID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUGF0aEV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSAmJiAvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2dldEZpbHRlckZ1bmN0aW9ucyhDb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkIHtcblx0aWYgKE1vZGVsSGVscGVyLmlzU2luZ2xldG9uKENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBjYXBhYmlsaXRpZXMgPSBDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcztcblx0cmV0dXJuIGNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zIHx8IENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9ucztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCk6IEZvcm1hdE9wdGlvbnNUeXBlIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiB7XG5cdFx0XHRcdHRleHRMaW5lc0VkaXQ6IDQsXG5cdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnNcblx0XHQgIH07XG59XG5cbmZ1bmN0aW9uIF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSwgbmFtZTogc3RyaW5nKSB7XG5cdGNvbnN0IGFTZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IGJTZW1hbnRpY0tleUZvdW5kID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0dmFsdWVzOiBhU2VtYW50aWNLZXlWYWx1ZXMsXG5cdFx0c2VtYW50aWNLZXlGb3VuZDogYlNlbWFudGljS2V5Rm91bmRcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IHN0cmluZ1tdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluZGV4T2YodG1wKSA+PSAwKSkge1xuXHRcdFx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5VmFsdWVzW2ldO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eVBhdGhcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSkge1xuXHRjb25zdCBhUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0bGV0IF9wcm9wZXJ0aWVzRm91bmQ6IHsgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogYm9vbGVhbjsgZmllbGRHcm91cFByb3BlcnR5UGF0aD86IHN0cmluZyB9ID0ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGZhbHNlLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAgJiZcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IGlubmVyRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJlxuXHRcdFx0XHRpbm5lckRhdGFGaWVsZC5WYWx1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFQcm9wZXJ0aWVzLnB1c2goaW5uZXJEYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRfcHJvcGVydGllc0ZvdW5kID0gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzLCBhUHJvcGVydGllcyk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBfcHJvcGVydGllc0ZvdW5kLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAsXG5cdFx0cHJvcGVydHlQYXRoOiBfcHJvcGVydGllc0ZvdW5kLmZpZWxkR3JvdXBQcm9wZXJ0eVBhdGhcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgd2l0aCBkcmFmdEluZGljYXRvciBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEBwYXJhbSBpc0ZpZWxkR3JvdXBDb2x1bW5cbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihcblx0bmFtZTogc3RyaW5nLFxuXHRzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LFxuXHRpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4sXG5cdGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgbnVsbFxuKSB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleS5zZW1hbnRpY0tleUZvdW5kKSB7XG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9uc09iajogRm9ybWF0T3B0aW9uc1R5cGUgPSB7XG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogdHJ1ZSxcblx0XHRcdHNlbWFudGlja2V5czogc2VtYW50aWNLZXkudmFsdWVzLFxuXHRcdFx0b2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHk6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdFx0aWYgKGlzRmllbGRHcm91cENvbHVtbiAmJiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zT2JqLm9iamVjdFN0YXR1c1RleHRWaXNpYmlsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSk7XG5cdFx0XHRmb3JtYXRPcHRpb25zT2JqLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdE9wdGlvbnNPYmo7XG5cdH0gZWxzZSBpZiAoIXNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRyZXR1cm4ge307XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpZWxkR3JvdXBOYW1lOiBuYW1lLFxuXHRcdFx0b2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHk6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZCwgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHQvL0V2YWx1YXRlIGRlZmF1bHQgSW1wb3J0YW5jZSBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcblx0bGV0IGZpZWxkc1dpdGhJbXBvcnRhbmNlLFxuXHRcdG1hcFNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0Ly9DaGVjayBpZiBzZW1hbnRpY0tleXMgYXJlIGRlZmluZWQgYXQgdGhlIEVudGl0eVNldCBsZXZlbFxuXHRpZiAoc2VtYW50aWNLZXlzICYmIHNlbWFudGljS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bWFwU2VtYW50aWNLZXlzID0gc2VtYW50aWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cEhhc1NlbWFudGljS2V5ID1cblx0XHRcdFx0ZmllbGRHcm91cERhdGEgJiZcblx0XHRcdFx0ZmllbGRHcm91cERhdGEuc29tZShmdW5jdGlvbiAoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0XHRcdG1hcFNlbWFudGljS2V5cy5pbmNsdWRlcygoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvL0lmIGEgRmllbGRHcm91cCBjb250YWlucyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0XHRpZiAoZmllbGRHcm91cEhhc1NlbWFudGljS2V5KSB7XG5cdFx0XHRcdHJldHVybiBJbXBvcnRhbmNlLkhpZ2g7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIHRoZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBJbXBvcnRhbmNlIHdlIHRha2UgaXRcblx0XHRcdFx0aWYgKGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBlbHNlIHRoZSBoaWdoZXN0IGltcG9ydGFuY2UgKGlmIGFueSkgaXMgcmV0dXJuZWRcblx0XHRcdFx0ZmllbGRzV2l0aEltcG9ydGFuY2UgPVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdFx0ZmllbGRHcm91cERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXRlbT8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0XHQvL0lmIHRoZSBjdXJyZW50IGZpZWxkIGlzIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUgJiZcblx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUucGF0aClcblx0XHQ/IEltcG9ydGFuY2UuSGlnaFxuXHRcdDogX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGNvbnN0IHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XSlbMF07XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRjb25zdCB0YWJsZUNvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKVxuXHRcdCk7XG5cblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgobGluZUl0ZW0pID0+IHtcblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogY29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoaXMgTGluZUl0ZW0uXG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShsaW5lSXRlbSwgY29udmVydGVyQ29udGV4dCwgdGFibGVUeXBlKTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBncm91cFBhdGg6IHN0cmluZyA9IF9zbGljZUF0U2xhc2gocmVsYXRpdmVQYXRoLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4gPSBncm91cFBhdGguaW5kZXhPZihgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cH1gKSA+IC0xO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbDogYm9vbGVhbiA9IGlzRmllbGRHcm91cENvbHVtblxuXHRcdFx0XHQ/IF9nZXRTaG93RGF0YUZpZWxkc0xhYmVsKG5hbWUsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShcblx0XHRcdFx0Z2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cywgaXNGaWVsZEdyb3VwQ29sdW1uLCBsaW5lSXRlbSlcblx0XHRcdCk7XG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKGxpbmVJdGVtKTtcblx0XHRcdH1cblx0XHRcdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHQvL2V4Y2x1ZGUgdGhlIHR5cGVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlIEV4cG9ydCAoZ2VuZXJhdGVzIGVycm9yIG9uIEV4cG9ydCBhcyBQREYpXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZyxcblx0XHRcdFx0XHR0eXBlOiBkYXRhVHlwZSA/IF9nZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdFx0ZGVsaW1pdGVyOiBkYXRhVHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcHJvcGVydHlUeXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGF0YVR5cGUpIHtcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhsaW5lSXRlbSwgZGF0YVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdFx0XHRjbGFzc05hbWU6IGRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25zdHJhaW50czogeyAuLi5wcm9wZXJ0eVR5cGVDb25maWc/LmNvbnN0cmFpbnRzIH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmICghZGF0YVR5cGUgfHwgIXR5cGVDb25maWcpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYXJ0c1xuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IF9pc0NvbHVtbk11bHRpVmFsdWVkKGxpbmVJdGVtLCB0YWJsZUNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc29ydGFibGUgPSAhaXNNdWx0aVZhbHVlICYmIF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIG5vblNvcnRhYmxlQ29sdW1ucyk7XG5cdFx0XHRjb25zdCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGxpbmVJdGVtKSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwobGluZUl0ZW0pIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgobGluZUl0ZW0uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGxpbmVJdGVtKSA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbDogc2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID8gcmVsYXRlZFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zOiBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gYWRkaXRpb25hbFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBleHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0d2lkdGg6IChsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aD8udmFsdWVPZigpIGFzIHN0cmluZykgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGxpbmVJdGVtIGFzIERhdGFGaWVsZFR5cGVzLCBzZW1hbnRpY0tleXMpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3MsXG5cdFx0XHRcdHRpbWV6b25lVGV4dDogZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lLFxuXHRcdFx0XHRpc1BhcnRPZkxpbmVJdGVtOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc1Rvb2x0aXAgPSBfZ2V0VG9vbHRpcChsaW5lSXRlbSk7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLnB1c2goLi4ucmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlICYmIGNvbHVtbi5leHBvcnRTZXR0aW5ncykge1xuXHRcdFx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0XHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncy50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgocmVsYXRlZFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbcmVsYXRlZFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lXTtcblxuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIGEgbXVsdGktdmFsdWUsIHJlbGF0ZWQgcHJvcGVydGllcyBjYW5ub3QgYmUgc29ydGVkIGFzIHdlIGdvIHRocm91Z2ggYSAxLW4gcmVsYXRpb25cblx0XHRcdFx0aWYgKGlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucy5wdXNoKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0cmV0dXJuIGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZVR5cGUsXG5cdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdCk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzIGZyb20gdGhlIG1hbmlmZXN0IGFuZCBjaGVja3MgYWdhaW5zdCBleGlzdGluZyBwcm9wZXJ0aWVzIGFscmVhZHkgYWRkZWQgYnkgYW5ub3RhdGlvbnMuXG4gKiBJZiBhIG5vdCB5ZXQgc3RvcmVkIHByb3BlcnR5IGlzIGZvdW5kIGl0IGFkZHMgaXQgZm9yIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBvbmx5IHRvIHRoZSBhbm5vdGF0aW9uQ29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllc1xuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IF9nZXRQcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGxldCBtYXRjaGVkUHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0bWF0Y2hlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZChmdW5jdGlvbiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHByb3BlcnR5UGF0aCAmJiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ubmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdFx0XHRcdHsgW3Byb3BlcnR5UGF0aF06IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSB9LFxuXHRcdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRbXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKHJlbGF0ZWRDb2x1bW5zWzBdKTtcblx0XHRcdFx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zWzBdLm5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gYHske3Byb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSl9fWA7XG5cdFx0fSlcblx0XHQuam9pbihgJHtcIlxcblwifWApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICpcbiAqIFRoZXNlIG1heSBiZSBjdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgc2xvdCBjb2x1bW5zIGNvbWluZyB0aHJvdWdoXG4gKiBhIGJ1aWxkaW5nIGJsb2NrLCBvciBhbm5vdGF0aW9uIGNvbHVtbnMgdG8gb3ZlcndyaXRlIGFubm90YXRpb24tYmFzZWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1xuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiB8IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlPixcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4ge1xuXHRjb25zdCBpbnRlcm5hbENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0Q29sdW1uPiA9IHt9O1xuXG5cdGZ1bmN0aW9uIGlzQW5ub3RhdGlvbkNvbHVtbihcblx0XHRjb2x1bW46IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiB8IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRcdGtleTogc3RyaW5nXG5cdCk6IGNvbHVtbiBpcyBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW5zLnNvbWUoKGFubm90YXRpb25Db2x1bW4pID0+IGFubm90YXRpb25Db2x1bW4ua2V5ID09PSBrZXkpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gQ29sdW1uVHlwZS5TbG90O1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNDdXN0b21Db2x1bW4obWFuaWZlc3RDb2x1bW46IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbik6IG1hbmlmZXN0Q29sdW1uIGlzIE1hbmlmZXN0RGVmaW5lZEN1c3RvbUNvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IHVuZGVmaW5lZCAmJiAhIW1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvczogc3RyaW5nW10sIGFubm90YXRpb25UYWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdKSB7XG5cdFx0Y29uc3Qgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRwcm9wZXJ0eUluZm9zLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uVGFibGVDb2x1bW5zLmZvckVhY2goKHByb3ApID0+IHtcblx0XHRcdFx0aWYgKHByb3AubmFtZSA9PT0gcHJvcGVydHkpIHtcblx0XHRcdFx0XHRwcm9wLnNvcnRhYmxlID0gbm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHkucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikpID09PSAtMTtcblx0XHRcdFx0XHRwcm9wLmlzR3JvdXBhYmxlID0gcHJvcC5zb3J0YWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGtleSBpbiBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb2x1bW4gPSBjb2x1bW5zW2tleV07XG5cdFx0S2V5SGVscGVyLnZhbGlkYXRlS2V5KGtleSk7XG5cblx0XHQvLyBCYXNlVGFibGVDb2x1bW5cblx0XHRjb25zdCBiYXNlVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHdpZHRoOiBtYW5pZmVzdENvbHVtbi53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cblx0XHRpZiAoaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uOiBDdXN0b21FbGVtZW50PEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KVxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHRcdFx0c2V0dGluZ3M6IG1hbmlmZXN0Q29sdW1uLnNldHRpbmdzLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShtYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zKVxuXHRcdFx0fTtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdFx0bWFuaWZlc3RDb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBiYXNlTWFuaWZlc3RDb2x1bW4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aGVhZGVyOiBtYW5pZmVzdENvbHVtbi5oZWFkZXIsXG5cdFx0XHRcdGltcG9ydGFuY2U6IG1hbmlmZXN0Q29sdW1uPy5pbXBvcnRhbmNlIHx8IEltcG9ydGFuY2UuTm9uZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduIHx8IEhvcml6b250YWxBbGlnbi5CZWdpbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RDb2x1bW4udGVtcGxhdGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBwcm9wZXJ0eUluZm9zXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcyksXG5cdFx0XHRcdFx0XHRcdHdyYXA6ICEhKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSlcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHRuYW1lOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHQvL05lZWRlZCBmb3IgTURDOlxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IDQgfSxcblx0XHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogZmFsc2UsXG5cdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiBtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0X3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvcywgYW5ub3RhdGlvbkNvbHVtbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBpc0FuYWx5dGljYWxUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdGNvbnN0IGlzUmVzcG9uc2l2ZVRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy5wZXJzb25hbGl6YXRpb247XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGFibGUgcGVyc29uYWxpemF0aW9uIGZ1bGx5IGVuYWJsZWQuXG5cdFx0XHRzd2l0Y2ggKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkFuYWx5dGljYWxUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cCxBZ2dyZWdhdGVcIjtcblx0XHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cFwiO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZ3JvdXAgJiYgKGlzQW5hbHl0aWNhbFRhYmxlIHx8IGlzUmVzcG9uc2l2ZVRhYmxlKSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmxlbmd0aCA+IDAgPyBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgfHwgX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdFx0Ly8gRW5hYmxlIHRhYmxlIGZpbHRlcmluZyBieSBkZWZhdWx0IG9ubHkgaW4gY2FzZSBvZiBDb250cm9sIGxldmVsIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0XHRcdFx0Ly8gT3Igd2hlbiB0aGUgTFIgZmlsdGVyIGJhciBpcyBoaWRkZW4gdmlhIG1hbmlmZXN0IHNldHRpbmdcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0aWYgKGlzUmVzcG9uc2l2ZVRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICpcbiAqIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG4gKiBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmXG5cdFx0IWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpICYmXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgVGFibGUgY29sdW1ucyBwcm9jZXNzZWQgYnkgdGhlIGNvbnZlcnRlclxuICogQHJldHVybnMgU29ydCBjb25kaXRpb25zIGZvciBhIHByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRTb3J0Q29uZGl0aW9ucyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBDdXJyZW50bHkgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkIGFzIHNvcnRlclxuXHRjb25zdCBub25Tb3J0YWJsZVByb3BlcnRpZXMgPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdGxldCBzb3J0Q29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlNvcnRPcmRlcikge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlclR5cGVbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSB7XG5cdFx0XHRzb3J0ZXJzOiBzb3J0ZXJzXG5cdFx0fTtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Tb3J0T3JkZXIuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25Qcm9wZXJ0eSA9IGNvbmRpdGlvbi5Qcm9wZXJ0eTtcblx0XHRcdGlmIChjb25kaXRpb25Qcm9wZXJ0eSAmJiBub25Tb3J0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihjb25kaXRpb25Qcm9wZXJ0eS4kdGFyZ2V0Py5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgbGV2ZWwgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Jbml0aWFsRXhwYW5zaW9uTGV2ZWw/LnZhbHVlT2YoKTtcblxuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgcHJvcGVydHlJbmZvOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgYW5ub3RhdGlvbkNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRwYXRocy5mb3JFYWNoKChjdXJyZW50UGF0aCkgPT4ge1xuXHRcdGlmIChjdXJyZW50UGF0aD8udmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRyZXR1cm4gIWFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY3VycmVudFBhdGg/LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHRhYmxlVHlwZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGxldCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnk7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0YUdyb3VwQnkgPSBhR3JvdXBCeS5zbGljZSgwLCAxKTtcblx0XHR9XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblxuXHRcdGdyb3VwQ29uZGl0aW9ucyA9IGFHcm91cExldmVscy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh7IGdyb3VwTGV2ZWxzOiBhR3JvdXBMZXZlbHMgfSkgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGdyb3VwQ29uZGl0aW9ucztcbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgY29sdW1uJ3MgcHJvcGVydHlJbmZvcyBvZiBhIGFuYWx5dGljYWwgdGFibGUgaW50ZWdyYXRpbmcgYWxsIGV4dGVuc2lvbnMgYW5kIGJpbmRpbmctcmVsZXZhbnQgcHJvcGVydHkgaW5mbyBwYXJ0LlxuICpcbiAqIEBwYXJhbSB0YWJsZVZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gdG8gYmUgdXBkYXRlZFxuICovXG5cbmZ1bmN0aW9uIF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbikge1xuXHRjb25zdCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSA9IE9iamVjdC5rZXlzKHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzISkuZmluZCgoYWdncmVnYXRlKSA9PiBhZ2dyZWdhdGUgPT09IGNvbHVtbi5uYW1lKTtcblx0XHRpZiAoYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyFbYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lXTtcblx0XHRcdGNvbHVtbi5hZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0Y29sdW1uLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlOiBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24uZGVmYXVsdEFnZ3JlZ2F0ZSA/PyB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5SW5mbykgPT4ge1xuXHRcdFx0XHQvLyBDcmVhdGUgcHJvcGVydHlJbmZvIGZvciBlYWNoIGFkZGl0aW9uYWwgcHJvcGVydHkuXG5cdFx0XHRcdC8vIFRoZSBuZXcgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5X1RlY2huaWNhbDo6JyBmb3IgdW5pcXVlbmVzcyBhbmQgaXQgaGFzIGJlZW4gbmFtZWQgdGVjaG5pY2FsIHByb3BlcnR5IGFzIGl0IHJlcXVpcmVzIGRlZGljYXRlZCBNREMgYXR0cmlidXRlcyAodGVjaG5pY2FsbHlHcm91cGFibGUgYW5kIHRlY2huaWNhbGx5QWdncmVnYXRhYmxlKS5cblx0XHRcdFx0Y3JlYXRlVGVjaG5pY2FsUHJvcGVydHkoYWRkaXRpb25hbFByb3BlcnR5SW5mbywgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLm1hcChcblx0XHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHRcdCk7XG5cdFx0XHQvLyBBZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHRoZSBjb21wbGV4IHByb3BlcnR5IHVzaW5nIHRoZSBoaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/LmNvbmNhdChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVzW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXG5cdFx0YWdncmVnYXRlQ29uZGl0aW9ucyA9IEpTT04uc3RyaW5naWZ5KGFnZ3JlZ2F0ZXMpO1xuXHR9XG5cblx0cmV0dXJuIGFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdHlwZU5hbWVQbHVyYWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWVQbHVyYWw7XG5cdGNvbnN0IHRpdGxlID0gdHlwZU5hbWVQbHVyYWwgJiYgY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHR5cGVOYW1lUGx1cmFsKSk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGhhc0Fic29sdXRlUGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwLFxuXHRcdHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pLFxuXHRcdGlkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGdldFRhYmxlSUQodmlzdWFsaXphdGlvblBhdGgpIDogZ2V0VGFibGVJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCksIFwiTGluZUl0ZW1cIik7XG5cdGNvbnN0IHRhcmdldENhcGFiaWxpdGllcyA9IGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjcmVhdGlvbkJlaGF2aW91ciA9IF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dmlzdWFsaXphdGlvblBhdGhcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLm1vZGUgYXMgQ3JlYXRpb25Nb2RlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdCk7XG5cblx0Y29uc3QgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXREZWxldGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkID0gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29tcGlsZUV4cHJlc3Npb24oY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pID09PSBcImZhbHNlXCJcblx0KTtcblxuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZShcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRoYXNBYnNvbHV0ZVBhdGgsXG5cdFx0dGFyZ2V0Q2FwYWJpbGl0aWVzLFxuXHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb25cblx0KTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpIGFzIG51bWJlcjtcblx0fVxuXG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBpc1NlYXJjaGFibGUgPSBpc1BhdGhTZWFyY2hhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zID0ge1xuXHRcdGNyZWF0ZTogZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0ZGVsZXRlOiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRwYXN0ZTogZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGVcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbilcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlOiBzdHJpbmcsIGlzQ29tcGxleFByb3BlcnR5ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRpZiAoaXNDb21wbGV4UHJvcGVydHkpIHtcblx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJOdW1iZXJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVPZlRpbWVcIjpcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkJvb2xlYW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBleHBvcnREYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBzcGxpdCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZykge1xuXHRjb25zdCBbdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRsZXQgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lcy5pbmRleE9mKHByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24/LlRleHQ/LnRvU3RyaW5nKCksXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuXG5mdW5jdGlvbiBfZ2V0TXVsdGlTZWxlY3RNb2RlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpIHtcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0OlxuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSBmYWxzZSA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdHJldHVybiBtdWx0aVNlbGVjdE1vZGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZVR5cGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVUeXBlIHtcblx0bGV0IHRhYmxlVHlwZSA9IHRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0LyogIE5vdywgd2Uga2VlcCB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgbWFuaWZlc3QsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gZXJyb3JzLlxuXHRcdFdlIG9ubHkgY2hhbmdlIGlmIHdlJ3JlIG5vdCBvbiBkZXNrdG9wIGZyb20gQW5hbHl0aWNhbC9UcmVlIHRvIFJlc3BvbnNpdmUuXG5cdCAqL1xuXHRpZiAoKHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiB8fCB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpKSB7XG5cdFx0dGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0fVxuXHRyZXR1cm4gdGFibGVUeXBlO1xufVxuXG5mdW5jdGlvbiBfZ2V0R3JpZFRhYmxlTW9kZShcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGlzVGVtcGxhdGVMaXN0UmVwb3J0OiBib29sZWFuXG4pOiB7IHJvd0NvdW50TW9kZT86IEdyaWRUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiR3JpZFRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50IDogNVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25kZW5zZWRUYWJsZUxheW91dChfdGFibGVUeXBlOiBUYWJsZVR5cGUsIF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkICYmIF90YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0XHQ/IF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0XG5cdFx0OiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlU2VsZWN0aW9uTGltaXQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0ID09PSAwID8gMCA6IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAyO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVycyhcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0cXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSxcblx0cXVpY2tTZWxlY3Rpb25WYXJpYW50OiB1bmtub3duLFxuXHRwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKSB7XG5cdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRxdWlja0ZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHF1aWNrRmlsdGVyczoge1xuXHRcdFx0ZW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKSB7XG5cdGlmICghbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10gPSBbXTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0bGV0IHF1aWNrU2VsZWN0aW9uVmFyaWFudDtcblx0bGV0IGZpbHRlcnM7XG5cdHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8ucGF0aHM/LmZvckVhY2goKHBhdGg6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9KSA9PiB7XG5cdFx0cXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gdGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRmaWx0ZXJzID0gX2dldEZpbHRlcnModGFibGVTZXR0aW5ncywgcXVpY2tGaWx0ZXJQYXRocywgcXVpY2tTZWxlY3Rpb25WYXJpYW50LCBwYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSlcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyhyZWxhdGl2ZVBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCByZWxhdGl2ZVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcGVydHkpID0+IHtcblx0XHRcdGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscy5wdXNoKGdldExhYmVsKG5hdlByb3BlcnR5KSB8fCBuYXZQcm9wZXJ0eS5uYW1lKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hlY2tDb25kZW5zZWRMYXlvdXQgPSBmYWxzZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IF9tYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHRjb25zdCBjcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gIV9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpO1xuXHRjb25zdCBlbmFibGVQYXN0ZSA9XG5cdFx0dGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSA6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiOyAvLyBQYXN0ZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGV4Y2VwdGVkIGZvciBPUFxuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRjb25zdCBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIgPSB0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ID8gXCJBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyXCIgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgPSBjaGVja0NvbmRlbnNlZExheW91dCAmJiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk7XG5cdGNvbnN0IG9GaWx0ZXJDb25maWd1cmF0aW9uID0gX2dldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgdGFibGVUeXBlOiBUYWJsZVR5cGUgPSBfZ2V0VGFibGVUeXBlKHRhYmxlU2V0dGluZ3MsIGFnZ3JlZ2F0aW9uSGVscGVyLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZ3JpZFRhYmxlUm93TW9kZSA9IF9nZXRHcmlkVGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKSksXG5cdFx0ZW5hYmxlTWFzc0VkaXQ6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZU1hc3NFZGl0LFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IHRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA/PyBmYWxzZSxcblx0XHRzaG93Um93Q291bnQ6ICF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKClcblx0fTtcblxuXHRjb25zdCB0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7IC4uLm9Db25maWd1cmF0aW9uLCAuLi5ncmlkVGFibGVSb3dNb2RlLCAuLi5vRmlsdGVyQ29uZmlndXJhdGlvbiB9O1xuXG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyID0gdGFibGVTZXR0aW5ncy5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdH1cblxuXHRyZXR1cm4gdGFibGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbmZpZyhvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGxldCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0aWYgKCFvVGFyZ2V0TWFwcGluZyAmJiAob1Byb3BlcnR5IGFzIFByb3BlcnR5KT8udGFyZ2V0VHlwZSAmJiAob1Byb3BlcnR5IGFzIFByb3BlcnR5KS50YXJnZXRUeXBlPy5fdHlwZSA9PT0gXCJUeXBlRGVmaW5pdGlvblwiKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWygob1Byb3BlcnR5IGFzIFByb3BlcnR5KS50YXJnZXRUeXBlIGFzIFR5cGVEZWZpbml0aW9uKS51bmRlcmx5aW5nVHlwZV07XG5cdH1cblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdFx0dHlwZTogb1RhcmdldE1hcHBpbmc/LnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGlnaXRTZXF1ZW5jZX1gXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRnZXRUYWJsZUNvbHVtbnMsXG5cdGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFJvd1N0YXR1c1Zpc2liaWxpdHksXG5cdGdldEltcG9ydGFuY2UsXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BK1BLQSxVQUFVLEVBTWY7RUFBQSxXQU5LQSxVQUFVO0lBQVZBLFVB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
|
|
2646
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZW5hYmxlZCIsInZpc2libGUiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJjb21tYW5kIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImFubm90YXRpb25Db2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyIsIm1hbmlmZXN0Q29sdW1ucyIsImdldENvbHVtbnNGcm9tTWFuaWZlc3QiLCJjb2x1bW5zIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ3aWR0aCIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMiLCJTZXQiLCJmb3JFYWNoIiwidGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImRlZmluaXRpb25zIiwiYW5ub3RhdGlvbiIsImFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJyZXN1bHQiLCJyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiZGVmYXVsdEFnZ3JlZ2F0ZSIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSIsImZvdW5kQ29sdW1uIiwicHVzaCIsImxlbmd0aCIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiZW5hYmxlJHNlbGVjdCIsImVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCIsImFnZ3JlZ2F0ZXMiLCJfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUJhc2ljU2VhcmNoIiwiaW5kZXhPZiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiaW5jbHVkZXMiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImZpbmRDb2x1bW5CeVBhdGgiLCJvQ29sdW1uIiwib1RhYmxlQ29sdW1uIiwib1Byb3BlcnR5Iiwib1Byb3AiLCJvVW5pdCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9UaW1lem9uZSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5Iiwic1RpbWV6b25lIiwiQ29tbW9uIiwiVGltZXpvbmUiLCJvVW5pdENvbHVtbiIsInNVbml0IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJ1bml0VGV4dCIsIm9UaW1lem9uZUNvbHVtbiIsInRpbWV6b25lIiwidGltZXpvbmVUZXh0IiwidG9TdHJpbmciLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiVUkiLCJIZWFkZXJJbmZvIiwiVGl0bGUiLCJWYWx1ZSIsInNlbWFudGljS2V5QW5ub3RhdGlvbnMiLCJTZW1hbnRpY0tleSIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInZpZXdDb25maWd1cmF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlckluZm9UaXRsZSIsInNlbWFudGljS2V5cyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwiQ2FwYWJpbGl0aWVzIiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJBY3Rpb25UYXJnZXQiLCJpc0JvdW5kIiwic291cmNlRW50aXR5VHlwZSIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsInZhbHVlT2YiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwic1BhdGgiLCJzdWJzdHJpbmciLCJhU3BsaXRQYXRoIiwic3BsaXQiLCJzTmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwiY29uc3RhbnQiLCJ1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0IiwiZGF0YUZpZWxkSWQiLCJzb21lIiwiYWN0aW9uS2V5IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwibWFuaWZlc3RBY3Rpb25JZCIsImdlbmVyYXRlIiwiQWN0aW9uIiwiU2VtYW50aWNPYmplY3QiLCJoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsImFjdGlvbiIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyIsImFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJiTWFzc0VkaXRFbmFibGVkIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsIk11bHRpIiwiQXV0byIsIlNpbmdsZSIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJmaWx0ZXIiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJzRW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIkFjdGlvblR5cGUiLCJDb3B5IiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwibm90IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInRleHQiLCJMYWJlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiRGVmYXVsdCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJEZXRlcm1pbmluZyIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwic291cmNlVHlwZSIsInBhcmFtZXRlcnMiLCJpc0NvbGxlY3Rpb24iLCJ0YWJsZUFjdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJ0YWJsZVR5cGUiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJNb2RlbEhlbHBlciIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsIlR5cGVHdWFyZHMiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJJc0luYWN0aXZlIiwiY29sdW1uc1RvQmVDcmVhdGVkIiwibm9uU29ydGFibGVDb2x1bW5zIiwidGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbiIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsInJlbGF0ZWRDb2x1bW5zIiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJleHBvcnRUeXBlIiwic0RhdGVJbnB1dEZvcm1hdCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiY29uc3RyYWludHMiLCJfaXNFeHBvcnRhYmxlQ29sdW1uIiwiaW5wdXRGb3JtYXQiLCJzY2FsZSIsImRlbGltaXRlciIsImNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyIsIl9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJnZXRMYWJlbCIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwidGFyZ2V0VmFsdWVmcm9tRFAiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCIsInByb3BlcnR5VHlwZSIsImRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSIsImlzUHJvcGVydHkiLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsIlRhcmdldCIsIiR0YXJnZXQiLCJNZWRpYVR5cGUiLCJ0ZXJtIiwiaXNVUkwiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInByb3BlcnR5VmFsdWUiLCJpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkIiwiaXNBbmFseXRpY2FsTGVhZiIsIl9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJkYXRhRmllbGRHcm91cCIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImRhdGFGaWVsZERlZmF1bHQiLCJpc0RhdGFGaWVsZFR5cGVzIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSIsImNvbE5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsImlzUGFydE9mTGluZUl0ZW0iLCJleGlzdGluZ0NvbHVtbiIsIm5ld05hbWUiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSIsInJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwIiwiY29sdW1uRXhpc3RzIiwiYWRkaXRpb25hbFByb3BlcnR5IiwidGVjaG5pY2FsQ29sdW1uIiwiYWdncmVnYXRhYmxlIiwiZXh0ZW5zaW9uIiwidGVjaG5pY2FsbHlHcm91cGFibGUiLCJ0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSIsIl9nZXRTaG93RGF0YUZpZWxkc0xhYmVsIiwiZmllbGRHcm91cE5hbWUiLCJvQ29sdW1ucyIsImFDb2x1bW5LZXlzIiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsImxhc3RJbmRleE9mIiwiX2lzQ29sdW1uTXVsdGlWYWx1ZWQiLCJwcm9wZXJ0eU9iamVjdFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiX2lzQ29sdW1uU29ydGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJmaWx0ZXJGdW5jdGlvbnMiLCJfZ2V0RmlsdGVyRnVuY3Rpb25zIiwiaXNBcnJheSIsIkNvbnZlcnRlckNvbnRleHQiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwidmFsdWVzIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZvcm1hdE9wdGlvbnNPYmoiLCJoYXNEcmFmdEluZGljYXRvciIsInNlbWFudGlja2V5cyIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiX2dldERhdGFGaWVsZEltcG9ydGFuY2UiLCJfZ2V0TWF4SW1wb3J0YW5jZSIsImZpZWxkcyIsIm1heEltcE51bWJlciIsImltcE51bWJlciIsIkRhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIiwiZmllbGQiLCJmaWVsZHNXaXRoSW1wb3J0YW5jZSIsIm1hcFNlbWFudGljS2V5cyIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImRhdGFGaWVsZFRhcmdldCIsImZpZWxkR3JvdXBEYXRhIiwiZmllbGRHcm91cEhhc1NlbWFudGljS2V5IiwiZmllbGRHcm91cERhdGFGaWVsZCIsIkhpZ2giLCJpdGVtIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwidGFibGVDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldFRhcmdldE9iamVjdFBhdGgiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5Iiwic0xhYmVsIiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwiaXNNdWx0aVZhbHVlIiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiSFRNTDUiLCJDc3NEZWZhdWx0cyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsInJlc29sdmVQYXRoIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiaW50ZXJuYWxDb2x1bW5zIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaXNTbG90Q29sdW1uIiwibWFuaWZlc3RDb2x1bW4iLCJTbG90IiwiaXNDdXN0b21Db2x1bW4iLCJfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyIsImFubm90YXRpb25UYWJsZUNvbHVtbnMiLCJwcm9wIiwicmVwbGFjZSIsInZhbGlkYXRlS2V5IiwiYmFzZVRhYmxlQ29sdW1uIiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW4iLCJpc0FjdGlvbk5hdmlnYWJsZSIsImJhc2VNYW5pZmVzdENvbHVtbiIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiaWQiLCJjdXN0b21UYWJsZUNvbHVtbiIsIm1lc3NhZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbkNvbHVtbnMiLCJJbnZhbGlkS2V5IiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImlzQW5hbHl0aWNhbFRhYmxlIiwiaXNSZXNwb25zaXZlVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiTGlzdFJlcG9ydCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJsZXZlbCIsIkluaXRpYWxFeHBhbnNpb25MZXZlbCIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJncm91cExldmVscyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJUb3RhbCIsImFUb3RhbHMiLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwidGl0bGUiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiZ2V0VGFibGVJRCIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQiLCJnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsInN0YW5kYXJkQWN0aW9ucyIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJwYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJtYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJjcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93IiwiZW50aXR5TmFtZSIsImNvbGxlY3Rpb24iLCJuYXZpZ2F0aW9uUGF0aCIsInJvdyIsImlzSW5EaXNwbGF5TW9kZSIsImF1dG9CaW5kT25Jbml0Iiwic2VhcmNoYWJsZSIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsImlzQ29tcGxleFByb3BlcnR5IiwiZXhwb3J0RGF0YVR5cGUiLCJ0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3Vic3RyIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIl9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSIsImlzSXBob25lIiwiZW5hYmxlRnVsbFNjcmVlbiIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVUeXBlIiwiaXNEZXNrdG9wIiwiX2dldEdyaWRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJzIiwiaGlkZVRhYmxlVGl0bGUiLCJoZWFkZXJWaXNpYmxlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0eSIsImNoZWNrQ29uZGVuc2VkTGF5b3V0IiwiX21hbmlmZXN0V3JhcHBlciIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImlzUGhvbmUiLCJ0ZW1wbGF0ZVR5cGUiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCIsIm9GaWx0ZXJDb25maWd1cmF0aW9uIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZ3JpZFRhYmxlUm93TW9kZSIsIm9Db25maWd1cmF0aW9uIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImVuYWJsZU1hc3NFZGl0IiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJpc0NvbXBhY3RUeXBlIiwidGFibGVDb25maWd1cmF0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwib1RhcmdldE1hcHBpbmciLCJpc1R5cGVEZWZpbml0aW9uIiwiRURNX1RZUEVfTUFQUElORyIsInVuZGVybHlpbmdUeXBlIiwiJFNjYWxlIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsIm1heExlbmd0aCIsIiRNYXhMZW5ndGgiLCJudWxsYWJsZSIsIiROdWxsYWJsZSIsIm1pbmltdW0iLCJpc05hTiIsIlZhbGlkYXRpb24iLCJNaW5pbXVtIiwibWF4aW11bSIsIk1heGltdW0iLCJpc0RpZ2l0U2VxdWVuY2UiLCJJc0RpZ2l0U2VxdWVuY2UiLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0RW50aXR5VHlwZSxcblx0RW51bVZhbHVlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV4UHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMsXG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5LFxuXHRnZXREYXRhRmllbGREYXRhVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50LFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZFR5cGVzLFxuXHRpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb21iaW5lZEFjdGlvbiwgQ3VzdG9tQWN0aW9uLCBPdmVycmlkZVR5cGVBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldENvcHlBY3Rpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZUNhdGVnb3J5VHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlLCByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFR5cGVHdWFyZHMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHtcblx0aXNBbm5vdGF0aW9uT2ZUeXBlLFxuXHRpc05hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHksXG5cdGlzVHlwZURlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCB0eXBlIERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0VGFibGVDb2x1bW5TZXR0aW5ncyxcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QWN0aW9uVHlwZSxcblx0Q3JlYXRpb25Nb2RlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdEltcG9ydGFuY2UsXG5cdFNlbGVjdGlvbk1vZGUsXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaXN1YWxpemF0aW9uVHlwZVxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZSB9IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHtcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRnZXRDcmVhdGlvblJvdyxcblx0Z2V0RGVsZXRlVmlzaWJpbGl0eSxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcsXG5cdGdldE1hc3NFZGl0VmlzaWJpbGl0eSxcblx0Z2V0UmVzdHJpY3Rpb25zLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uUGFzdGUsXG5cdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCxcblx0aXNJbkRpc3BsYXlNb2RlXG59IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuXG5pbXBvcnQgeyBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IHtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW47XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogc3RyaW5nO1xuXHRyb3c/OiB7XG5cdFx0YWN0aW9uPzogc3RyaW5nO1xuXHRcdHByZXNzPzogc3RyaW5nO1xuXHRcdHJvd0hpZ2hsaWdodGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0cm93TmF2aWdhdGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdH07XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c3RhbmRhcmRBY3Rpb25zOiB7XG5cdFx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlPjtcblx0XHRpc0luc2VydFVwZGF0ZVRlbXBsYXRlZDogYm9vbGVhbjtcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0fTtcblx0ZGlzcGxheU1vZGU/OiBib29sZWFuO1xuXHR0aHJlc2hvbGQ6IG51bWJlcjtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRzb3J0Q29uZGl0aW9ucz86IHN0cmluZztcblx0Z3JvdXBDb25kaXRpb25zPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGVDb25kaXRpb25zPzogc3RyaW5nO1xuXHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXI7XG5cblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcblxuXHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3IgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIGJ5IG5hdmlnYXRpbmcgdG8gc29tZSB0YXJnZXRcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRyb3dDb3VudE1vZGU/OiBHcmlkVGFibGVSb3dDb3VudE1vZGU7XG5cdHJvd0NvdW50PzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudD86IG51bWJlcjtcblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0NvbXBhY3RUeXBlPzogYm9vbGVhbjtcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIEdyaWRUYWJsZVJvd0NvdW50TW9kZSA9IFwiQXV0b1wiIHwgXCJGaXhlZFwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZSAoQ3VzdG9tIENvbHVtbilcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuLy8gQ3VzdG9tIENvbHVtbiBmcm9tIE1hbmlmZXN0XG5leHBvcnQgdHlwZSBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU/OiBDb2x1bW5UeXBlLkRlZmF1bHQ7XG59O1xuXG4vLyBTbG90IENvbHVtbiBmcm9tIEJ1aWxkaW5nIEJsb2NrXG5leHBvcnQgdHlwZSBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uID0gQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlLlNsb3Q7XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGFsbCBDb2x1bW5UeXBlcyBoYXZlOlxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbVxuXHR3aWR0aD86IHN0cmluZztcblx0aW1wb3J0YW5jZT86IEltcG9ydGFuY2U7XG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xufTtcblxuLy8gUHJvcGVydGllcyBvbiBDdXN0b20gQ29sdW1ucyBhbmQgU2xvdCBDb2x1bW5zXG5leHBvcnQgdHlwZSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdHdyYXA6IGJvb2xlYW47XG5cdH0gfCBudWxsO1xuXHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IG51bWJlciB9O1xuXHRpc0dyb3VwYWJsZTogYm9vbGVhbjtcblx0aXNOYXZpZ2FibGU6IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH07XG5cdHByb3BlcnRpZXM/OiBzdHJpbmdbXTsgLy9XZSBuZWVkIHRoZSBwcm9wZXJ0aWVzIHJlbGF0aXZlUGF0aCB0byBiZSBhZGRlZCB0byB0aGUgJFNlbGVjdCByZXF1ZXN0IGZvciBleHBvcnRpbmdcbn07XG5cbi8vIFByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIE1hbmlmZXN0IHRvIG92ZXJyaWRlIEFubm90YXRpb24gY29uZmlndXJhdGlvbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzID0gUGFydGlhbDx7XG5cdHNjYWxlOiBudW1iZXI7XG5cdHByZWNpc2lvbjogbnVtYmVyO1xuXHRtYXhMZW5ndGg6IG51bWJlcjtcblx0bnVsbGFibGU6IGJvb2xlYW47XG5cdG1pbmltdW06IHN0cmluZztcblx0bWF4aW11bTogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U6IGJvb2xlYW47XG59PjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRwYXJzZUFzU3RyaW5nOiBib29sZWFuO1xuXHRlbXB0eVN0cmluZzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGJvb2xlYW47XG59PjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50czogUHJvcGVydHlUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IFByb3BlcnR5VHlwZUZvcm1hdE9wdGlvbnM7XG5cdHR5cGVJbnN0YW5jZT86IHVua25vd247XG5cdGJhc2VUeXBlPzogc3RyaW5nO1xuXHRjbGFzc05hbWU/OiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgY29sdW1uRXhwb3J0U2V0dGluZ3MgPSBQYXJ0aWFsPHtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0d3JhcDogYm9vbGVhbjtcblx0dHlwZTogc3RyaW5nO1xuXHRpbnB1dEZvcm1hdDogc3RyaW5nO1xuXHRmb3JtYXQ6IHN0cmluZztcblx0c2NhbGU6IG51bWJlcjtcblx0ZGVsaW1pdGVyOiBib29sZWFuO1xuXHR1bml0OiBzdHJpbmc7XG5cdHVuaXRQcm9wZXJ0eTogc3RyaW5nO1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHR0aW1lem9uZVByb3BlcnR5OiBzdHJpbmc7XG5cdHV0YzogYm9vbGVhbjtcbn0+O1xuXG4vLyBQcm9wZXJ0aWVzIGZvciBBbm5vdGF0aW9uIENvbHVtbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdGlzR3JvdXBhYmxlPzogYm9vbGVhbjtcblx0dW5pdD86IHN0cmluZztcblx0dW5pdFRleHQ/OiBzdHJpbmc7XG5cdHRpbWV6b25lVGV4dD86IHN0cmluZztcblx0dGltZXpvbmU/OiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdGV4cG9ydFNldHRpbmdzPzogY29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdHR5cGVDb25maWc/OiBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlzUGFydE9mTGluZUl0ZW0/OiBib29sZWFuOyAvLyB0ZW1wb3JhcnkgaW5kaWNhdG9yIHRvIG9ubHkgYWxsb3cgZmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB3aGVuIHRoZXkncmUgcGFydCBvZiBhIGxpbmUgaXRlbVxuXHRhZGRpdGlvbmFsTGFiZWxzPzogc3RyaW5nW107XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGFibGU/OiBib29sZWFuO1xuXHRleHRlbnNpb24/OiBFeHRlbnNpb25Gb3JBbmFseXRpY3M7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25Gb3JBbmFseXRpY3MgPSB7XG5cdGN1c3RvbUFnZ3JlZ2F0ZT86IHtcblx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBUZWNobmljYWxDb2x1bW4gPSBBbm5vdGF0aW9uVGFibGVDb2x1bW4gJiB7XG5cdGV4dGVuc2lvbj86IHtcblx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogYm9vbGVhbjtcblx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogYm9vbGVhbjtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFdpZHRoQ2FsY3VsYXRpb24gPSBudWxsIHwge1xuXHRtaW5XaWR0aD86IG51bWJlcjtcblx0bWF4V2lkdGg/OiBudW1iZXI7XG5cdGRlZmF1bHRXaWR0aD86IG51bWJlcjtcblx0aW5jbHVkZUxhYmVsPzogYm9vbGVhbjtcblx0Z2FwPzogbnVtYmVyO1xuXHQvLyBvbmx5IHJlbGV2YW50IGZvciBjb21wbGV4IHR5cGVzXG5cdGV4Y2x1ZGVQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHZlcnRpY2FsQXJyYW5nZW1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuZXhwb3J0IHR5cGUgTWFuaWZlc3RDb2x1bW4gPSBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT47XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZURhdGEgPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGU6IHtcblx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH07XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdGFnZ3JlZ2F0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPjtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlQmFzaWNTZWFyY2g/OiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xuXHRoZWFkZXJJbmZvVGl0bGU6IHN0cmluZztcblx0c2VtYW50aWNLZXlzOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRlbmFibGUkc2VsZWN0OiBib29sZWFuO1xuXHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IGJvb2xlYW47XG59O1xuXG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbi1iYXNlZCBhbmQgbWFuaWZlc3QtYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFUYWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucztcblx0Y29uc3QgYUhpZGRlbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHRydWUsXG5cdFx0YUhpZGRlbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0aXNOYXZpZ2FibGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlT25TZWxlY3Q6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlQXV0b1Njcm9sbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgYWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjb2x1bW5zLCBhbm5vdGF0aW9uLWJhc2VkIGFzIHdlbGwgYXMgbWFuaWZlc3QgYmFzZWQuXG4gKiBUaGV5IGFyZSBzb3J0ZWQgYW5kIHNvbWUgcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gdmlhIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBrZXlzIHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuKS5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQ29sdW1ucyBhcyBUYWJsZUNvbHVtbltdLCBtYW5pZmVzdENvbHVtbnMgYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj4+LCB7XG5cdFx0d2lkdGg6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0aW1wb3J0YW5jZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRob3Jpem9udGFsQWxpZ246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblxuXHRjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBkZWZpbml0aW9uc1t0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0aWYgKHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiYgIWN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXModGFibGVDb2x1bW4ubmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaCgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZm91bmRDb2x1bW4gPSBmaW5kQ29sdW1uRnJvbVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkc2VsZWN0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblx0XHRcdF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb24pO1xuXG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+PSAwIDogdHJ1ZTtcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbmF2Q29uZmlnRm9yQ29udGV4dFBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oY29udGV4dFBhdGgpO1xuXHRpZiAobmF2Q29uZmlnRm9yQ29udGV4dFBhdGggJiYgT2JqZWN0LmtleXMobmF2Q29uZmlnRm9yQ29udGV4dFBhdGgpLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY29udGV4dFBhdGg7XG5cdH1cblxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuXG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5CeVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKG9Qcm9wOiBQcm9wZXJ0eSkgPT4gb1Byb3AubmFtZSA9PT0gb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IG9Vbml0ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IG9UaW1lem9uZSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IHNUaW1lem9uZSA9IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdFx0XHRcdGlmIChvVW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Vbml0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVW5pdC5uYW1lKTtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdCA9IG9Vbml0Q29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHNVbml0ID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRcdGlmIChzVW5pdCkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXRUZXh0ID0gYCR7c1VuaXR9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UaW1lem9uZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9UaW1lem9uZUNvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgob1RpbWV6b25lLm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZSA9IG9UaW1lem9uZUNvbHVtbj8ubmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChzVGltZXpvbmUpIHtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGltZXpvbmVUZXh0ID0gc1RpbWV6b25lLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGV4dEFubm90YXRpb24pICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHtcblx0XHRcdFx0XHRjb25zdCBvVGV4dENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgodGV4dEFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9UZXh0Q29sdW1uICYmIG9UZXh0Q29sdW1uLm5hbWUgIT09IG9UYWJsZUNvbHVtbi5uYW1lKSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGV4dEFycmFuZ2VtZW50ID0ge1xuXHRcdFx0XHRcdFx0XHR0ZXh0UHJvcGVydHk6IG9UZXh0Q29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHRcdG1vZGU6IGRpc3BsYXlNb2RlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/LnBhdGg7XG5cdGNvbnN0IHNlbWFudGljS2V5QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzZW1hbnRpY0tleUFubm90YXRpb25zKSB7XG5cdFx0c2VtYW50aWNLZXlBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMucHVzaChvQ29sdW1uLnZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB7IGhlYWRlckluZm9UaXRsZVBhdGgsIHNlbWFudGljS2V5Q29sdW1ucywgaGVhZGVySW5mb1R5cGVOYW1lIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ/OiBib29sZWFuLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0KTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldFRhYmxlQ29sdW1ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlID0gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblxuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0Y29sdW1ucyxcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyh0YWJsZUFjdGlvbnMuYWN0aW9ucyksXG5cdFx0Y29tbWFuZEFjdGlvbnM6IHRhYmxlQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBpc0JsYW5rVGFibGU/OiBib29sZWFuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKHt9LCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgW10sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUsIFtdKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZywgaXNCbGFua1RhYmxlID8gW10gOiBjb2x1bW5zKSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWVcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgb2YgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHMgZm9yIGFsbCBEYXRhRmllbGRGb3JBY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gQWN0aW9uSGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIFwidGFibGVcIiwgY29udmVydGVyQ29udGV4dCk7XG59XG5cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHVwZGF0YWJsZSBwcm9wZXJ0eSBmb3IgdGhlIHJvd3NcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgdXBkYXRhYmxlID0gcmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID0gIWlzQ29uc3RhbnQodXBkYXRhYmxlLmV4cHJlc3Npb24pICYmIHVwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgdXBkYXRhYmxlRXhwcmVzc2lvbiA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZTtcblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odXBkYXRhYmxlRXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlRXhwcmVzc2lvbi5wYXRoO1xuXG5cdHJldHVybiBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID8gKHVwZGF0YWJsZVByb3BlcnR5UGF0aCBhcyBzdHJpbmcpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgVGhlIHJlY29yZCBjb25zaXN0aW5nIG9mIGFjdGlvbnMgYW5kIHRoZWlyIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXTtcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSBudWxsKSB7XG5cdFx0XHQvLyBBbm5vdGF0aW9uIGNvbmZpZ3VyZWQgd2l0aCBleHBsaWNpdCAnbnVsbCcgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGV2YW50KVxuXHRcdFx0cHJvcGVydGllcy5hZGQoYWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydHkgcGF0aHMgYW5kIG5vdCBDb25zdGFudCB2YWx1ZXMuXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHByb3BlcnRpZXMpLmpvaW4oXCIsXCIpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogcmV0dXJucyBhbGwgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB1c2VkIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKGVxdWFsKGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VudGl0eVNldCksIGZhbHNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0c291cmNlOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0bGV0IHNFeHByZXNzaW9uO1xuXHRpZiAoXG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdCkge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0fSBlbHNlIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZTtcblx0fVxuXHRsZXQgc1BhdGg6IHN0cmluZztcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHNFeHByZXNzaW9uKSkge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uIGFzIHN0cmluZztcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvblByb3BlcnR5KGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3QpICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgbWFuaWZlc3QgYWN0aW9ucyBhbmQgY2hlY2sgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiBJZiB0aGUgZGF0YSBmaWVsZCBpcyBhbHNvIHJlZmVyZW5jZWQgYXMgYSBjdXN0b20gYWN0aW9uLlxuICogSWYgdGhlIHVuZGVybHlpbmcgbWFuaWZlc3QgYWN0aW9uIGlzIGVpdGhlciBhIGJvdW5kIGFjdGlvbiBvciBoYXMgdGhlICdSZXF1aXJlc0NvbnRleHQnIHByb3BlcnR5IHNldCB0byB0cnVlLlxuICpcbiAqIElmIHNvLCB0aGUgJ3JlcXVpcmVzU2VsZWN0aW9uJyBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gJ3RydWUnIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogY2hlY2sgdGhlIGZvbGxvd2luZzpcbiAqIElmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0YWJsZSB0b29sYmFyIGFuZCByZXF1aXJlcyBhIGNvbnRleHRcbiAqIElmIGFuIGFjdGlvbiBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBpdCBpcyBzZXQgYXNpZGUgYW5kIHdpbGwgYmUgY29uc2lkZXJlZFxuICogd2hlbiBnb2luZyB0aHJvdWdoIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25JZCA9IGdlbmVyYXRlKFtcIkRhdGFGaWVsZEZvckFjdGlvblwiLCBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZ10pO1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9yQWN0b24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQobWFuaWZlc3RBY3Rpb25JZCwgZGF0YUZpZWxkLCBtYW5pZmVzdEFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRcdFx0XHRcdFx0YERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6JHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9Ojoke2RhdGFGaWVsZC5BY3Rpb259YCxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiAmJiBhY3Rpb24udmlzaWJsZT8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIGN1c3RvbSBhY3Rpb25zICh3aXRoIGtleSByZXF1aXJlc1NlbGVjdGlvbikgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBsaW5lIGl0ZW0gYW5kIHJldHVybnMgYWxsIHRoZVxuICogdmlzaWJsZSBrZXkgdmFsdWVzIGFzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cblx0XHRcdFx0XHRhVmlzaWJsZVBhdGhFeHByZXNzaW9ucy5wdXNoKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbj8udmlzaWJsZT8udmFsdWVPZigpKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVZpc2libGVQYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0VudGl0eVNldDogYm9vbGVhbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUV4cHJlc3Npb24oaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblxuXHRjb25zdCBiTWFzc0VkaXRFbmFibGVkOiBib29sZWFuID0gIWlzQ29uc3RhbnQobWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbikgfHwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbi52YWx1ZSAhPT0gZmFsc2U7XG5cdGlmIChzZWxlY3Rpb25Nb2RlICYmIHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTm9uZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSAmJiBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBNYXNzIEVkaXQgaW4gT1AgaXMgZW5hYmxlZCBvbmx5IGluIGVkaXQgbW9kZS5cblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChcIk11bHRpXCIpLFxuXHRcdFx0XHRcdGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoXCJNdWx0aVwiKSwgY29uc3RhbnQoXCJOb25lXCIpKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoXCJNdWx0aVwiKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdH1cblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cblx0aWYgKFxuXHRcdGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpXG5cdCkge1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHR9XG5cdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRpc0VudGl0eVNldFxuXHQpO1xuXHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cblx0Ly8gTm8gYWN0aW9uIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdGlmIChcblx0XHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdChkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCBiTWFzc0VkaXRFbmFibGVkKVxuXHQpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdFx0Ly8gQnVpbGRpbmcgZXhwcmVzc2lvbiBmb3IgZGVsZXRlIGFuZCBtYXNzIGVkaXRcblx0XHRcdFx0Y29uc3QgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBvcihcblx0XHRcdFx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCB0cnVlLCAvLyBkZWZhdWx0IGRlbGV0ZSB2aXNpYmlsaXR5IGFzIHRydWVcblx0XHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzRWRpdGFibGUsIGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFwiTm9uZVwiKSkpO1xuXHRcdFx0Ly8gRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0fVxuXHRcdC8vIFRoZXJlIGFyZSBhY3Rpb25zIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdH0gZWxzZSBpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gVXNlIHNlbGVjdGlvbk1vZGUgaW4gZWRpdCBtb2RlIGlmIGRlbGV0ZSBpcyBlbmFibGVkIG9yIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0XHRjb25zdCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0XHRiTWFzc0VkaXRFbmFibGVkICYmICF0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUsXG5cdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL0VudGl0eVNldCBkZWxldGFibGU6XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBFeGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdC8vRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyksIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblxuXHRjb25zdCBzRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuXHRpZiAoY29weURhdGFGaWVsZCkge1xuXHRcdHRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuQ29weSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoY29weURhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGNvcHlEYXRhRmllbGQpLFxuXHRcdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdG5vdChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0Y29weURhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0dGV4dDogY29weURhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSA/PyBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLmdldFRleHQoXCJDX0NPTU1PTl9DT1BZXCIpLFxuXHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0aGlkZGVuVGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0Ly8gYW5kIGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgdGFibGUgZW50cmllcy5cblx0XHRcdFx0XHRcdC8vIDEuIEFuIGFjdGlvbiB3aXRoIGFuIG92ZXJsb2FkLCB0aGF0IGlzIGV4ZWN1dGVkIGFnYWluc3QgYSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0XHRcdFx0XHRcdC8vIDMuIEEgc3RhdGljIGFjdGlvbiAodGhhdCBpcywgYm91bmQgdG8gYSBjb2xsZWN0aW9uKVxuXHRcdFx0XHRcdFx0bGV0IHVzZUVuYWJsZWRFeHByZXNzaW9uID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVuYm91bmQgYWN0aW9uLiBJcyByZWNvZ25pc2VkLCBidXQgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIGNoZWNrcyBmb3IgaXNCb3VuZCA9IHRydWUsIHNvIG5vdCBnZW5lcmF0ZWQuXG5cdFx0XHRcdFx0XHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uc291cmNlVHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBPdmVybG9hZCBhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8ucGFyYW1ldGVyc1swXS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBTdGF0aWMgYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uOiBCYXNlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0aWYgKHVzZUVuYWJsZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uLmVuYWJsZWQgPSBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnMsXG5cdFx0aGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGJpbmRpbmdFeHByZXNzaW9uIGZvciB0aGUgaGlnaGxpZ2h0IHJvd1NldHRpbmcgcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSBjcml0aWNhbGl0eUFubm90YXRpb24gUGF0aCBvciB2YWx1ZSBvZiB0aGUgY3JpdGljYWxpdHlcbiAqIEBwYXJhbSBpc0RyYWZ0Um9vdE9yTm9kZSAgSXMgdGhlIGN1cnJlbnQgZW50aXR5U2V0IGFuIERyYWZ0IHJvb3Qgb3IgYSBub2RlXG4gKiBAcGFyYW0gdGFyZ2V0RW50aXR5VHlwZSBUaGUgdGFyZ2V0ZWQgZW50aXR5VHlwZVxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbkJpbmRpbmdcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3RPck5vZGU6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCB1bmRlZmluZWQpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSGFzQWN0aXZlLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5LklzQWN0aXZlLFxuXHRcdFx0YCR7aXNEcmFmdFJvb3RPck5vZGV9YCxcblx0XHRcdC4uLmFNaXNzaW5nS2V5c1xuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zQ29tbW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24sXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjtcblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKSB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IGNvbnN0YW50KE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoICRjb250cm9sbGVyICwnXCIgKyBuYXZpZ2F0aW9uVGFyZ2V0ICsgXCInLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSlcIjtcblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVR5cGUpIHtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGU7XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0KTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0ICYmIFR5cGVHdWFyZHMuaXNFbnRpdHlTZXQodGFyZ2V0RW50aXR5U2V0KSkge1xuXHRcdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XHRcIkFQSS5vblRhYmxlUm93UHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJ1wiICtcblx0XHRcdFx0XHR0YXJnZXRQYXRoICtcblx0XHRcdFx0XHRcIicsIGVkaXRhYmxlIDogXCIgK1xuXHRcdFx0XHRcdChNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCBNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KVxuXHRcdFx0XHRcdFx0PyBcIiEkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fS5nZXRQcm9wZXJ0eSgnSXNBY3RpdmVFbnRpdHknKVwiXG5cdFx0XHRcdFx0XHQ6IFwidW5kZWZpbmVkXCIpICtcblx0XHRcdFx0XHQodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IFwiLCBiUmVjcmVhdGVDb250ZXh0OiB0cnVlXCIgOiBcIlwiKSArXG5cdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUV4cHJlc3Npb24ocm93TmF2aWdhdGVkRXhwcmVzc2lvbiksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KFVJLklzSW5hY3RpdmUpKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBhbm5vdGF0aW9uQ29sdW1ucztcblx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdFx0Y29uc3QgZXhpc3RzID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cblx0XHQvLyBpZiB0YXJnZXQgdHlwZSBleGlzdHMsIGl0IGlzIGEgY29tcGxleCBwcm9wZXJ0eSBhbmQgc2hvdWxkIGJlIGlnbm9yZWRcblx0XHRpZiAoIXByb3BlcnR5LnRhcmdldFR5cGUgJiYgIWV4aXN0cykge1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dGFibGVUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSW5jbHVkZSB0ZXh0IHByb3BlcnRpZXMgZm91bmQgZHVyaW5nIGFuYWx5c2lzIG9uIGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnNcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLnB1c2goLi4ucmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0XHRcdCk7XG5cblx0XHRcdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRdKVswXTtcblx0XHRcdGNvbnN0IG9Db2x1bW5EcmFmdEluZGljYXRvciA9IGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihjb2x1bW5JbmZvLm5hbWUsIHNlbWFudGljS2V5cywgZmFsc2UsIG51bGwpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9Db2x1bW5EcmFmdEluZGljYXRvcikubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0NvbHVtbkRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnR5cGUgPSBfZ2V0RXhwb3J0RGF0YVR5cGUocHJvcGVydHkudHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdFByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51dGMgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBhIHByb3BlcnR5IGhhcyBkZWZpbmVkIGEgI1RleHRPbmx5IHRleHQgYXJyYW5nZW1lbnQgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZGUgYWxzbyBmcm9tIHRoZSBjb2x1bW5zIGFkZGVkIHZpYSBMaW5lSXRlbXMgb3IgZnJvbSBhIGNvbHVtbiBhdmFpbGFibGUgb24gdGhlIHAxM24uXG5cdFx0aWYgKGdldERpc3BsYXlNb2RlKHByb3BlcnR5KSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMgPSBub25Tb3J0YWJsZUNvbHVtbnMuY29uY2F0KHByb3BlcnR5Lm5hbWUpO1xuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRbXVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHR0YWJsZUNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IGBQcm9wZXJ0eTo6JHtyZWxhdGl2ZVBhdGh9YDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgZXhwb3J0VHlwZTogc3RyaW5nID0gX2dldEV4cG9ydERhdGFUeXBlKHByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0Y29uc3QgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uID1cblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gJiYgdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLmluZGV4T2YocmVsYXRpdmVQYXRoKSA+PSAwO1xuXHRjb25zdCBzb3J0YWJsZSA9ICghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMTtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IHtcblx0XHRjbGFzc05hbWU6IHByb3BlcnR5LnR5cGUgfHwgZGF0YVR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHR9O1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHVuaXRUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0Y29uc3QgdGltZXpvbmVUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cblx0XHRleHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdHR5cGU6IGV4cG9ydFR5cGUsXG5cdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdGRlbGltaXRlcjogcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdH07XG5cblx0XHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSB1bml0UHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdH0gZWxzZSBpZiAodW5pdFRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSBgJHt1bml0VGV4dH1gO1xuXHRcdH1cblx0XHRpZiAodGltZXpvbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHRpbWV6b25lUHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGltZXpvbmVUZXh0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHRpbWV6b25lVGV4dC50b1N0cmluZygpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCksXG5cdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKHByb3BlcnR5KSA6IHVuZGVmaW5lZCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IHVuZGVmaW5lZCxcblx0XHRhbm5vdGF0aW9uUGF0aDogZnVsbFByb3BlcnR5UGF0aCxcblx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0YXZhaWxhYmlsaXR5OiAhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/ICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkgOiBzb3J0YWJsZSxcblx0XHRpc0tleTogcHJvcGVydHkuaXNLZXksXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnIGFzIFByb3BlcnR5VHlwZUNvbmZpZyxcblx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCwgc2VtYW50aWNLZXlzKSxcblx0XHRhZGRpdGlvbmFsTGFiZWxzOiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHNcblx0fTtcblx0Y29uc3Qgc1Rvb2x0aXAgPSBfZ2V0VG9vbHRpcChwcm9wZXJ0eSk7XG5cdGlmIChzVG9vbHRpcCkge1xuXHRcdGNvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdH1cblx0Y29uc3QgdGFyZ2V0VmFsdWVmcm9tRFAgPSBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KTtcblx0aWYgKGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpICYmIHR5cGVvZiB0YXJnZXRWYWx1ZWZyb21EUCA9PT0gXCJzdHJpbmdcIiAmJiBjb2x1bW4uZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSB0YXJnZXRWYWx1ZWZyb21EUDtcblx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgPSBcInswfS9cIiArIHRhcmdldFZhbHVlZnJvbURQO1xuXHR9XG5cdHJldHVybiBjb2x1bW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbnMsIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIGRhdGFGaWVsZCBvciBwcm9wZXJ0eSB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1uLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIF9pc0V4cG9ydGFibGVDb2x1bW4oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5VHlwZSwgcHJvcGVydHk7XG5cdGNvbnN0IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSA9IChzb3VyY2UgYXMgUHJvcGVydHkpLmFubm90YXRpb25zLlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UpICYmIGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eT8uJFR5cGUpIHtcblx0XHRpZiAoaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5KSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRwcm9wZXJ0eVR5cGUgPSBkYXRhRmllbGREZWZhdWx0UHJvcGVydHk/LiRUeXBlO1xuXHR9IGVsc2UgaWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZSBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRwcm9wZXJ0eSA9IHNvdXJjZSBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXHRcdHByb3BlcnR5VHlwZSA9IHByb3BlcnR5LiRUeXBlO1xuXHRcdGlmIChwcm9wZXJ0eVR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdC8vRm9yIENoYXJ0XG5cdFx0XHRwcm9wZXJ0eVR5cGUgPSAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZTtcblx0XHRcdHJldHVybiBVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlLmluZGV4T2YocHJvcGVydHlUeXBlKSA9PT0gLTE7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy50ZXJtID09PSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lZGlhVHlwZVwiICYmXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/LmlzVVJMICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvL0ZvciBTdHJlYW1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5VHlwZVxuXHRcdD8gW1xuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHQgIF0uaW5kZXhPZihwcm9wZXJ0eVR5cGUpID09PSAtMVxuXHRcdDogdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmV0dXJuICEhZGF0YUZpZWxkLklubGluZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdC8vIFRvZG86IFJlcGxhY2Ugd2l0aCBwcm9wZXIgTG9nIHN0YXRlbWVudCBvbmNlIGF2YWlsYWJsZVxuXHRcdC8vICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgRGF0YUZpZWxkIEFic3RyYWN0IHR5cGU6IFwiICsgZGF0YUZpZWxkLiRUeXBlKTtcblx0fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkTW9kZWxQYXRoIFRoZSBtZXRhcGF0aCByZWZlcnJpbmcgdG8gdGhlIGFubm90YXRpb24gdGhhdCBpcyBldmFsdWF0ZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdC8vIEZJWE1FIFByb3ZlIG1lIHdyb25nIHRoYXQgdGhpcyBpcyB1c2VsZXNzXG5cdGNvbnN0IGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQgPSAvKmZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6Ki8gY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IGVxdWFsKFVJLk5vZGVMZXZlbCwgMCkgOiovIGNvbnN0YW50KGZhbHNlKTtcblxuXHQvLyBBIGRhdGEgZmllbGQgaXMgdmlzaWJsZSBpZjpcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIG9yaWdpbmFsIGFubm90YXRpb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSB0YXJnZXQgcHJvcGVydHkgZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gaW4gY2FzZSBvZiBBbmFseXRpY3MgaXQncyBub3QgdmlzaWJsZSBmb3IgYW4gZXhwYW5kZWQgR3JvdXBIZWFkZXJcblx0cmV0dXJuIGFuZChcblx0XHQuLi5bXG5cdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdCEhcHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSAmJiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRvcihub3QoaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCksIGlzQW5hbHl0aWNhbExlYWYpXG5cdFx0XVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBmdW5jdGlvbiAoZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0KSB7XG5cdFx0aWYgKGRhdGFGaWVsZEdyb3VwPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkR3JvdXAuYW5ub3RhdGlvbnMuVUkuSGlkZGVuKSwgdHJ1ZSkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMpID0+IHtcblx0XHRcdFx0ZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLnB1c2goX2dldFZpc2libGVFeHByZXNzaW9uKHsgdGFyZ2V0T2JqZWN0OiBpbm5lckRhdGFGaWVsZCB9IGFzIERhdGFNb2RlbE9iamVjdFBhdGgpKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShvciguLi5maWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQoZmFsc2UpKSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBbcHJvcGVydHldIFByb3BlcnR5LCBEYXRhRmllbGQgb3IgTmF2aWdhdGlvbiBQcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24gKHByb3BlcnR5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHksIGlzR3JvdXAgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSB8fCBpc05hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRjb25zdCBkYXRhRmllbGREZWZhdWx0ID0gKHByb3BlcnR5IGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0aWYgKGRhdGFGaWVsZERlZmF1bHQgJiYgIWRhdGFGaWVsZERlZmF1bHQucXVhbGlmaWVyICYmIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkubmFtZSkpO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMocHJvcGVydHkpKSB7XG5cdFx0aWYgKCEhaXNHcm91cCAmJiBwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0cHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5WYWx1ZT8uJHRhcmdldD8ubmFtZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24gKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSB8fCBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gc291cmNlLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKHNvdXJjZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IGRhdGFwb2ludFRhcmdldCA9IHNvdXJjZS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50O1xuXHRcdHJldHVybiBkYXRhcG9pbnRUYXJnZXQ/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFwb2ludFRhcmdldC5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dTdGF0dXNWaXNpYmlsaXR5KGNvbE5hbWU6IHN0cmluZywgaXNTZW1hbnRpY0tleUluRmllbGRHcm91cD86IEJvb2xlYW4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtcblx0XHRcdHBhdGhJbk1vZGVsKGBzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGNvbE5hbWUsXG5cdFx0XHRpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMuZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlclxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1uIG5hbWVzIHdoaWNoIGNhbm5vdCBiZSBzb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZC5cbiAqL1xuY29uc3QgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRPYmplY3Qua2V5cyhjb2x1bW5zVG9CZUNyZWF0ZWQpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSxcblx0XHRcdGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG5hbWUpLFxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciB0aGUgcmVsYXRlZCBjb2x1bW4gYWxyZWFkeSBleGlzdHMuXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIENhc2UgMTogS2V5IGNvbnRhaW5zIERhdGFGaWVsZCBwcmVmaXggdG8gZW5zdXJlIGFsbCBwcm9wZXJ0eSBjb2x1bW5zIGhhdmUgdGhlIHNhbWUga2V5IGZvcm1hdC5cblx0XHRcdC8vIE5ldyBjcmVhdGVkIHByb3BlcnR5IGNvbHVtbiBpcyBzZXQgdG8gaGlkZGVuLlxuXHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdFx0XHQpO1xuXHRcdFx0Y29sdW1uLmlzUGFydE9mTGluZUl0ZW0gPSBleGlzdGluZ0NvbHVtbnMuc29tZShcblx0XHRcdFx0KGV4aXN0aW5nQ29sdW1uKSA9PiBleGlzdGluZ0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSAmJiBleGlzdGluZ0NvbHVtbi5pc1BhcnRPZkxpbmVJdGVtXG5cdFx0XHQpO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHwgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGBQcm9wZXJ0eTo6JHtuYW1lfWA7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbSA9IHJlbGF0ZWRDb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbTtcblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSAmJlxuXHRcdFx0XHRleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvKTtcblx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lm1hcChcblx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHQpO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIHRoZSBpZGVudGlmaWVkIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG4gKlxuICogRm9yIGUuZy4gSWYgVUkuSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5LCBpbmNsdWRlIHRoaXMgdGVjaG5pY2FsIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eUluZm8gb2YgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSB0byBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBjb2x1bW5zLlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBUZWNobmljYWxDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRleHRlbnNpb246IHtcblx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWUsXG5cdFx0XHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb2x1bW5zLnB1c2godGVjaG5pY2FsQ29sdW1uKTtcblx0XHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IHRlY2huaWNhbENvbHVtbi5uYW1lO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cE5hbWUgVGhlIGBEYXRhRmllbGRgIG5hbWUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiBvQ29sdW1uc1trZXldLnNob3dEYXRhRmllbGRzTGFiZWw7XG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGggPSBcIlwiO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBkYXRhRmllbGQ/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuXG5jb25zdCBfc2xpY2VBdFNsYXNoID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSAmJiAvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2dldEZpbHRlckZ1bmN0aW9ucyhDb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0aWYgKFR5cGVHdWFyZHMuaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnMgPz9cblx0XHRcdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnNcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogU2VtYW50aWNLZXksIG5hbWU6IHN0cmluZykge1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGFTZW1hbnRpY0tleVZhbHVlcy5wdXNoKHNlbWFudGljS2V5c1tpXS52YWx1ZSk7XG5cdFx0aWYgKHNlbWFudGljS2V5c1tpXS52YWx1ZSA9PT0gbmFtZSkge1xuXHRcdFx0YlNlbWFudGljS2V5Rm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlczogYVNlbWFudGljS2V5VmFsdWVzLFxuXHRcdHNlbWFudGljS2V5Rm91bmQ6IGJTZW1hbnRpY0tleUZvdW5kXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10sIGZpZWxkR3JvdXBQcm9wZXJ0aWVzOiBzdHJpbmdbXSkge1xuXHRsZXQgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IGZhbHNlO1xuXHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0aWYgKHNlbWFudGljS2V5VmFsdWVzICYmIHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aCA+PSAxICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmxlbmd0aCA+PSAxKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKFtzZW1hbnRpY0tleVZhbHVlc1tpXV0uc29tZSgodG1wKSA9PiBmaWVsZEdyb3VwUHJvcGVydGllcy5pbmRleE9mKHRtcCkgPj0gMCkpIHtcblx0XHRcdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IHRydWU7XG5cdFx0XHRcdHNQcm9wZXJ0eVBhdGggPSBzZW1hbnRpY0tleVZhbHVlc1tpXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBzUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBudWxsLCBzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10pIHtcblx0Y29uc3QgYVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBfcHJvcGVydGllc0ZvdW5kOiB7IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGJvb2xlYW47IGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gaXNGaWVsZEdyb3VwQ29sdW1uXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSxcblx0aXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuLFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbikge1xuXHRpZiAoIXNlbWFudGljS2V5cykge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBzZW1hbnRpY0tleSA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzLCBuYW1lKTtcblx0Y29uc3Qgc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgPSBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwLCBzZW1hbnRpY0tleS52YWx1ZXMpO1xuXHRpZiAoc2VtYW50aWNLZXkuc2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnNPYmo6IEZvcm1hdE9wdGlvbnNUeXBlID0ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzZW1hbnRpY2tleXM6IHNlbWFudGljS2V5LnZhbHVlcyxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCBmYWxzZSkpXG5cdFx0fTtcblx0XHRpZiAoaXNGaWVsZEdyb3VwQ29sdW1uICYmIHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRcdGZvcm1hdE9wdGlvbnNPYmouc2hvd0Vycm9yT2JqZWN0U3RhdHVzID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSk7XG5cdFx0XHRmb3JtYXRPcHRpb25zT2JqLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdE9wdGlvbnNPYmo7XG5cdH0gZWxzZSBpZiAoIXNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRyZXR1cm4ge307XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpZWxkR3JvdXBOYW1lOiBuYW1lLFxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBjb21waWxlRXhwcmVzc2lvbihnZXRSb3dTdGF0dXNWaXNpYmlsaXR5KG5hbWUsIHRydWUpKVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldEltcE51bWJlcihkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzKTogbnVtYmVyIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblxuXHRpZiAoaW1wb3J0YW5jZSAmJiBpbXBvcnRhbmNlLmluY2x1ZGVzKFwiVUkuSW1wb3J0YW5jZVR5cGUvSGlnaFwiKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9NZWRpdW1cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXHRpZiAoaW1wb3J0YW5jZSAmJiBpbXBvcnRhbmNlLmluY2x1ZGVzKFwiVUkuSW1wb3J0YW5jZVR5cGUvTG93XCIpKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblx0cmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBJbXBvcnRhbmNlIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblx0cmV0dXJuIGltcG9ydGFuY2UgPyAoaW1wb3J0YW5jZS5zcGxpdChcIi9cIilbMV0gYXMgSW1wb3J0YW5jZSkgOiBJbXBvcnRhbmNlLk5vbmU7XG59XG5cbmZ1bmN0aW9uIF9nZXRNYXhJbXBvcnRhbmNlKGZpZWxkczogRGF0YUZpZWxkVHlwZXNbXSk6IEltcG9ydGFuY2Uge1xuXHRpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IG1heEltcE51bWJlciA9IC0xO1xuXHRcdGxldCBpbXBOdW1iZXIgPSAtMTtcblx0XHRsZXQgRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2U7XG5cdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcblx0XHRcdGltcE51bWJlciA9IF9nZXRJbXBOdW1iZXIoZmllbGQpO1xuXHRcdFx0aWYgKGltcE51bWJlciA+IG1heEltcE51bWJlcikge1xuXHRcdFx0XHRtYXhJbXBOdW1iZXIgPSBpbXBOdW1iZXI7XG5cdFx0XHRcdERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlID0gZmllbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdH1cblx0cmV0dXJuIEltcG9ydGFuY2UuTm9uZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbXBvcnRhbmNlIHZhbHVlIGZvciBhIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcmV0dXJucyBUaGUgaW1wb3J0YW5jZSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0YW5jZShkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCB1bmRlZmluZWQsIHNlbWFudGljS2V5czogU2VtYW50aWNLZXkpOiBJbXBvcnRhbmNlIHwgdW5kZWZpbmVkIHtcblx0Ly9FdmFsdWF0ZSBkZWZhdWx0IEltcG9ydGFuY2UgaXMgbm90IHNldCBleHBsaWNpdGx5XG5cdGxldCBmaWVsZHNXaXRoSW1wb3J0YW5jZSxcblx0XHRtYXBTZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gW107XG5cdC8vQ2hlY2sgaWYgc2VtYW50aWNLZXlzIGFyZSBkZWZpbmVkIGF0IHRoZSBFbnRpdHlTZXQgbGV2ZWxcblx0aWYgKHNlbWFudGljS2V5cyAmJiBzZW1hbnRpY0tleXMubGVuZ3RoID4gMCkge1xuXHRcdG1hcFNlbWFudGljS2V5cyA9IHNlbWFudGljS2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGtleS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikpIHtcblx0XHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxGaWVsZEdyb3VwPihkYXRhRmllbGRUYXJnZXQsIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlKSkge1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSBkYXRhRmllbGRUYXJnZXQuRGF0YTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBIYXNTZW1hbnRpY0tleSA9XG5cdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdGZpZWxkR3JvdXBEYXRhLnNvbWUoZnVuY3Rpb24gKGZpZWxkR3JvdXBEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGZpZWxkR3JvdXBEYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoICYmXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRcdFx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGZpZWxkR3JvdXBEYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly9JZiBhIEZpZWxkR3JvdXAgY29udGFpbnMgYSBzZW1hbnRpY0tleSwgaW1wb3J0YW5jZSBzZXQgdG8gSGlnaFxuXHRcdFx0aWYgKGZpZWxkR3JvdXBIYXNTZW1hbnRpY0tleSkge1xuXHRcdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5IaWdoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9JZiB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgYW4gSW1wb3J0YW5jZSB3ZSB0YWtlIGl0XG5cdFx0XHRcdGlmIChkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZWxzZSB0aGUgaGlnaGVzdCBpbXBvcnRhbmNlIChpZiBhbnkpIGlzIHJldHVybmVkXG5cdFx0XHRcdGZpZWxkc1dpdGhJbXBvcnRhbmNlID1cblx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YSAmJlxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIF9nZXRNYXhJbXBvcnRhbmNlKGZpZWxkc1dpdGhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzW10pO1xuXHRcdFx0fVxuXHRcdFx0Ly9JZiB0aGUgY3VycmVudCBmaWVsZCBpcyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlICYmXG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoICYmXG5cdFx0bWFwU2VtYW50aWNLZXlzLmluY2x1ZGVzKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGgpXG5cdFx0PyBJbXBvcnRhbmNlLkhpZ2hcblx0XHQ6IF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge30sXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSxcblx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHR0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRjb25zdCB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFibGVDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0Z2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSlcblx0XHQpO1xuXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGxpbmVJdGVtKSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgPSBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoLmluZGV4T2YoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkgPiAtMTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWw6IGJvb2xlYW4gPSBpc0ZpZWxkR3JvdXBDb2x1bW5cblx0XHRcdFx0PyBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbChuYW1lLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0OiBmYWxzZTtcblx0XHRcdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBkYXRhVHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBmb3JtYXRPcHRpb25zID0gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoXG5cdFx0XHRcdGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihuYW1lLCBzZW1hbnRpY0tleXMsIGlzRmllbGRHcm91cENvbHVtbiwgbGluZUl0ZW0pXG5cdFx0XHQpO1xuXHRcdFx0bGV0IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxpbmVJdGVtLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRcdGxpbmVJdGVtLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyhsaW5lSXRlbSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoX2lzRXhwb3J0YWJsZUNvbHVtbihsaW5lSXRlbSkpIHtcblx0XHRcdFx0Ly9leGNsdWRlIHRoZSB0eXBlcyBsaXN0ZWQgYWJvdmUgZm9yIHRoZSBFeHBvcnQgKGdlbmVyYXRlcyBlcnJvciBvbiBFeHBvcnQgYXMgUERGKVxuXHRcdFx0XHRleHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzVGVtcGxhdGUsXG5cdFx0XHRcdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzV3JhcHBpbmcsXG5cdFx0XHRcdFx0dHlwZTogZGF0YVR5cGUgPyBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGUsIHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDEpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGlucHV0Rm9ybWF0OiBzRGF0ZUlucHV0Rm9ybWF0LFxuXHRcdFx0XHRcdGRlbGltaXRlcjogZGF0YVR5cGUgPT09IFwiRWRtLkludDY0XCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdFByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lO1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nKSB7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lKSB7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nKSB7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHByb3BlcnR5VHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGRhdGFUeXBlKSB7XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcobGluZUl0ZW0sIGRhdGFUeXBlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0XHRcdFx0Y2xhc3NOYW1lOiBkYXRhVHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0Li4uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHQuLi5wcm9wZXJ0eVR5cGVDb25maWc/LmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29uc3RyYWludHM6IHsgLi4ucHJvcGVydHlUeXBlQ29uZmlnPy5jb25zdHJhaW50cyB9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgdmlzdWFsU2V0dGluZ3M6IFZpc3VhbFNldHRpbmdzID0ge307XG5cdFx0XHRpZiAoIWRhdGFUeXBlIHx8ICF0eXBlQ29uZmlnKSB7XG5cdFx0XHRcdC8vIGZvciBjaGFydHNcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbiA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpc011bHRpVmFsdWUgPSBfaXNDb2x1bW5NdWx0aVZhbHVlZChsaW5lSXRlbSwgdGFibGVDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IHNvcnRhYmxlID0gIWlzTXVsdGlWYWx1ZSAmJiBfaXNDb2x1bW5Tb3J0YWJsZShsaW5lSXRlbSwgcmVsYXRpdmVQYXRoLCBub25Tb3J0YWJsZUNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihsaW5lSXRlbSkgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiAobGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGg/LnZhbHVlT2YoKSBhcyBzdHJpbmcpIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogZ2V0SW1wb3J0YW5jZShsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcywgc2VtYW50aWNLZXlzKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzLFxuXHRcdFx0XHR0aW1lem9uZVRleHQ6IGV4cG9ydFNldHRpbmdzPy50aW1lem9uZSxcblx0XHRcdFx0aXNQYXJ0T2ZMaW5lSXRlbTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAobGluZUl0ZW0pO1xuXHRcdFx0aWYgKHNUb29sdGlwKSB7XG5cdFx0XHRcdGNvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSAmJiBjb2x1bW4uZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goY29sdW1uKTtcblxuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV07XG5cblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBhIG11bHRpLXZhbHVlLCByZWxhdGVkIHByb3BlcnRpZXMgY2Fubm90IGJlIHNvcnRlZCBhcyB3ZSBnbyB0aHJvdWdoIGEgMS1uIHJlbGF0aW9uXG5cdFx0XHRcdGlmIChpc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMucHVzaChyZWxhdGVkUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFthZGRpdGlvbmFsUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdHJldHVybiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoZnVuY3Rpb24gKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0W11cblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4gPSB7fTtcblxuXHRmdW5jdGlvbiBpc0Fubm90YXRpb25Db2x1bW4oXG5cdFx0Y29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0XHRrZXk6IHN0cmluZ1xuXHQpOiBjb2x1bW4gaXMgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChhbm5vdGF0aW9uQ29sdW1uKSA9PiBhbm5vdGF0aW9uQ29sdW1uLmtleSA9PT0ga2V5KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uKTogbWFuaWZlc3RDb2x1bW4gaXMgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IENvbHVtblR5cGUuU2xvdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSB1bmRlZmluZWQgJiYgISFtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdLCBhbm5vdGF0aW9uVGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSkge1xuXHRcdGNvbnN0IG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0cHJvcGVydHlJbmZvcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0YW5ub3RhdGlvblRhYmxlQ29sdW1ucy5mb3JFYWNoKChwcm9wKSA9PiB7XG5cdFx0XHRcdGlmIChwcm9wLm5hbWUgPT09IHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cHJvcC5zb3J0YWJsZSA9IG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHByb3BlcnR5LnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpKSA9PT0gLTE7XG5cdFx0XHRcdFx0cHJvcC5pc0dyb3VwYWJsZSA9IHByb3Auc29ydGFibGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXG5cdFx0Ly8gQmFzZVRhYmxlQ29sdW1uXG5cdFx0Y29uc3QgYmFzZVRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXG5cdFx0aWYgKGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjogQ3VzdG9tRWxlbWVudDxBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSlcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUobWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9ucylcblx0XHRcdH07XG5cdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgYmFzZU1hbmlmZXN0Q29sdW1uID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSB8fCBJbXBvcnRhbmNlLk5vbmUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiB8fCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogcHJvcGVydHlJbmZvc1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpLFxuXHRcdFx0XHRcdFx0XHR3cmFwOiAhIShwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEpXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpZDogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0bmFtZTogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0Ly9OZWVkZWQgZm9yIE1EQzpcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogeyB0ZXh0TGluZXNFZGl0OiA0IH0sXG5cdFx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGZhbHNlLFxuXHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfSxcblx0XHRcdFx0cHJvcGVydGllczogbWFuaWZlc3RDb2x1bW4ucHJvcGVydGllc1xuXHRcdFx0fTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3MsIGFubm90YXRpb25Db2x1bW5zKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuU2xvdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIGlmIChpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuRGVmYXVsdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gJyR7a2V5fScgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYDtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5NYW5pZmVzdCxcblx0XHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCI7XG5cdFx0XHRcdGNhc2UgXCJSZXNwb25zaXZlVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXBcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgc2V0dGluZ3MgZ2V0dGVyIGZvciB0aGUgcGFnZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICovXG5mdW5jdGlvbiBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHkgJiYgbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoY29uZGl0aW9uUHJvcGVydHkuJHRhcmdldD8ubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdGNvbnN0IGluZm9OYW1lID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhbY29uZGl0aW9uUHJvcGVydHldLCBjb2x1bW5zKVswXTtcblx0XHRcdFx0aWYgKGluZm9OYW1lKSB7XG5cdFx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRzb3J0Q29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeShjb25kaXRpb25zKSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uSW5pdGlhbEV4cGFuc2lvbkxldmVsPy52YWx1ZU9mKCk7XG5cblx0cmV0dXJuIHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiA/IGxldmVsIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuXG5mdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnModGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pIHtcblx0Y29uc3QgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUgPSBPYmplY3Qua2V5cyh0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyEpLmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlID09PSBjb2x1bW4ubmFtZSk7XG5cdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSkge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhW2FnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZV07XG5cdFx0XHRjb2x1bW4uYWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZTogYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmRlZmF1bHRBZ2dyZWdhdGUgPz8ge31cblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8pID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHByb3BlcnR5SW5mbyBmb3IgZWFjaCBhZGRpdGlvbmFsIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgbmV3IHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eV9UZWNobmljYWw6OicgZm9yIHVuaXF1ZW5lc3MgYW5kIGl0IGhhcyBiZWVuIG5hbWVkIHRlY2huaWNhbCBwcm9wZXJ0eSBhcyBpdCByZXF1aXJlcyBkZWRpY2F0ZWQgTURDIGF0dHJpYnV0ZXMgKHRlY2huaWNhbGx5R3JvdXBhYmxlIGFuZCB0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSkuXG5cdFx0XHRcdGNyZWF0ZVRlY2huaWNhbFByb3BlcnR5KGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5tYXAoXG5cdFx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0XHQpO1xuXHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byB0aGUgY29tcGxleCBwcm9wZXJ0eSB1c2luZyB0aGUgaGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5jb25jYXQoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCkpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCkgYXMgbnVtYmVyO1xuXHR9XG5cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnMgPSB7XG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGlvblJvdzogZ2V0Q3JlYXRpb25Sb3coY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dClcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25UYXJnZXRQYXRoLFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZVxuXHRcdCksXG5cdFx0cDEzbk1vZGU6IHAxM25Nb2RlLFxuXHRcdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdFx0YWN0aW9uczogc3RhbmRhcmRBY3Rpb25zLFxuXHRcdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkLFxuXHRcdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH0sXG5cdFx0ZGlzcGxheU1vZGU6IGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlndXJhdGlvbiksXG5cdFx0Y3JlYXRlOiBjcmVhdGlvbkJlaGF2aW91cixcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdGF1dG9CaW5kT25Jbml0OlxuXHRcdFx0X2lzRmlsdGVyQmFySGlkZGVuKHBhZ2VNYW5pZmVzdFNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0KSB8fFxuXHRcdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgJiZcblx0XHRcdFx0ISh2aWV3Q29uZmlndXJhdGlvbiAmJiBwYWdlTWFuaWZlc3RTZXR0aW5ncy5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSkpLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHR0aHJlc2hvbGQ6IHRocmVzaG9sZCxcblx0XHRzb3J0Q29uZGl0aW9uczogZ2V0U29ydENvbmRpdGlvbnMoY29udmVydGVyQ29udGV4dCwgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGNvbHVtbnMpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRzZWFyY2hhYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlICE9PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICEoaXNDb25zdGFudChpc1NlYXJjaGFibGUpICYmIGlzU2VhcmNoYWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbDogZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGU6IHN0cmluZywgaXNDb21wbGV4UHJvcGVydHkgPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdGlmIChpc0NvbXBsZXhQcm9wZXJ0eSkge1xuXHRcdGlmIChkYXRhVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnREYXRhVHlwZTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRlY2ltYWxcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRcdGNhc2UgXCJFZG0uRG91YmxlXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIk51bWJlclwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZU9mVGltZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiQm9vbGVhblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaW50byB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIHNwbGl0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IFt0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZT8udmFsdWUgPz8gXCJcIjtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNJcGhvbmU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHQvLyBJZiBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQsIHVzZSBhcyBkZWZhdWx0IHRydWUgb24gcGhvbmUgYW5kIGZhbHNlIG90aGVyd2lzZVxuXHRsZXQgZW5hYmxlRnVsbFNjcmVlbiA9IHRhYmxlU2V0dGluZ3MuZW5hYmxlRnVsbFNjcmVlbiA/PyBpc0lwaG9uZTtcblx0Ly8gTWFrZSBzdXJlIHRoYXQgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0IG9uIExpc3RSZXBvcnQgZm9yIGRlc2t0b3Agb3IgdGFibGV0XG5cdGlmICghaXNJcGhvbmUgJiYgZW5hYmxlRnVsbFNjcmVlbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5GVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCk7XG5cdH1cblx0cmV0dXJuIGVuYWJsZUZ1bGxTY3JlZW47XG59XG5cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgbXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSkge1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ6XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlVHlwZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBUYWJsZVR5cGUge1xuXHRsZXQgdGFibGVUeXBlID0gdGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHQvKiAgTm93LCB3ZSBrZWVwIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBtYW5pZmVzdCwgZXZlbiBpZiBpdCBsZWFkcyB0byBlcnJvcnMuXG5cdFx0V2Ugb25seSBjaGFuZ2UgaWYgd2UncmUgbm90IG9uIGRlc2t0b3AgZnJvbSBBbmFseXRpY2FsL1RyZWUgdG8gUmVzcG9uc2l2ZS5cblx0ICovXG5cdGlmICgodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNEZXNrdG9wKCkpIHtcblx0XHR0YWJsZVR5cGUgPSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHR9XG5cdHJldHVybiB0YWJsZVR5cGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRHcmlkVGFibGVNb2RlKFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0aXNUZW1wbGF0ZUxpc3RSZXBvcnQ6IGJvb2xlYW5cbik6IHsgcm93Q291bnRNb2RlPzogR3JpZFRhYmxlUm93Q291bnRNb2RlOyByb3dDb3VudD86IG51bWJlciB9IHtcblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJHcmlkVGFibGVcIikge1xuXHRcdGlmIChpc1RlbXBsYXRlTGlzdFJlcG9ydCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiBcIkF1dG9cIixcblx0XHRcdFx0cm93Q291bnQ6IDNcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogdGFibGVTZXR0aW5ncy5yb3dDb3VudE1vZGUgPz8gXCJGaXhlZFwiLFxuXHRcdFx0XHRyb3dDb3VudDogdGFibGVTZXR0aW5ncy5yb3dDb3VudCA/IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgOiA1XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KF90YWJsZVR5cGU6IFRhYmxlVHlwZSwgX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgX3RhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdD8gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXRcblx0XHQ6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA/IF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA6IDI7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdLFxuXHRxdWlja1NlbGVjdGlvblZhcmlhbnQ6IHVua25vd24sXG5cdHBhdGg6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pIHtcblx0aWYgKHF1aWNrU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdHF1aWNrRmlsdGVyUGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoIH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0cXVpY2tGaWx0ZXJzOiB7XG5cdFx0XHRlbmFibGVkOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyxcblx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50O1xuXHRsZXQgZmlsdGVycztcblx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRxdWlja1NlbGVjdGlvblZhcmlhbnQgPSB0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdGZpbHRlcnMgPSBfZ2V0RmlsdGVycyh0YWJsZVNldHRpbmdzLCBxdWlja0ZpbHRlclBhdGhzLCBxdWlja1NlbGVjdGlvblZhcmlhbnQsIHBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblxuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEocXVpY2tTZWxlY3Rpb25WYXJpYW50ICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgX21hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlIDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7IC8vIFBhc3RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0ZWQgZm9yIE9QXG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbih0YWJsZVNldHRpbmdzLCBsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IF9nZXRUYWJsZVR5cGUodGFibGVTZXR0aW5ncywgYWdncmVnYXRpb25IZWxwZXIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBncmlkVGFibGVSb3dNb2RlID0gX2dldEdyaWRUYWJsZU1vZGUodGFibGVUeXBlLCB0YWJsZVNldHRpbmdzLCB0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KTtcblx0Y29uc3QgY29uZGVuc2VkVGFibGVMYXlvdXQgPSBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQodGFibGVUeXBlLCB0YWJsZVNldHRpbmdzKTtcblx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Ly8gSWYgbm8gY3JlYXRlQXRFbmQgaXMgc3BlY2lmaWVkIGl0IHdpbGwgYmUgZmFsc2UgZm9yIElubGluZSBjcmVhdGUgYW5kIHRydWUgb3RoZXJ3aXNlXG5cdFx0Y3JlYXRlQXRFbmQ6XG5cdFx0XHR0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZFxuXHRcdFx0XHQ6IGNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcixcblx0XHQvLyBpZiBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCwgaS5lLiBzZXQgdG8gZmFsc2Vcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiAhY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID8gISF0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA6IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdGVuYWJsZUV4cG9ydDogX2dldEVuYWJsZUV4cG9ydCh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBlbmFibGVQYXN0ZSksXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIF9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpKSxcblx0XHRlbmFibGVNYXNzRWRpdDogdGFibGVTZXR0aW5ncz8uZW5hYmxlTWFzc0VkaXQsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdGhlYWRlclZpc2libGU6IHRydWUsXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiBfZ2V0TXVsdGlTZWxlY3RNb2RlKHRhYmxlU2V0dGluZ3MsIHRhYmxlVHlwZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0c2VsZWN0aW9uTGltaXQ6IF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93Q291bnQ6IF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZTogdGFibGVTZXR0aW5ncz8uY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID8/IGZhbHNlLFxuXHRcdHNob3dSb3dDb3VudDogIXRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyAmJiAhX21hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpPy5zaG93Q291bnRzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRpc0NvbXBhY3RUeXBlOiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29tcGFjdFR5cGUoKVxuXHR9O1xuXG5cdGNvbnN0IHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHsgLi4ub0NvbmZpZ3VyYXRpb24sIC4uLmdyaWRUYWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG5cblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nPy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpICYmIG9UYXJnZXRNYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGlnaXRTZXF1ZW5jZX1gXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRnZXRUYWJsZUNvbHVtbnMsXG5cdGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFJvd1N0YXR1c1Zpc2liaWxpdHksXG5cdGdldEltcG9ydGFuY2UsXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BZ1FLQSxVQUFVLEVBTWY7RUFBQSxXQU5LQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0VBQUEsR0FBVkEsVUFBVSxLQUFWQSxVQUFVO0VBOExmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLGVBQWUsQ0FDOUJDLGtCQUE0QixFQUM1QkMsaUJBQXlCLEVBQ3pCQyxnQkFBa0MsRUFDbENDLGtCQUFvRCxFQUNuQztJQUNqQixNQUFNQyxhQUFhLEdBQUdDLHlCQUF5QixDQUFDTCxrQkFBa0IsRUFBRUMsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO0lBQ3hHLE1BQU1JLGtCQUFrQixHQUFHRixhQUFhLENBQUNHLFlBQVk7SUFDckQsTUFBTUMsY0FBYyxHQUFHSixh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
|