@sapui5/sap.fe.macros 1.141.2 → 1.143.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/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge", "sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/controls/CommandExecution", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/CommonHelper", "sap/m/Button", "sap/m/FlexItemData", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbarLayoutData", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/ui/Device", "sap/ui/core/CustomData", "sap/ui/core/Element", "sap/ui/core/Popup", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Chart", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/chart/Item", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/model/json/JSONModel", "../internal/helpers/ActionHelper", "../internal/helpers/DefaultActionHandler", "./ChartHelper", "sap/fe/base/jsx-runtime/jsx"], function (Log, deepClone, merge, uid, BindingToolkit, CommonUtils, BuildingBlockTemplateProcessor, CommandExecution, ConverterContext, ManifestSettings, ManifestWrapper, MetaModelConverter, DataField, Action, DataVisualization, FPMHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, CommonHelper, Button, FlexItemData, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Menu, MenuButton, MenuItem, OverflowToolbarLayoutData, SegmentedButton, SegmentedButtonItem, Device, CustomData, Element, Popup, VariantManagement, MdcChart, ActionToolbarAction, MdcChartItem, PersistenceProvider, JSONModel, ActionHelper, DefaultActionHandler, ChartHelper, _jsx) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge", "sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/controls/CommandExecution", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/CommonHelper", "sap/m/Button", "sap/m/FlexItemData", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbarLayoutData", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/m/ToolbarSeparator", "sap/ui/Device", "sap/ui/core/CustomData", "sap/ui/core/Element", "sap/ui/core/InvisibleText", "sap/ui/core/Popup", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Chart", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/chart/Item", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/model/json/JSONModel", "../internal/helpers/ActionHelper", "../internal/helpers/DefaultActionHandler", "./ChartHelper", "sap/fe/base/jsx-runtime/jsx"], function (Log, deepClone, merge, uid, BindingToolkit, CommonUtils, BuildingBlockTemplateProcessor, CommandExecution, ConverterContext, ManifestSettings, ManifestWrapper, MetaModelConverter, DataField, Action, DataVisualization, FPMHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, CommonHelper, Button, FlexItemData, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Menu, MenuButton, MenuItem, OverflowToolbarLayoutData, SegmentedButton, SegmentedButtonItem, ToolbarSeparator, Device, CustomData, Element, InvisibleText, Popup, VariantManagement, MdcChart, ActionToolbarAction, MdcChartItem, PersistenceProvider, JSONModel, ActionHelper, DefaultActionHandler, ChartHelper, _jsx) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -74,13 +74,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
74
74
|
function getExtraParams(chartBlock, visualizationPath) {
|
|
75
75
|
const extraParams = {};
|
|
76
76
|
const customActions = {};
|
|
77
|
+
const actionOverflowGroups = {};
|
|
77
78
|
if (chartBlock.actions) {
|
|
78
79
|
Object.values(chartBlock.actions)?.forEach(action => {
|
|
79
80
|
if (action.isA("sap.fe.macros.chart.ActionGroup")) {
|
|
80
81
|
customActions[action.key] = getActionProperties(action.key, action.text, null, false, true, {
|
|
81
82
|
placement: action.placement,
|
|
82
83
|
anchor: action.anchor
|
|
83
|
-
}, action.actions.map((_, index) => action.key + "_Menu_" + index));
|
|
84
|
+
}, action.actions.map((_, index) => action.key + "_Menu_" + index), action.group, action.overflowGroup);
|
|
84
85
|
action.actions?.forEach((act, index) => {
|
|
85
86
|
const actionKey = action.key.concat("_Menu_", index);
|
|
86
87
|
customActions[actionKey] = getActionProperties(actionKey, act.text, act.press, !!act.requiresSelection, act.enabled === null || act.enabled === undefined ? true : act.enabled);
|
|
@@ -89,25 +90,35 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
89
90
|
customActions[action.key] = getActionProperties(action.key, action.text, action.press, !!action.requiresSelection, action.enabled === null || action.enabled == undefined ? true : action.enabled, {
|
|
90
91
|
placement: action.placement,
|
|
91
92
|
anchor: action.anchor
|
|
92
|
-
});
|
|
93
|
+
}, undefined, action.group, action.overflowGroup);
|
|
93
94
|
}
|
|
94
95
|
});
|
|
95
96
|
}
|
|
97
|
+
if (chartBlock.actionOverflowGroups) {
|
|
98
|
+
Object.values(chartBlock.actionOverflowGroups)?.forEach(overflowGroup => {
|
|
99
|
+
actionOverflowGroups[overflowGroup.overflowGroup.toString()] = {
|
|
100
|
+
showSeparator: overflowGroup.showSeparator ?? false
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
96
104
|
if (visualizationPath && chartBlock.actions) {
|
|
97
105
|
extraParams[visualizationPath] = {
|
|
98
|
-
actions: customActions
|
|
106
|
+
actions: customActions,
|
|
107
|
+
overflowGroups: actionOverflowGroups
|
|
99
108
|
};
|
|
100
109
|
}
|
|
101
110
|
return extraParams;
|
|
102
111
|
}
|
|
103
|
-
function getActionProperties(key, text, press, requiresSelection, enabled, position, menu) {
|
|
112
|
+
function getActionProperties(key, text, press, requiresSelection, enabled, position, menu, group, overflowGroup) {
|
|
104
113
|
const actionProperties = {
|
|
105
114
|
key,
|
|
106
115
|
text,
|
|
107
116
|
__noWrap: true,
|
|
108
117
|
press,
|
|
109
118
|
requiresSelection,
|
|
110
|
-
enabled
|
|
119
|
+
enabled,
|
|
120
|
+
group,
|
|
121
|
+
overflowGroup
|
|
111
122
|
};
|
|
112
123
|
if (position) {
|
|
113
124
|
actionProperties.position = position;
|
|
@@ -636,6 +647,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
636
647
|
if (action.annotationPath || action.type === "Menu" && !action.id?.startsWith("CustomAction")) {
|
|
637
648
|
// Load annotation based actions
|
|
638
649
|
return getAction(action, chartBlock._chartContext, false, chartBlock);
|
|
650
|
+
} else if (action.type === "Separator") {
|
|
651
|
+
return getSeparator(action);
|
|
639
652
|
} else if (action.hasOwnProperty("noWrap")) {
|
|
640
653
|
// Load XML or manifest based actions / action groups
|
|
641
654
|
return getCustomActions(action, chartBlock._chartContext, chartBlock);
|
|
@@ -741,8 +754,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
741
754
|
useDefaultActionOnly: props.useDefaultActionOnly,
|
|
742
755
|
buttonMode: props.buttonMode,
|
|
743
756
|
menuPosition: Dock.BeginBottom,
|
|
744
|
-
defaultAction:
|
|
757
|
+
defaultAction: props.defaultAction,
|
|
745
758
|
icon: isAIOperation ? aiIcon : undefined,
|
|
759
|
+
ariaDescribedBy: isAIOperation ? [`${chartBlock.getId()}--fe::AiAction::AriaText`] : undefined,
|
|
746
760
|
children: {
|
|
747
761
|
menu: _jsx(Menu, {
|
|
748
762
|
children: aMenuItems
|
|
@@ -774,6 +788,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
774
788
|
enabled: action.enabled,
|
|
775
789
|
menuPosition: Dock.BeginBottom,
|
|
776
790
|
icon: action?.isAIOperation === true ? aiIcon : undefined,
|
|
791
|
+
ariaDescribedBy: action?.isAIOperation === true ? [`${chartBlock.getId()}--fe::AiAction::AriaText`] : undefined,
|
|
777
792
|
children: {
|
|
778
793
|
menu: _jsx(Menu, {
|
|
779
794
|
children: menuItems
|
|
@@ -788,6 +803,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
788
803
|
}
|
|
789
804
|
return undefined;
|
|
790
805
|
}
|
|
806
|
+
function getSeparator(action) {
|
|
807
|
+
return _jsx(ActionToolbarAction, {
|
|
808
|
+
children: _jsx(ToolbarSeparator, {
|
|
809
|
+
children: {
|
|
810
|
+
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
811
|
+
group: action.group
|
|
812
|
+
})
|
|
813
|
+
}
|
|
814
|
+
})
|
|
815
|
+
});
|
|
816
|
+
}
|
|
791
817
|
function getNavigationActions(action, dataFieldContext, isMenuItem, chartBlock) {
|
|
792
818
|
let enabled = "true";
|
|
793
819
|
const dataField = dataFieldContext.getObject();
|
|
@@ -846,7 +872,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
846
872
|
controlId: chartBlock._blockId,
|
|
847
873
|
operationAvailableMap: chartOperationAvailableMap,
|
|
848
874
|
model: view.getModel(),
|
|
849
|
-
label: dataField?.Label
|
|
875
|
+
label: dataField?.Label,
|
|
876
|
+
disableStrictHandling: action.disableStrictHandling
|
|
850
877
|
};
|
|
851
878
|
controller.editFlow.invokeAction(dataField?.Action, params);
|
|
852
879
|
} else if (action.type === "ForNavigation") {
|
|
@@ -880,6 +907,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
880
907
|
enabled: toolbarAction.enabled,
|
|
881
908
|
visible: toolbarAction.visible,
|
|
882
909
|
icon: action.isAIOperation === true ? aiIcon : undefined,
|
|
910
|
+
ariaDescribedBy: action?.isAIOperation === true ? [`${chartBlock.getId()}--fe::AiAction::AriaText`] : undefined,
|
|
883
911
|
children: {
|
|
884
912
|
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
885
913
|
priority: action.priority,
|
|
@@ -943,7 +971,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
943
971
|
controlId: chartBlock?._blockId,
|
|
944
972
|
operationAvailableMap: chartOperationAvailableMap,
|
|
945
973
|
model: view.getModel(),
|
|
946
|
-
label: dataField?.Label
|
|
974
|
+
label: dataField?.Label,
|
|
975
|
+
disableStrictHandling: action.disableStrictHandling
|
|
947
976
|
};
|
|
948
977
|
controller.editFlow.invokeAction(dataField?.Action, params);
|
|
949
978
|
} else if (action.type === "ForNavigation") {
|
|
@@ -1169,7 +1198,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
1169
1198
|
chartDimensionKeyAndRole: chartBlock.chartDefinition?.chartDimensionKeyAndRole,
|
|
1170
1199
|
chartMeasureKeyAndRole: chartBlock.chartDefinition?.chartMeasureKeyAndRole
|
|
1171
1200
|
};
|
|
1172
|
-
|
|
1201
|
+
const navProps = contextObjectPath.navigationProperties;
|
|
1202
|
+
const lastNavProp = navProps[navProps.length - 1];
|
|
1203
|
+
const isContainment = lastNavProp?.containsTarget && contextObjectPath.targetEntitySet === undefined;
|
|
1204
|
+
if ((chartBlock.chartDefinition.isParameterizedEntitySet ?? false) || (isContainment ?? false)) {
|
|
1173
1205
|
chartBlock._customData.entitySet = chartBlock.chartDefinition.collection.substring(1);
|
|
1174
1206
|
}
|
|
1175
1207
|
} else {
|
|
@@ -1290,7 +1322,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
1290
1322
|
visible: chartBlock.visible,
|
|
1291
1323
|
children: {
|
|
1292
1324
|
customData: getCustomData(chartBlock),
|
|
1293
|
-
dependents: [getDependents(chartBlock, chartBlock._chartContext), getPersistenceProvider(chartBlock)],
|
|
1325
|
+
dependents: [getDependents(chartBlock, chartBlock._chartContext), getPersistenceProvider(chartBlock), getAccAIActionInvisibleText(chartBlock)],
|
|
1294
1326
|
items: getItems(chartBlock),
|
|
1295
1327
|
actions: chartBlock.chartActions ? getToolbarActions(chartBlock) : chartBlock._blockActions,
|
|
1296
1328
|
variant: createVariantManagement(chartBlock),
|
|
@@ -1298,7 +1330,21 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
|
|
|
1298
1330
|
}
|
|
1299
1331
|
});
|
|
1300
1332
|
}
|
|
1333
|
+
|
|
1334
|
+
/**
|
|
1335
|
+
* This function returns the InvisibleText for the AI Action buttons.
|
|
1336
|
+
* @param chartBlock ChartBlock instance
|
|
1337
|
+
* @returns InvisibleText control
|
|
1338
|
+
*/
|
|
1301
1339
|
_exports.getMdcChartTemplate = getMdcChartTemplate;
|
|
1340
|
+
function getAccAIActionInvisibleText(chartBlock) {
|
|
1341
|
+
const invisibleTextAccAIAction = new InvisibleText({
|
|
1342
|
+
id: `${chartBlock.getId()}--fe::AiAction::AriaText`,
|
|
1343
|
+
text: "{sap.fe.i18n>C_ACCESSIBILITY_AI_ACTION_ARIA_TEXT}"
|
|
1344
|
+
});
|
|
1345
|
+
invisibleTextAccAIAction.toStatic();
|
|
1346
|
+
return invisibleTextAccAIAction;
|
|
1347
|
+
}
|
|
1302
1348
|
return _exports;
|
|
1303
1349
|
}, false);
|
|
1304
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwiYWN0aW9uIiwiaXNBIiwia2V5IiwiZ2V0QWN0aW9uUHJvcGVydGllcyIsInRleHQiLCJwbGFjZW1lbnQiLCJhbmNob3IiLCJtYXAiLCJfIiwiaW5kZXgiLCJhY3QiLCJhY3Rpb25LZXkiLCJjb25jYXQiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlZCIsInVuZGVmaW5lZCIsInBvc2l0aW9uIiwibWVudSIsImFjdGlvblByb3BlcnRpZXMiLCJfX25vV3JhcCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZGF0YSIsImNvbnRleHRQYXRoIiwidWlkIiwiYWN0aW9uc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0UHJvcGVydHkiLCJnZXRDaGFydE1lYXN1cmVzIiwiY2hhcnRBbm5vdGF0aW9uUGF0aCIsImNoYXJ0RGVmaW5pdGlvbiIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJmaWx0ZXIiLCJpdGVtIiwicG9zIiwiaW5kZXhPZiIsInRvU3RyaW5nIiwicmVwbGFjZUFsbCIsIm9DaGFydCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIl9tZXRhTW9kZWwiLCJfY29udGV4dCIsInRhcmdldE9iamVjdCIsIm1lYXN1cmVzIiwiYW5ub1BhdGgiLCJnZXRQYXRoIiwiY2hhcnRNZWFzdXJlcyIsIk1lYXN1cmVzIiwiY2hhcnREeW5hbWljTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJlbnRpdHlTZXRQYXRoIiwicmVwbGFjZSIsInRyYW5zQWdncmVnYXRpb25zIiwidHJhbnNBZ2ciLCJjdXN0b21BZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2ciLCJjb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsImNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlIiwib0NoYXJ0TWVhc3VyZSIsIm9DdXN0b21BZ2dNZWFzdXJlIiwiZ2V0Q3VzdG9tQWdnTWVhc3VyZSIsIkVycm9yIiwiZHluYW1pY01lYXN1cmUiLCJnZXREeW5hbWljTWVhc3VyZXMiLCJjaGFydE1lYXN1cmUiLCJ2YWx1ZSIsImN1c3RvbUFnZ01lYXN1cmUiLCJtZWFzdXJlVHlwZSIsInNldEN1c3RvbUFnZ01lYXN1cmUiLCJzZXRUcmFuc0FnZ01lYXN1cmUiLCJzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzIiwiX2NoYXJ0IiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlc01vZGVsIiwiJCR2YWx1ZUFzUHJvbWlzZSIsIm1lYXN1cmUiLCJlcnJvciIsInJvbGUiLCJsYWJlbCIsInByb3BlcnR5UGF0aCIsInB1c2giLCJ0cmFuc0FnZ01lYXN1cmUiLCJuYW1lIiwiYWdncmVnYXRpb25NZXRob2QiLCJjaGFydER5bmFtaWNNZWFzdXJlIiwiY2hhcnQiLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJzdGFydHNXaXRoIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiQWdncmVnYXRpb25NZXRob2QiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCIkdGFyZ2V0IiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZSIsInBhdGgiLCJEeW5hbWljTWVhc3VyZSIsIk1lYXN1cmUiLCJtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50IiwiRGF0YVBvaW50IiwiUm9sZSIsImRhdGFQb2ludCIsInNldE1lYXN1cmVSb2xlIiwic2V0TWVhc3VyZURhdGFQb2ludCIsImNyZWF0ZURhdGFQb2ludFByb3BlcnR5Iiwib0RhdGFQb2ludEFubm8iLCJvRGF0YVBvaW50IiwiVGFyZ2V0VmFsdWUiLCJ0YXJnZXRWYWx1ZSIsIiRQYXRoIiwiRm9yZWNhc3RWYWx1ZSIsImZvcmVDYXN0VmFsdWUiLCJvQ3JpdGljYWxpdHkiLCJDcml0aWNhbGl0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiQ2FsY3VsYXRlZCIsIlN0YXRpYyIsIiRFbnVtTWVtYmVyIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsIm9UaHJlc2hvbGRzIiwiYkNvbnN0YW50IiwiYnVpbGRUaHJlc2hvbGRzIiwiQ29uc3RhbnRUaHJlc2hvbGRzIiwiRHluYW1pY1RocmVzaG9sZHMiLCJjcml0aWNhbGl0eSIsInRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwia2V5cyIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwiZHluYW1pY1RocmVzaG9sZHMiLCJvbmVTdXBwbGllZCIsInVzZWRNZWFzdXJlcyIsImNvbnN0YW50VGhyZXNob2xkcyIsImluaXRpYWxpc2VUaHJlc2hvbGRzIiwicHJvY2Vzc1RocmVzaG9sZHMiLCJBZ2dyZWdhdGlvbkxldmVscyIsInByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyIsIm9BZ2dyZWdhdGlvbkxldmVsIiwiVmlzaWJsZURpbWVuc2lvbnMiLCJzS2V5IiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzIiwiYWdncmVnYXRpb25MZXZlbCIsImFnZ3JlZ2F0aW9uTGV2ZWxJbmZvIiwidmlzaWJsZURpbWVuc2lvbnMiLCJBZ2dyZWdhdGlvbkxldmVsIiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlIiwiQ2hhcnRIZWxwZXIiLCJmb3JtYXRKU09OVG9TdHJpbmciLCJnZXREZXBlbmRlbnRzIiwiY2hhcnRDb250ZXh0IiwiX2NvbW1hbmRBY3Rpb25zIiwiY29tbWFuZEFjdGlvbiIsImdldEFjdGlvbkNvbW1hbmQiLCJjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzIiwicGVyc29uYWxpemF0aW9uIiwiX3BlcnNvbmFsaXphdGlvbiIsImpvaW4iLCJ2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbiIsInZhbGlkIiwic3BsaXRBcnJheSIsImFjY2VwdGVkVmFsdWVzIiwiYXJyYXlFbGVtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50TWFuYWdlbWVudCIsImNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50IiwiX2pzeCIsIlZhcmlhbnRNYW5hZ2VtZW50IiwiaWQiLCJnZW5lcmF0ZSIsIl9ibG9ja0lkIiwiZm9yIiwic2hvd1NldEFzRGVmYXVsdCIsImhlYWRlckxldmVsIiwic2VsZWN0IiwiZXZlbnQiLCJmaXJlVmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsImZpcmVWYXJpYW50U2F2ZWQiLCJnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsInB1c2hBY3Rpb25Db21tYW5kIiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZCIsImNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwib25FeGVjdXRlQWN0aW9uIiwiZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsIm9uRXhlY3V0ZUlCTiIsIkNvbW1vbkhlbHBlciIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwiZGF0YUZpZWxkQ29udGV4dCIsImRhdGFGaWVsZEFjdGlvbiIsImdldEFjdGlvbkNvbnRleHQiLCJpc0JvdW5kUGF0aCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJpc0JvdW5kIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJjb250ZXh0IiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkIiwiJElzQm91bmQiLCJBY3Rpb24iLCJlbmFibGVPblNlbGVjdCIsImlzSUJORW5hYmxlZCIsIlJlcXVpcmVzQ29udGV4dCIsImNvbW1hbmRFbmFibGVkIiwidHlwZSIsImFjdGlvbkNvbW1hbmQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImNvbW1hbmRFeGVjdXRlIiwidmlzaWJsZSIsImdldFZpc2libGUiLCJjb21tYW5kIiwiSXNCb3VuZCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJwYXJhbXMiLCJjb250ZXh0cyIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJjb250cm9sSWQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJtb2RlbCIsImdldE1vZGVsIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwiU2VtYW50aWNPYmplY3QiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJnZXRJdGVtcyIsImRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwiZm9ybWF0RGltZW5zaW9ucyIsIl9jaGFydENvbnRleHQiLCJkaW1lbnNpb24iLCJnZXRJdGVtIiwiZm9ybWF0TWVhc3VyZXMiLCJwcmVmaXgiLCJNZGNDaGFydEl0ZW0iLCJwcm9wZXJ0eUtleSIsImdldFRvb2xiYXJBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImdldFNlZ21lbnRlZEJ1dHRvbiIsImlzSW5zaWdodHNFbmFibGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25zIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiY2hpbGRyZW4iLCJCdXR0b24iLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJyZW1vdmVNZW51SXRlbXMiLCJjaGFydEFjdGlvbnMiLCJhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiIsIkFjdGlvbkhlbHBlciIsImVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyIsImdldEFjdGlvbiIsImhhc093blByb3BlcnR5IiwiZ2V0Q3VzdG9tQWN0aW9ucyIsImlkeCIsInNwbGljZSIsImFjdGlvbkVuYWJsZWQiLCJnZXRBY3Rpb25Ub29sYmFyQWN0aW9uIiwidW5pdHRlc3RpZCIsImFyaWFIYXNQb3B1cCIsImdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJEZWZhdWx0QWN0aW9uSGFuZGxlciIsImdldFVzZURlZmF1bHRBY3Rpb25Pbmx5IiwiYnV0dG9uTW9kZSIsImdldEJ1dHRvbk1vZGUiLCJkZWZhdWx0QWN0aW9uIiwiZ3JvdXAiLCJnZXRNZW51SXRlbUZyb21NZW51IiwibWVudUl0ZW1BY3Rpb24iLCJwcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJmdW5jdGlvbk5hbWUiLCJzZWxlY3RlZENvbnRleHRzIiwiTWVudUl0ZW0iLCJwcm9wcyIsImFNZW51SXRlbXMiLCJpc0FJT3BlcmF0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJNZW51QnV0dG9uIiwibWVudVBvc2l0aW9uIiwiRG9jayIsIkJlZ2luQm90dG9tIiwiaWNvbiIsImFpSWNvbiIsIk1lbnUiLCJpc01lbnVJdGVtIiwiZ2V0TmF2aWdhdGlvbkFjdGlvbnMiLCJnZXRBbm5vdGF0aW9uQWN0aW9ucyIsIm1lbnVJdGVtcyIsIm1lbnVBY3Rpb24iLCJhY3Rpb25PYmplY3QiLCJnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQiLCJkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgiLCJpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIiwidG9vbGJhckFjdGlvbiIsInByZXNzRXZlbnQiLCJidWlsZEFjdGlvbiIsImdldEFjdGlvblByZXNzIiwiYWN0aW9uUHJlc3MiLCJnZXRDdXN0b21BY3Rpb25QcmVzcyIsImdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoIiwiZ2V0U3RhbmRhcmRBY3Rpb25QcmVzc1dpdGhOb0NvbW1hbmQiLCJsYXlvdXRJbmZvcm1hdGlvbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImFsaWdubWVudCIsIlNlZ21lbnRlZEJ1dHRvbiIsInNlbGVjdGlvbkNoYW5nZSIsImZpcmVTZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwibWVyZ2UiLCJnZXRQYXJhbWV0ZXJzIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm5vdEVxdWFsIiwicGF0aEluTW9kZWwiLCJpdGVtcyIsImdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwic2VnbWVudGVkQnV0dG9uSXRlbXMiLCJpc0Rlc2t0b3AiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtIiwidG9vbHRpcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsIm1ldGFQYXRoIiwidGVybSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiY2hhcnRWaXoiLCJmaW5kIiwidml6IiwiaGlkZGVuUGF0aENvbnRleHQiLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbkZvclRhYmxlQWN0aW9uc0FuZElCTiIsImdldENoYXJ0Q29udmVydGVyQ29udGV4dCIsInByb3BlcnRpZXMiLCJvcmlnaW5hbFZpZXdEYXRhIiwiZGlhZ25vc3RpY3MiLCJ2aWV3RGF0YSIsImFzc2lnbiIsInJlc291cmNlTW9kZWwiLCJhcHBDb21wb25lbnQiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInJlbGF0aXZlUGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJlbnRpdHlTZXROYW1lIiwidGFyZ2V0RW50aXR5U2V0IiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiTWFuaWZlc3RXcmFwcGVyIiwiZ2V0Q29udmVydGVyQ29udGV4dCIsImluaXRpYWxDb252ZXJ0ZXJDb250ZXh0IiwibW9kaWZ5SWRlbnRpZmllcnMiLCJfYXBwbHlJZFRvQ29udGVudCIsIl9jb250ZW50SWQiLCJpbml0aWFsaXNlIiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJfcmVzb2x2ZWRDb250ZXh0UGF0aCIsIl9nZXRPd25lciIsInByZXByb2Nlc3NvckNvbnRleHQiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJnZXRDb250ZXh0UGF0aCIsInZpZXdDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImlzTXVsdGlUYWJzIiwicGF0aHMiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0VWlDaGFydCIsIl9ibG9ja0FjdGlvbnMiLCJjb2xsZWN0aW9uIiwibmF2aWdhdGlvblBhdGgiLCJhdXRvQmluZE9uSW5pdCIsInZpelByb3BlcnRpZXMiLCJnZXRGaWx0ZXJCYXIiLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiX2NoYXJ0VHlwZSIsImZvcm1hdENoYXJ0VHlwZSIsIkNoYXJ0VHlwZSIsImNvbW1hbmRBY3Rpb25zIiwicHJlc2VudGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0IiwiX3NvcnRDb25kaXRpb25zIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJhcHBseVN1cHBvcnRlZCIsImNoYXJ0QWN0aW9uc0NvbnRleHQiLCJBY3Rpb25zIiwidGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsInRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCIsImFjdGlvbnNPYmplY3QiLCJjb252ZXJ0ZWRUeXBlcyIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiX2N1c3RvbURhdGEiLCJlbnRpdHlUeXBlIiwicGFyc2UiLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwic2VnbWVudGVkQnV0dG9uSWQiLCJtdWx0aVZpZXdzIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJjaGFydERpbWVuc2lvbktleUFuZFJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0Iiwic3Vic3RyaW5nIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RGVsZWdhdGUiLCJjaGFydERlbGVnYXRlIiwicGF5bG9hZCIsInNlbGVjdGlvbk1vZGUiLCJ0b1VwcGVyQ2FzZSIsImNoYXJ0Q29udGV4dFBhdGgiLCJwYXJhbWV0ZXJzIiwiJCRncm91cElkIiwiZ2V0Q3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJnZXROb0RhdGEiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkF1dG8iLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIkJlZm9yZVNlYXJjaCIsInRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJkZXNjcmlwdGlvbiIsImVuYWJsZURlZmF1bHRUaXRsZUFuZERlc2NyaXB0aW9uIiwiZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcyIsImdldE1kY0NoYXJ0VGVtcGxhdGUiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwic2hyaW5rRmFjdG9yIiwiTWRjQ2hhcnQiLCJiaW5kaW5nIiwiaW50ZXJuYWwiLCJjaGFydFR5cGUiLCJzb3J0Q29uZGl0aW9ucyIsImhlYWRlciIsIlRpdGxlIiwiaGVhZGVyVmlzaWJsZSIsIm1pbkhlaWdodCIsIkRldmljZSIsInN5c3RlbSIsInBob25lIiwiaGVpZ2h0Iiwid2lkdGgiLCJoZWFkZXJTdHlsZSIsInAxM25Nb2RlIiwibm9EYXRhVGV4dCIsImRlbGVnYXRlIiwiY3VzdG9tRGF0YSIsImRlcGVuZGVudHMiLCJ2YXJpYW50Iiwibm9EYXRhIiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1kY0NoYXJ0VGVtcGxhdGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBBbmFseXRpY3NBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRDaGFydE1lYXN1cmVSb2xlVHlwZSxcblx0Q2hhcnQgYXMgQ2hhcnRUeXBlLFxuXHRDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YVBvaW50LFxuXHRJbXByb3ZlbWVudERpcmVjdGlvblR5cGUsXG5cdExldmVsVGhyZXNob2xkc1R5cGUsXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLCBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQge1xuXHRub3RFcXVhbCxcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nLFxuXHR0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0dHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MsIENvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0YWlJY29uLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0dHlwZSBBbm5vdGF0aW9uQWN0aW9uLFxuXHR0eXBlIEJhc2VBY3Rpb24sXG5cdHR5cGUgQ3VzdG9tQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRQMTNuVHlwZSwgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbGl6YXRpb25BbmRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Hcm91cCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9BY3Rpb25Hcm91cFwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHR5cGUgeyBTZWdtZW50ZWRCdXR0b24kU2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b25JdGVtIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25JdGVtXCI7XG5pbXBvcnQgdHlwZSB7IE92ZXJmbG93VG9vbGJhclByaW9yaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBEb2NrIH0gZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRNYW5hZ2VtZW50JFNhdmVFdmVudCwgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IE1kY0NoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IE1kY0NoYXJ0SXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9JdGVtXCI7XG5pbXBvcnQgUGVyc2lzdGVuY2VQcm92aWRlciBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1BlcnNpc3RlbmNlUHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCIuLi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IERlZmF1bHRBY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0RlZmF1bHRBY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSBcIi4vQ2hhcnRIZWxwZXJcIjtcblxuY29uc3QgbWVhc3VyZVJvbGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczFcIjogXCJheGlzMVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMyXCI6IFwiYXhpczJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzM1wiOiBcImF4aXMzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczRcIjogXCJheGlzNFwiXG59O1xudHlwZSBFeHRlbmRlZEFjdGlvbkdyb3VwID0gQWN0aW9uR3JvdXAgJiB7IG1lbnVDb250ZW50QWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIEFjdGlvbj4gfTtcbnR5cGUgQ2hhcnRQYXlsb2FkID0ge1xuXHRjaGFydENvbnRleHRQYXRoOiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IG9iamVjdDtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nO1xufTtcbnR5cGUgQ2hhcnREZWxlZ2F0ZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXlsb2FkOiBDaGFydFBheWxvYWQ7XG59O1xuZXhwb3J0IHR5cGUgQWN0aW9uT3JBY3Rpb25Hcm91cCA9IFJlY29yZDxzdHJpbmcsIEFjdGlvbiB8IEV4dGVuZGVkQWN0aW9uR3JvdXA+O1xuZXhwb3J0IHR5cGUgQ3VzdG9tQW5kQWN0aW9uID0gQ3VzdG9tQWN0aW9uICYgKEFjdGlvbiB8IEFjdGlvbkdyb3VwKTtcbnR5cGUgQ3VzdG9tVG9vbGJhck1lbnVBY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dmlzaWJsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0dXNlRGVmYXVsdEFjdGlvbk9ubHk/OiBib29sZWFuO1xuXHRidXR0b25Nb2RlPzogc3RyaW5nO1xuXHRkZWZhdWx0QWN0aW9uPzogc3RyaW5nO1xuXHRhY3Rpb25zPzogQ3VzdG9tQWN0aW9uO1xuXHRwcmlvcml0eT86IE92ZXJmbG93VG9vbGJhclByaW9yaXR5O1xuXHRncm91cD86IG51bWJlcjtcbn07XG5cbmVudW0gcGVyc29uYWxpemF0aW9uVmFsdWVzIHtcblx0U29ydCA9IFwiU29ydFwiLFxuXHRUeXBlID0gXCJUeXBlXCIsXG5cdEl0ZW0gPSBcIkl0ZW1cIixcblx0RmlsdGVyID0gXCJGaWx0ZXJcIlxufVxuXG5leHBvcnQgdHlwZSBNZWFzdXJlVHlwZSA9IHtcblx0aWQ/OiBzdHJpbmc7XG5cdGtleT86IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRkYXRhUG9pbnQ/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIERpbWVuc2lvblR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tbWFuZEFjdGlvbiA9IHtcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dDtcblx0b25FeGVjdXRlQWN0aW9uOiBzdHJpbmc7XG5cdG9uRXhlY3V0ZUlCTj86IHN0cmluZztcblx0b25FeGVjdXRlTWFuaWZlc3Q6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcbn07XG5cbnR5cGUgVG9vbEJhckFjdGlvbiA9IHtcblx0dW5pdHRlc3RpZDogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0YXJpYUhhc1BvcHVwPzogc3RyaW5nO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHZpc2libGU6IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydEN1c3RvbURhdGEgPSB7XG5cdHRhcmdldENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRlbnRpdHlUeXBlOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogc3RyaW5nO1xuXHRzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nO1xuXHRjdXN0b21BZ2c6IG9iamVjdDtcblx0dHJhbnNBZ2c6IG9iamVjdDtcblx0YXBwbHlTdXBwb3J0ZWQ6IG9iamVjdDtcblx0dml6UHJvcGVydGllczogb2JqZWN0O1xuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IG9iamVjdDtcblx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlPzogb2JqZWN0O1xuXHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlPzogb2JqZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDb250ZXh0T2JqZWN0UGF0aCA9IENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50O1xuXG50eXBlIEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdGtleTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdF9fbm9XcmFwOiBib29sZWFuO1xuXHRwcmVzczogc3RyaW5nIHwgbnVsbDtcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW47XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHBvc2l0aW9uPzogb2JqZWN0O1xuXHRtZW51Pzogc3RyaW5nW107XG59O1xuXG50eXBlIFRvb2xiYXJBY3Rpb24gPSBNZW51SXRlbSB8IEFjdGlvblRvb2xiYXJBY3Rpb24gfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoYXJ0RGVmaW5pdGlvbihcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRUeXBlIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb250cm9sUGF0aDogc3RyaW5nXG4pOiBDaGFydFZpc3VhbGl6YXRpb24ge1xuXHRsZXQgdmlzdWFsaXphdGlvblBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGNvbnRleHRPYmplY3RQYXRoKTtcblx0bGV0IHZpc3VhbGl6YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcblx0aWYgKGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dD8uZ2V0T2JqZWN0KCk/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5QcmVzZW50YXRpb25WYXJpYW50VHlwZSkge1xuXHRcdHZpc3VhbGl6YXRpb25zID0gY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0LmdldE9iamVjdCgpLlZpc3VhbGl6YXRpb25zO1xuXHR9IGVsc2UgaWYgKGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dD8uZ2V0T2JqZWN0KCk/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkge1xuXHRcdHZpc3VhbGl6YXRpb25zID0gY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0LmdldE9iamVjdCgpLlByZXNlbnRhdGlvblZhcmlhbnQ/LlZpc3VhbGl6YXRpb25zO1xuXHR9XG5cdGlmICh2aXN1YWxpemF0aW9ucz8ubGVuZ3RoICYmICFjaGVja0NoYXJ0RXhpc3RzKHZpc3VhbGl6YXRpb25zLCBjb250cm9sUGF0aCkpIHtcblx0XHR2aXN1YWxpemF0aW9uUGF0aCA9IFwiXCI7XG5cdH1cblxuXHQvLyBmYWxsYmFjayB0byBkZWZhdWx0IENoYXJ0IGlmIHZpc3VhbGl6YXRpb25QYXRoIGlzIG1pc3Npbmcgb3IgdmlzdWFsaXphdGlvblBhdGggaXMgbm90IGZvdW5kIGluIGNvbnRyb2wgKGluIGNhc2Ugb2YgUHJlc2VudGF0aW9uVmFyaWFudClcblx0aWYgKCF2aXN1YWxpemF0aW9uUGF0aCkge1xuXHRcdHZpc3VhbGl6YXRpb25QYXRoID0gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH1cblxuXHRjb25zdCB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGNoYXJ0QmxvY2sudXNlQ29uZGVuc2VkTGF5b3V0LFxuXHRcdGlzTWFjcm9Pck11bHRpcGxlVmlldzogdHJ1ZSxcblx0XHRzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbjogZmFsc2Vcblx0fSk7XG5cdHJldHVybiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2hhcnRFeGlzdHModmlzdWFsaXphdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdmlzdWFsaXphdGlvbnMuc29tZSgodmlzdWFsaXphdGlvbikgPT4gdmlzdWFsaXphdGlvblBhdGg/LmluY2x1ZGVzKHZpc3VhbGl6YXRpb24uJEFubm90YXRpb25QYXRoKSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRJZChtYWNyb0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7bWFjcm9JZH0tY29udGVudGA7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdXNlZCB0byBnZXQgZGV0YWlscyBXUlQgYWN0aW9uKHMpIHNob3duIGluIHRoZSBjaGFydCdzIHRvb2xiYXIuXG4gKiBAcGFyYW0gY2hhcnRCbG9jayBDaGFydCBibG9jayBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVmlzdWFsaXphdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhbGwgdGhlIHJlcXVpcmVkIGFjdGlvbihzKSBkZXRhaWxzXG4gKi9cbmZ1bmN0aW9uIGdldEV4dHJhUGFyYW1zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+IHtcblx0Y29uc3QgZXh0cmFQYXJhbXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0Y29uc3QgY3VzdG9tQWN0aW9uczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXG5cdGlmIChjaGFydEJsb2NrLmFjdGlvbnMpIHtcblx0XHRPYmplY3QudmFsdWVzKGNoYXJ0QmxvY2suYWN0aW9ucyk/LmZvckVhY2goKGFjdGlvbjogQWN0aW9uIHwgQWN0aW9uR3JvdXApID0+IHtcblx0XHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbkdyb3VwPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uR3JvdXBcIikpIHtcblx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb24ua2V5XSA9IGdldEFjdGlvblByb3BlcnRpZXMoXG5cdFx0XHRcdFx0YWN0aW9uLmtleSxcblx0XHRcdFx0XHRhY3Rpb24udGV4dCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiBhY3Rpb24ucGxhY2VtZW50LFxuXHRcdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhY3Rpb24uYWN0aW9ucy5tYXAoKF8sIGluZGV4KSA9PiBhY3Rpb24ua2V5ICsgXCJfTWVudV9cIiArIGluZGV4KVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGFjdGlvbi5hY3Rpb25zPy5mb3JFYWNoKChhY3Q6IEFjdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvbktleSA9IGFjdGlvbi5rZXkuY29uY2F0KFwiX01lbnVfXCIsIGluZGV4IGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRjdXN0b21BY3Rpb25zW2FjdGlvbktleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0YWN0aW9uS2V5LFxuXHRcdFx0XHRcdFx0YWN0LnRleHQsXG5cdFx0XHRcdFx0XHRhY3QucHJlc3MsXG5cdFx0XHRcdFx0XHQhIWFjdC5yZXF1aXJlc1NlbGVjdGlvbixcblx0XHRcdFx0XHRcdGFjdC5lbmFibGVkID09PSBudWxsIHx8IGFjdC5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogYWN0LmVuYWJsZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLmlzQTxBY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy5jaGFydC5BY3Rpb25cIikpIHtcblx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb24ua2V5XSA9IGdldEFjdGlvblByb3BlcnRpZXMoXG5cdFx0XHRcdFx0YWN0aW9uLmtleSxcblx0XHRcdFx0XHRhY3Rpb24udGV4dCxcblx0XHRcdFx0XHRhY3Rpb24ucHJlc3MsXG5cdFx0XHRcdFx0ISFhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRcdFx0YWN0aW9uLmVuYWJsZWQgPT09IG51bGwgfHwgYWN0aW9uLmVuYWJsZWQgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFjdGlvbi5lbmFibGVkLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogYWN0aW9uLnBsYWNlbWVudCxcblx0XHRcdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAodmlzdWFsaXphdGlvblBhdGggJiYgY2hhcnRCbG9jay5hY3Rpb25zKSB7XG5cdFx0ZXh0cmFQYXJhbXNbdmlzdWFsaXphdGlvblBhdGhdID0ge1xuXHRcdFx0YWN0aW9uczogY3VzdG9tQWN0aW9uc1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZXh0cmFQYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByb3BlcnRpZXMoXG5cdGtleTogc3RyaW5nLFxuXHR0ZXh0OiBzdHJpbmcsXG5cdHByZXNzOiBzdHJpbmcgfCBudWxsLFxuXHRyZXF1aXJlc1NlbGVjdGlvbjogYm9vbGVhbixcblx0ZW5hYmxlZDogYm9vbGVhbixcblx0cG9zaXRpb24/OiBvYmplY3QsXG5cdG1lbnU/OiBzdHJpbmdbXVxuKTogQWN0aW9uUHJvcGVydGllcyB7XG5cdGNvbnN0IGFjdGlvblByb3BlcnRpZXM6IEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdFx0a2V5LFxuXHRcdHRleHQsXG5cdFx0X19ub1dyYXA6IHRydWUsXG5cdFx0cHJlc3MsXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0ZW5hYmxlZFxuXHR9O1xuXG5cdGlmIChwb3NpdGlvbikge1xuXHRcdGFjdGlvblByb3BlcnRpZXMucG9zaXRpb24gPSBwb3NpdGlvbjtcblx0fVxuXHRpZiAobWVudSkge1xuXHRcdGFjdGlvblByb3BlcnRpZXMubWVudSA9IG1lbnU7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9uUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YTogb2JqZWN0IHwgQmFzZUFjdGlvbltdIHwgQ3VzdG9tQWN0aW9uKTogQ29udGV4dCB7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gYC8ke3VpZCgpfWA7XG5cdGNvbnN0IGFjdGlvbnNNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0YWN0aW9uc01vZGVsLnNldFByb3BlcnR5KGNvbnRleHRQYXRoLCBkYXRhKTtcblx0cmV0dXJuIGFjdGlvbnNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjb250ZXh0UGF0aCkhO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydE1lYXN1cmVzKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBDb250ZXh0IHtcblx0Y29uc3QgY2hhcnRBbm5vdGF0aW9uUGF0aCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmFubm90YXRpb25QYXRoLnNwbGl0KFwiL1wiKTtcblx0Ly8gdGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGdldEFic29sdXRlUGF0aCBpbiBjb252ZXJ0ZXJDb250ZXh0IHJldHVybnMgXCIvU2FsZXNPcmRlck1hbmFnZS9fSXRlbS9fSXRlbS9AY29tLnNhcC52b2NhYnVsYXJpZXMudjEuQ2hhcnRcIiBhcyBhbm5vdGF0aW9uUGF0aFxuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNoYXJ0QW5ub3RhdGlvblBhdGhcblx0XHQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtOiBzdHJpbmcsIHBvczogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gY2hhcnRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKGl0ZW0pID09IHBvcztcblx0XHR9KVxuXHRcdC50b1N0cmluZygpXG5cdFx0LnJlcGxhY2VBbGwoXCIsXCIsIFwiL1wiKTtcblx0Y29uc3Qgb0NoYXJ0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPENoYXJ0VHlwZT4oXG5cdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFubm90YXRpb25QYXRoKSEsXG5cdFx0Y2hhcnRCbG9jay5fY29udGV4dFxuXHQpLnRhcmdldE9iamVjdDtcblx0bGV0IG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdID0gW107XG5cdGNvbnN0IGFubm9QYXRoID0gY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0LmdldFBhdGgoKTtcblx0Y29uc3QgY2hhcnRNZWFzdXJlcyA9IG9DaGFydD8uTWVhc3VyZXMgPyBvQ2hhcnQuTWVhc3VyZXMgOiBbXTtcblx0Y29uc3QgY2hhcnREeW5hbWljTWVhc3VyZXMgPSBvQ2hhcnQ/LkR5bmFtaWNNZWFzdXJlcyA/IG9DaGFydC5EeW5hbWljTWVhc3VyZXMgOiBbXTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGFubm9QYXRoLnJlcGxhY2UoL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS4oQ2hhcnR8UHJlc2VudGF0aW9uVmFyaWFudHxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KS4qLywgXCJcIik7XG5cdGNvbnN0IHRyYW5zQWdncmVnYXRpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udHJhbnNBZ2cgYXMgUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGU+O1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGlvbnMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jdXN0b21BZ2cgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG5cdC8vIGludGltYXRlIHRoZSB1c2VyIGlmIHRoZXJlIGlzIEFnZ3JlZ2F0ZVByb3BlcnR5IGNvbmZpZ3VyZWQgd2l0aCBubyBEeW5hbWljTWVhc3VyZXMsIGJ1dCB0aGVyZSBhcmUgbWVhc3VyZXMgd2l0aCBBZ2dyZWdhdGVkUHJvcGVydGllc1xuXHRpZiAoXG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiZcblx0XHQhY2hhcnREeW5hbWljTWVhc3VyZXMgJiZcblx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc1RyYW5zQWdnSW5NZWFzdXJlc1xuXHQpIHtcblx0XHRMb2cud2FybmluZyhcblx0XHRcdFwiVGhlIHRyYW5zZm9ybWF0aW9uYWwgYWdncmVnYXRlIG1lYXN1cmVzIGFyZSBjb25maWd1cmVkIGFzIENoYXJ0Lk1lYXN1cmVzIGJ1dCBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBDaGFydC5EeW5hbWljTWVhc3VyZXMgaW5zdGVhZC4gUGxlYXNlIGNoZWNrIHRoZSBTQVAgSGVscCBkb2N1bWVudGF0aW9uIGFuZCBjb3JyZWN0IHRoZSBjb25maWd1cmF0aW9uIGFjY29yZGluZ2x5LlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBpc0N1c3RvbUFnZ3JlZ2F0ZUlzTWVhc3VyZSA9IGNoYXJ0TWVhc3VyZXMuc29tZSgob0NoYXJ0TWVhc3VyZTogTWVhc3VyZVR5cGUpID0+IHtcblx0XHRjb25zdCBvQ3VzdG9tQWdnTWVhc3VyZSA9IGdldEN1c3RvbUFnZ01lYXN1cmUoY3VzdG9tQWdncmVnYXRpb25zLCBvQ2hhcnRNZWFzdXJlKTtcblx0XHRyZXR1cm4gISFvQ3VzdG9tQWdnTWVhc3VyZTtcblx0fSk7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJiAhY2hhcnREeW5hbWljTWVhc3VyZXM/Lmxlbmd0aCAmJiAhaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgY29uZmlndXJlIER5bmFtaWNNZWFzdXJlcyBmb3IgdGhlIGNoYXJ0XCIpO1xuXHR9XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJiBvQ2hhcnQpIHtcblx0XHRmb3IgKGNvbnN0IGR5bmFtaWNNZWFzdXJlIG9mIGNoYXJ0RHluYW1pY01lYXN1cmVzKSB7XG5cdFx0XHRtZWFzdXJlcyA9IGdldER5bmFtaWNNZWFzdXJlcyhtZWFzdXJlcywgZHluYW1pY01lYXN1cmUsIGVudGl0eVNldFBhdGgsIG9DaGFydCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgY2hhcnRNZWFzdXJlIG9mIGNoYXJ0TWVhc3VyZXMpIHtcblx0XHRjb25zdCBrZXkgPSBjaGFydE1lYXN1cmUudmFsdWU7XG5cdFx0Y29uc3QgY3VzdG9tQWdnTWVhc3VyZSA9IGdldEN1c3RvbUFnZ01lYXN1cmUoY3VzdG9tQWdncmVnYXRpb25zLCBjaGFydE1lYXN1cmUpO1xuXHRcdGNvbnN0IG1lYXN1cmVUeXBlOiBNZWFzdXJlVHlwZSA9IHt9O1xuXHRcdGlmIChjdXN0b21BZ2dNZWFzdXJlKSB7XG5cdFx0XHRtZWFzdXJlcyA9IHNldEN1c3RvbUFnZ01lYXN1cmUobWVhc3VyZXMsIG1lYXN1cmVUeXBlLCBjdXN0b21BZ2dNZWFzdXJlLCBrZXkpO1xuXHRcdFx0Ly9pZiB0aGVyZSBpcyBuZWl0aGVyIGFnZ3JlZ2F0ZWRQcm9wZXJ0eSBub3IgbWVhc3VyZXMgcG9pbnRpbmcgdG8gY3VzdG9tQWdncmVnYXRlcywgYnV0IHdlIGhhdmUgbm9ybWFsIG1lYXN1cmVzLiBOb3cgY2hlY2sgaWYgdGhlc2UgbWVhc3VyZXMgYXJlIHBhcnQgb2YgQWdncmVnYXRlZFByb3BlcnRpZXMgT2JqXG5cdFx0fSBlbHNlIGlmICghY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgdHJhbnNBZ2dyZWdhdGlvbnNba2V5XSkge1xuXHRcdFx0bWVhc3VyZXMgPSBzZXRUcmFuc0FnZ01lYXN1cmUobWVhc3VyZXMsIG1lYXN1cmVUeXBlLCB0cmFuc0FnZ3JlZ2F0aW9ucywga2V5KTtcblx0XHR9XG5cdFx0c2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlcyhjaGFydEJsb2NrLl9jaGFydC5NZWFzdXJlQXR0cmlidXRlcywgZW50aXR5U2V0UGF0aCwgbWVhc3VyZVR5cGUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGNvbnN0IG1lYXN1cmVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwobWVhc3VyZXMpO1xuXHQobWVhc3VyZXNNb2RlbCBhcyB7ICQkdmFsdWVBc1Byb21pc2U/OiBib29sZWFuIH0pLiQkdmFsdWVBc1Byb21pc2UgPSB0cnVlO1xuXHRyZXR1cm4gbWVhc3VyZXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG59XG5cbmZ1bmN0aW9uIHNldEN1c3RvbUFnZ01lYXN1cmUobWVhc3VyZXM6IE1lYXN1cmVUeXBlW10sIG1lYXN1cmU6IE1lYXN1cmVUeXBlLCBjdXN0b21BZ2dNZWFzdXJlOiBNZWFzdXJlVHlwZSwga2V5OiBzdHJpbmcpOiBNZWFzdXJlVHlwZVtdIHtcblx0aWYgKGtleS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRMb2cuZXJyb3IoYCRleHBhbmQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIE1lYXN1cmU6ICR7a2V5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdH1cblx0bWVhc3VyZS5rZXkgPSBjdXN0b21BZ2dNZWFzdXJlLnZhbHVlO1xuXHRtZWFzdXJlLnJvbGUgPSBcImF4aXMxXCI7XG5cdG1lYXN1cmUubGFiZWwgPSBjdXN0b21BZ2dNZWFzdXJlLmxhYmVsO1xuXHRtZWFzdXJlLnByb3BlcnR5UGF0aCA9IGN1c3RvbUFnZ01lYXN1cmUudmFsdWU7XG5cdG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG5cdHJldHVybiBtZWFzdXJlcztcbn1cblxuZnVuY3Rpb24gc2V0VHJhbnNBZ2dNZWFzdXJlKFxuXHRtZWFzdXJlczogTWVhc3VyZVR5cGVbXSxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdHRyYW5zQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZT4sXG5cdGtleTogc3RyaW5nXG4pOiBNZWFzdXJlVHlwZVtdIHtcblx0Y29uc3QgdHJhbnNBZ2dNZWFzdXJlID0gdHJhbnNBZ2dyZWdhdGlvbnNba2V5XTtcblx0bWVhc3VyZS5rZXkgPSB0cmFuc0FnZ01lYXN1cmUubmFtZTtcblx0bWVhc3VyZS5yb2xlID0gXCJheGlzMVwiO1xuXHRtZWFzdXJlLnByb3BlcnR5UGF0aCA9IGtleTtcblx0bWVhc3VyZS5hZ2dyZWdhdGlvbk1ldGhvZCA9IHRyYW5zQWdnTWVhc3VyZS5hZ2dyZWdhdGlvbk1ldGhvZDtcblx0bWVhc3VyZS5sYWJlbCA9IHRyYW5zQWdnTWVhc3VyZS5sYWJlbCB8fCBtZWFzdXJlLmxhYmVsO1xuXHRtZWFzdXJlcy5wdXNoKG1lYXN1cmUpO1xuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIGdldER5bmFtaWNNZWFzdXJlcyhcblx0bWVhc3VyZXM6IE1lYXN1cmVUeXBlW10sXG5cdGNoYXJ0RHluYW1pY01lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdGNoYXJ0OiBDaGFydFR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lYXN1cmVUeXBlW10ge1xuXHRjb25zdCBrZXkgPSBjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IGFnZ3JlZ2F0ZWRQcm9wZXJ0eSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBZ2dyZWdhdGVkUHJvcGVydHk+KFxuXHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChlbnRpdHlTZXRQYXRoICsga2V5KSBhcyBDb250ZXh0LFxuXHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0KS50YXJnZXRPYmplY3Q7XG5cdGlmIChrZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBNZWFzdXJlOiAke2tleX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHRcdC8vIGNoZWNrIGlmIHRoZSBhbm5vdGF0aW9uIHBhdGggaXMgd3Jvbmdcblx0fSBlbHNlIGlmICghYWdncmVnYXRlZFByb3BlcnR5KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSB0aGUgcmlnaHQgQW5ub3RhdGlvblBhdGggdG8gdGhlIER5bmFtaWMgTWVhc3VyZSAke2NoYXJ0RHluYW1pY01lYXN1cmUudmFsdWV9YCk7XG5cdFx0Ly8gY2hlY2sgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggQFxuXHR9IGVsc2UgaWYgKGNoYXJ0RHluYW1pY01lYXN1cmUudmFsdWU/LnN0YXJ0c1dpdGgoYEAke0FuYWx5dGljc0Fubm90YXRpb25UZXJtcy5BZ2dyZWdhdGVkUHJvcGVydHl9YCkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIHRoZSByaWdodCBBbm5vdGF0aW9uUGF0aCB0byB0aGUgRHluYW1pYyBNZWFzdXJlICR7Y2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZX1gKTtcblx0fSBlbHNlIHtcblx0XHQvLyBjaGVjayBpZiBBZ2dyZWdhdGVkUHJvcGVydHkgaXMgZGVmaW5lZCBpbiBnaXZlbiBEeW5hbWljTWVhc3VyZVxuXHRcdGNvbnN0IGR5bmFtaWNNZWFzdXJlOiBNZWFzdXJlVHlwZSA9IHtcblx0XHRcdGtleTogYWdncmVnYXRlZFByb3BlcnR5Lk5hbWUudG9TdHJpbmcoKSxcblx0XHRcdHJvbGU6IFwiYXhpczFcIlxuXHRcdH07XG5cdFx0ZHluYW1pY01lYXN1cmUucHJvcGVydHlQYXRoID0gYWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdGR5bmFtaWNNZWFzdXJlLmFnZ3JlZ2F0aW9uTWV0aG9kID0gYWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0aW9uTWV0aG9kLnRvU3RyaW5nKCk7XG5cdFx0ZHluYW1pY01lYXN1cmUubGFiZWwgPSByZXNvbHZlQmluZGluZ1N0cmluZyhcblx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/P1xuXHRcdFx0XHRhZ2dyZWdhdGVkUHJvcGVydHkuQWdncmVnYXRhYmxlUHJvcGVydHkuJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdFx0XCJcIlxuXHRcdCk7XG5cdFx0c2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlcyhjaGFydC5NZWFzdXJlQXR0cmlidXRlcywgZW50aXR5U2V0UGF0aCwgZHluYW1pY01lYXN1cmUsIGNoYXJ0QmxvY2spO1xuXHRcdG1lYXN1cmVzLnB1c2goZHluYW1pY01lYXN1cmUpO1xuXHR9XG5cdHJldHVybiBtZWFzdXJlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q3VzdG9tQWdnTWVhc3VyZShjdXN0b21BZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlIHwgdW5kZWZpbmVkPiwgbWVhc3VyZTogTWVhc3VyZVR5cGUpOiBNZWFzdXJlVHlwZSB8IG51bGwge1xuXHRpZiAobWVhc3VyZS52YWx1ZSAmJiBjdXN0b21BZ2dyZWdhdGlvbnNbbWVhc3VyZS52YWx1ZV0pIHtcblx0XHRtZWFzdXJlLmxhYmVsID0gY3VzdG9tQWdncmVnYXRpb25zW21lYXN1cmUudmFsdWVdPy5sYWJlbDtcblx0XHRyZXR1cm4gbWVhc3VyZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlcyhcblx0bWVhc3VyZUF0dHJpYnV0ZXM6IENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVbXSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGlmIChtZWFzdXJlQXR0cmlidXRlcz8ubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBtZWFzdXJlQXR0cmlidXRlIG9mIG1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRfc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlKG1lYXN1cmVBdHRyaWJ1dGUsIGVudGl0eVNldFBhdGgsIG1lYXN1cmUsIGNoYXJ0QmxvY2spO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBfc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlKFxuXHRtZWFzdXJlQXR0cmlidXRlOiBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0Y29uc3QgcGF0aCA9IG1lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgPyBtZWFzdXJlQXR0cmlidXRlPy5EeW5hbWljTWVhc3VyZT8udmFsdWUgOiBtZWFzdXJlQXR0cmlidXRlPy5NZWFzdXJlPy52YWx1ZTtcblx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZURhdGFQb2ludCA9IG1lYXN1cmVBdHRyaWJ1dGUuRGF0YVBvaW50ID8gbWVhc3VyZUF0dHJpYnV0ZT8uRGF0YVBvaW50Py52YWx1ZSA6IG51bGw7XG5cdGNvbnN0IHJvbGUgPSBtZWFzdXJlQXR0cmlidXRlLlJvbGU7XG5cdGNvbnN0IGRhdGFQb2ludDogRGF0YVBvaW50IHwgdW5kZWZpbmVkID0gbWVhc3VyZUF0dHJpYnV0ZURhdGFQb2ludFxuXHRcdD8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFQb2ludD4oXG5cdFx0XHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChlbnRpdHlTZXRQYXRoICsgbWVhc3VyZUF0dHJpYnV0ZURhdGFQb2ludCkgYXMgQ29udGV4dCxcblx0XHRcdFx0Y2hhcnRCbG9jay5fY29udGV4dFxuXHRcdCAgKS50YXJnZXRPYmplY3Rcblx0XHQ6IHVuZGVmaW5lZDtcblx0aWYgKG1lYXN1cmUua2V5ID09PSBwYXRoKSB7XG5cdFx0c2V0TWVhc3VyZVJvbGUobWVhc3VyZSwgcm9sZSBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08Q2hhcnRNZWFzdXJlUm9sZVR5cGU+KTtcblx0XHQvL3N0aWxsIHRvIGFkZCBkYXRhIHBvaW50LCBidXQgVUk1IENoYXJ0IEFQSSBpcyBtaXNzaW5nXG5cdFx0c2V0TWVhc3VyZURhdGFQb2ludChtZWFzdXJlLCBkYXRhUG9pbnQpO1xuXHR9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBkYXRhIHBvaW50IGFzIGEgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFQb2ludEFubm9cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQganNvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGF0YVBvaW50UHJvcGVydHkob0RhdGFQb2ludEFubm86IERhdGFQb2ludCk6IHtcblx0dGFyZ2V0VmFsdWU/OiBzdHJpbmc7XG5cdGZvcmVDYXN0VmFsdWU/OiBzdHJpbmc7XG5cdGNyaXRpY2FsaXR5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59IHtcblx0Y29uc3Qgb0RhdGFQb2ludDogeyB0YXJnZXRWYWx1ZT86IHN0cmluZzsgZm9yZUNhc3RWYWx1ZT86IHN0cmluZzsgY3JpdGljYWxpdHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9ID0ge307XG5cblx0aWYgKG9EYXRhUG9pbnRBbm5vLlRhcmdldFZhbHVlKSB7XG5cdFx0b0RhdGFQb2ludC50YXJnZXRWYWx1ZSA9IG9EYXRhUG9pbnRBbm5vLlRhcmdldFZhbHVlLiRQYXRoO1xuXHR9XG5cblx0aWYgKG9EYXRhUG9pbnRBbm5vLkZvcmVjYXN0VmFsdWUpIHtcblx0XHRvRGF0YVBvaW50LmZvcmVDYXN0VmFsdWUgPSBvRGF0YVBvaW50QW5uby5Gb3JlY2FzdFZhbHVlLiRQYXRoO1xuXHR9XG5cblx0bGV0IG9Dcml0aWNhbGl0eSA9IG51bGw7XG5cdGlmIChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eSkgJiYgb0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkucGF0aCkge1xuXHRcdFx0Ly93aWxsIGJlIGFuIGFnZ3JlZ2F0ZWQgcHJvcGVydHkgb3IgY3VzdG9tIGFnZ3JlZ2F0ZVxuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRDYWxjdWxhdGVkOiBvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eS5wYXRoXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdFN0YXRpYzogKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5IGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxDcml0aWNhbGl0eVR5cGU+KS4kRW51bU1lbWJlci5yZXBsYWNlKFxuXHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL1wiLFxuXHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGNvbnN0IG9UaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSA9IHt9O1xuXHRcdGNvbnN0IGJDb25zdGFudCA9IGJ1aWxkVGhyZXNob2xkcyhvVGhyZXNob2xkcywgb0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cblx0XHRpZiAoYkNvbnN0YW50KSB7XG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdENvbnN0YW50VGhyZXNob2xkczogb1RocmVzaG9sZHNcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0RHluYW1pY1RocmVzaG9sZHM6IG9UaHJlc2hvbGRzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGlmIChvQ3JpdGljYWxpdHkpIHtcblx0XHRvRGF0YVBvaW50LmNyaXRpY2FsaXR5ID0gb0NyaXRpY2FsaXR5O1xuXHR9XG5cblx0cmV0dXJuIG9EYXRhUG9pbnQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRocmVzaG9sZHMgYXJlIGR5bmFtaWMgb3IgY29uc3RhbnQuXG4gKiBAcGFyYW0gdGhyZXNob2xkcyBUaGUgdGhyZXNob2xkIHNrZWxldG9uXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbiBUaGUgVUkuRGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24gYW5ub3RhdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0aHJlc2hvbGQgc2hvdWxkIGJlIHN1cHBsaWVkIGFzIENvbnN0YW50VGhyZXNob2xkcywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIHRoZSB0aHJlc2hvbGQgc2hvdWxkXG4gKiBiZSBzdXBwbGllZCBhcyBEeW5hbWljVGhyZXNob2xkc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRUaHJlc2hvbGRzKFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBrZXlzID0gW1xuXHRcdFwiQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVcIixcblx0XHRcIkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVwiLFxuXHRcdFwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcIkRldmlhdGlvblJhbmdlTG93VmFsdWVcIixcblx0XHRcIkRldmlhdGlvblJhbmdlSGlnaFZhbHVlXCJcblx0XTtcblx0dGhyZXNob2xkcy5JbXByb3ZlbWVudERpcmVjdGlvbiA9IChcblx0XHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkltcHJvdmVtZW50RGlyZWN0aW9uIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxJbXByb3ZlbWVudERpcmVjdGlvblR5cGU+XG5cdCk/LiRFbnVtTWVtYmVyLnJlcGxhY2UoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvXCIsIFwiXCIpO1xuXG5cdGNvbnN0IGR5bmFtaWNUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgdXNlZE1lYXN1cmVzOiB1bmtub3duW10gfSA9IHtcblx0XHRvbmVTdXBwbGllZDogZmFsc2UsXG5cdFx0dXNlZE1lYXN1cmVzOiBbXVxuXHRcdC8vIGNvbWJpbmF0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYXQgbGVhc3Qgb25lIGlzIHN1cHBsaWVkXG5cdH07XG5cdGNvbnN0IGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG5cdFx0b25lU3VwcGxpZWQ6IGZhbHNlXG5cdFx0Ly8gY29tYmluYXRpb24gdG8gY2hlY2sgd2hldGhlciBhdCBsZWFzdCBvbmUgaXMgc3VwcGxpZWRcblx0fTtcblxuXHRpbml0aWFsaXNlVGhyZXNob2xkcyhrZXlzLCBkeW5hbWljVGhyZXNob2xkcywgY29uc3RhbnRUaHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblx0cHJvY2Vzc1RocmVzaG9sZHMoa2V5cywgdGhyZXNob2xkcywgZHluYW1pY1RocmVzaG9sZHMsIGNvbnN0YW50VGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cblx0cmV0dXJuICFkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZVRocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHRkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0sXG5cdGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGR5bmFtaWNUaHJlc2hvbGRzW2tleV0gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV1cblx0XHRcdD8gY3JpdGljYWxpdHlDYWxjdWxhdGlvbltrZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdLiRQYXRoXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCA9IGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkIHx8IGR5bmFtaWNUaHJlc2hvbGRzW2tleV07XG5cblx0XHRpZiAoIWR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0XHQvLyBvbmx5IGNvbnNpZGVyIGluIGNhc2Ugbm8gZHluYW1pYyB0aHJlc2hvbGQgaXMgc3VwcGxpZWRcblx0XHRcdGNvbnN0YW50VGhyZXNob2xkc1trZXldID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbltrZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdO1xuXHRcdFx0Y29uc3RhbnRUaHJlc2hvbGRzLm9uZVN1cHBsaWVkID0gY29uc3RhbnRUaHJlc2hvbGRzLm9uZVN1cHBsaWVkIHx8IGNvbnN0YW50VGhyZXNob2xkc1trZXldO1xuXHRcdH0gZWxzZSBpZiAoZHluYW1pY1RocmVzaG9sZHNba2V5XSkge1xuXHRcdFx0ZHluYW1pY1RocmVzaG9sZHMudXNlZE1lYXN1cmVzLnB1c2goZHluYW1pY1RocmVzaG9sZHNba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGR5bmFtaWNUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgdXNlZE1lYXN1cmVzOiB1bmtub3duW10gfSxcblx0Y29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IHZvaWQge1xuXHQvLyBkeW5hbWljIGRlZmluaXRpb24gc2hhbGwgb3ZlcnJ1bGUgY29uc3RhbnQgZGVmaW5pdGlvblxuXHRpZiAoZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRpZiAoZHluYW1pY1RocmVzaG9sZHNba2V5XSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzW2tleV0gPSBkeW5hbWljVGhyZXNob2xkc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aHJlc2hvbGRzLnVzZWRNZWFzdXJlcyA9IGR5bmFtaWNUaHJlc2hvbGRzLnVzZWRNZWFzdXJlcztcblx0fSBlbHNlIHtcblx0XHR0aHJlc2hvbGRzLkFnZ3JlZ2F0aW9uTGV2ZWxzID0gW107XG5cdFx0cHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxGb3JUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGNvbnN0YW50VGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxGb3JUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiB2b2lkIHtcblx0bGV0IG9BZ2dyZWdhdGlvbkxldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHQvLyBjaGVjayBpZiBhdCBsZWFzdCBvbmUgc3RhdGljIHZhbHVlIGlzIHN1cHBsaWVkXG5cdGlmIChjb25zdGFudFRocmVzaG9sZHMub25lU3VwcGxpZWQpIHtcblx0XHQvLyBhZGQgb25lIGVudHJ5IGluIHRoZSBhZ2dyZWdhdGlvbiBsZXZlbFxuXHRcdG9BZ2dyZWdhdGlvbkxldmVsID0ge1xuXHRcdFx0VmlzaWJsZURpbWVuc2lvbnM6IG51bGxcblx0XHR9O1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IG9mIGtleXMpIHtcblx0XHRcdGlmIChjb25zdGFudFRocmVzaG9sZHNbc0tleV0pIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uTGV2ZWxbc0tleV0gPSBjb25zdGFudFRocmVzaG9sZHNbc0tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhyZXNob2xkcy5BZ2dyZWdhdGlvbkxldmVscz8ucHVzaChvQWdncmVnYXRpb25MZXZlbCk7XG5cdH1cblxuXHRwcm9jZXNzQWdncmVnYXRpb25MZXZlbHNGb3JDb25zdGFudFRocmVzaG9sZHMoa2V5cywgdGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbiwgb0FnZ3JlZ2F0aW9uTGV2ZWwpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25MZXZlbHNGb3JDb25zdGFudFRocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdGFnZ3JlZ2F0aW9uTGV2ZWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiB2b2lkIHtcblx0aWYgKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQ29uc3RhbnRUaHJlc2hvbGRzICYmIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQ29uc3RhbnRUaHJlc2hvbGRzLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvIG9mIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQ29uc3RhbnRUaHJlc2hvbGRzKSB7XG5cdFx0XHRjb25zdCB2aXNpYmxlRGltZW5zaW9uczogc3RyaW5nW10gfCBudWxsID0gYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbCA/IFtdIDogbnVsbDtcblxuXHRcdFx0aWYgKHZpc2libGVEaW1lbnNpb25zICYmIGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwgJiYgYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlQYXRoIG9mIGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHR2aXNpYmxlRGltZW5zaW9ucy5wdXNoKChwcm9wZXJ0eVBhdGggYXMgdW5rbm93biBhcyBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+KS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhZ2dyZWdhdGlvbkxldmVsID0ge1xuXHRcdFx0XHRWaXNpYmxlRGltZW5zaW9uczogdmlzaWJsZURpbWVuc2lvbnNcblx0XHRcdH07XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhZ2dyZWdhdGlvbkxldmVsSW5mb1trZXkgYXMgdW5rbm93biBhcyBrZXlvZiBMZXZlbFRocmVzaG9sZHNUeXBlXTtcblx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25MZXZlbFtrZXldID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhyZXNob2xkcy5BZ2dyZWdhdGlvbkxldmVscz8ucHVzaChhZ2dyZWdhdGlvbkxldmVsKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0TWVhc3VyZURhdGFQb2ludChtZWFzdXJlOiBNZWFzdXJlVHlwZSwgZGF0YVBvaW50OiBEYXRhUG9pbnQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKGRhdGFQb2ludCAmJiBkYXRhUG9pbnQuVmFsdWUuJFBhdGggPT0gbWVhc3VyZS5rZXkpIHtcblx0XHRtZWFzdXJlLmRhdGFQb2ludCA9IENoYXJ0SGVscGVyLmZvcm1hdEpTT05Ub1N0cmluZyhjcmVhdGVEYXRhUG9pbnRQcm9wZXJ0eShkYXRhUG9pbnQpKSB8fCBcIlwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNldE1lYXN1cmVSb2xlKG1lYXN1cmU6IE1lYXN1cmVUeXBlLCByb2xlOiBNZXRhTW9kZWxFbnVtPENoYXJ0TWVhc3VyZVJvbGVUeXBlPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRpZiAocm9sZSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgaW5kZXggPSByb2xlLiRFbnVtTWVtYmVyO1xuXHRcdG1lYXN1cmUucm9sZSA9IG1lYXN1cmVSb2xlW2luZGV4XTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREZXBlbmRlbnRzKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssIGNoYXJ0Q29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0aWYgKGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMubWFwKChjb21tYW5kQWN0aW9uOiBDb21tYW5kQWN0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0QWN0aW9uQ29tbWFuZChjb21tYW5kQWN0aW9uLCBjaGFydENvbnRleHQsIGNoYXJ0QmxvY2spO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gcGVyc29uYWxpemF0aW9uIFNwZWNpZmllcyB0aGUgY2hhcnQgcGVyc29uYWxpemF0aW9uXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tQZXJzb25hbGl6YXRpb25JbkNoYXJ0UHJvcGVydGllcyhwZXJzb25hbGl6YXRpb246IENoYXJ0UDEzblR5cGUsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiB2b2lkIHtcblx0aWYgKHBlcnNvbmFsaXphdGlvbikge1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IFwiZmFsc2VcIiB8fCAocGVyc29uYWxpemF0aW9uIGFzIGJvb2xlYW4pID09PSBmYWxzZSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGVyc29uYWxpemF0aW9uID09PSBcInRydWVcIiB8fCAocGVyc29uYWxpemF0aW9uIGFzIGJvb2xlYW4pID09PSB0cnVlKSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSBPYmplY3QudmFsdWVzKHBlcnNvbmFsaXphdGlvblZhbHVlcykuam9pbihcIixcIik7XG5cdFx0fSBlbHNlIGlmICh2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbihwZXJzb25hbGl6YXRpb24gYXMgc3RyaW5nKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gcGVyc29uYWxpemF0aW9uO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwZXJzb25hbGl6YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBvciBgZmFsc2VgIGlmIHRoZSBwZXJzb25hbGl6YXRpb24gaXMgdmFsaWQgb3Igbm90IHZhbGlkXG4gKi9cbmZ1bmN0aW9uIHZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uKHBlcnNvbmFsaXphdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCB2YWxpZCA9IHRydWU7XG5cdGNvbnN0IHNwbGl0QXJyYXkgPSBwZXJzb25hbGl6YXRpb24uc3BsaXQoXCIsXCIpO1xuXHRjb25zdCBhY2NlcHRlZFZhbHVlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKHBlcnNvbmFsaXphdGlvblZhbHVlcyk7XG5cdHNwbGl0QXJyYXkuZm9yRWFjaCgoYXJyYXlFbGVtZW50KSA9PiB7XG5cdFx0aWYgKCFhY2NlcHRlZFZhbHVlcy5pbmNsdWRlcyhhcnJheUVsZW1lbnQpKSB7XG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB2YWxpZDtcbn1cblxuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gY2hhcnRCbG9jay52YXJpYW50TWFuYWdlbWVudCA/IGNoYXJ0QmxvY2sudmFyaWFudE1hbmFnZW1lbnQgOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52YXJpYW50TWFuYWdlbWVudDtcblx0cmV0dXJuIGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uID09PSB1bmRlZmluZWQgPyBcIk5vbmVcIiA6IHZhcmlhbnRNYW5hZ2VtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHtcblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb247XG5cdGlmIChwZXJzb25hbGl6YXRpb24pIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2spO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxWYXJpYW50TWFuYWdlbWVudFxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJWTVwiXSl9XG5cdFx0XHRcdFx0Zm9yPXtbY2hhcnRCbG9jay5fYmxvY2tJZCFdfVxuXHRcdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdFx0aGVhZGVyTGV2ZWw9e2NoYXJ0QmxvY2suaGVhZGVyTGV2ZWx9XG5cdFx0XHRcdFx0c2VsZWN0PXsoZXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmZpcmVWYXJpYW50U2VsZWN0ZWQ/LihldmVudCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRzYXZlPXsoZXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNhdmVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlVmFyaWFudFNhdmVkPy4oZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiTm9uZVwiIHx8IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIlBhZ2VcIikge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFwZXJzb25hbGl6YXRpb24pIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0UGVyc2lzdGVuY2VQcm92aWRlcihjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogUGVyc2lzdGVuY2VQcm92aWRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKSA9PT0gXCJOb25lXCIpIHtcblx0XHRyZXR1cm4gPFBlcnNpc3RlbmNlUHJvdmlkZXIgaWQ9e2dlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlBlcnNpc3RlbmNlUHJvdmlkZXJcIl0pfSBmb3I9e2NoYXJ0QmxvY2suX2Jsb2NrSWR9IC8+O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHB1c2hBY3Rpb25Db21tYW5kKFxuXHRhY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IChNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4gJiB7IEludm9jYXRpb25Hcm91cGluZzogTWV0YU1vZGVsRW51bTxPcGVyYXRpb25Hcm91cGluZ1R5cGU+IH0pIHwgdW5kZWZpbmVkLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRpZiAoZGF0YUZpZWxkKSB7XG5cdFx0Y29uc3QgY29tbWFuZEFjdGlvbiA9IHtcblx0XHRcdGFjdGlvbkNvbnRleHQ6IGFjdGlvbkNvbnRleHQsXG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IENoYXJ0SGVscGVyLmdldFByZXNzRXZlbnRGb3JEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQhLFxuXHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIHx8IFwiXCJcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVJQk46IENvbW1vbkhlbHBlci5nZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4oXG5cdFx0XHRcdGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0YFxcJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfWAsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlTWFuaWZlc3Q6IENvbW1vbkhlbHBlci5idWlsZEFjdGlvbldyYXBwZXIoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgY2hhcnRCbG9jayksXG5cdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHRcdH07XG5cdFx0Y2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMucHVzaChjb21tYW5kQWN0aW9uKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Db21tYW5kKGNvbW1hbmRBY3Rpb246IENvbW1hbmRBY3Rpb24sIGNoYXJ0Q29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB7XG5cdGNvbnN0IGFjdGlvbiA9IGNvbW1hbmRBY3Rpb24uYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aCAmJiBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dCAmJiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmRQYXRoID0gQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChpc0JvdW5kUGF0aCkhLmdldE9iamVjdCgpO1xuXHRjb25zdCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKFxuXHRcdENoYXJ0SGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChjaGFydENvbnRleHQuZ2V0T2JqZWN0KCksIHtcblx0XHRcdGNvbnRleHQ6IGNoYXJ0Q29udGV4dFxuXHRcdH0pXG5cdCk7XG5cdGNvbnN0IGlzQWN0aW9uRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkXG5cdFx0PyBhY3Rpb24uZW5hYmxlZFxuXHRcdDogQ2hhcnRIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRpc0JvdW5kICYmIGlzQm91bmQuJElzQm91bmQsXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2NvbnRleHQsXG5cdFx0XHRcdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIHx8IFwiXCIsXG5cdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCB8fCBcIlwiXG5cdFx0ICApO1xuXHRsZXQgaXNJQk5FbmFibGVkO1xuXHRpZiAoYWN0aW9uLmVuYWJsZWQpIHtcblx0XHRpc0lCTkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0KSB7XG5cdFx0aXNJQk5FbmFibGVkID0gXCJ7PSAle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMX1cIjtcblx0fVxuXG5cdGxldCBjb21tYW5kRW5hYmxlZDogYm9vbGVhbjtcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGNvbW1hbmRFbmFibGVkID0gaXNBY3Rpb25FbmFibGVkID8/IGFjdGlvbi5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGNvbW1hbmRFbmFibGVkID0gaXNJQk5FbmFibGVkID8/IGFjdGlvbi5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbW1hbmRFbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSAoXG5cdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdGV4ZWN1dGU9eyhldmVudDogQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQpOiB2b2lkID0+XG5cdFx0XHRcdGNvbW1hbmRFeGVjdXRlKGV2ZW50LCBhY3Rpb24sIGNoYXJ0QmxvY2suX2Jsb2NrSWQhLCBjb21tYW5kQWN0aW9uLmNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwISwgZGF0YUZpZWxkKVxuXHRcdFx0fVxuXHRcdFx0ZW5hYmxlZD17Y29tbWFuZEVuYWJsZWR9XG5cdFx0XHR2aXNpYmxlPXsoZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKSBhcyBib29sZWFuKSA/PyBhY3Rpb24udmlzaWJsZX1cblx0XHRcdGNvbW1hbmQ9e2FjdGlvbi5jb21tYW5kfVxuXHRcdC8+XG5cdCk7XG5cblx0aWYgKFxuXHRcdGFjdGlvbi50eXBlID09IFwiRm9yQWN0aW9uXCIgJiZcblx0XHQoIWlzQm91bmQgfHxcblx0XHRcdGlzQm91bmQuSXNCb3VuZCAhPT0gdHJ1ZSB8fFxuXHRcdFx0KGFjdGlvbkNvbnRleHQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYEAke0NvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlfWBdICE9PSBmYWxzZSlcblx0KSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbW1hbmQ7XG5cdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhY3Rpb25Db21tYW5kO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbW1hbmRFeGVjdXRlKFxuXHRldmVudDogQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQsXG5cdGFjdGlvbjogeyBJbnZvY2F0aW9uR3JvdXBpbmc6IHsgJEVudW1NZW1iZXI6IHN0cmluZyB9OyBhY3Rpb246IHN0cmluZzsgdHlwZTogc3RyaW5nOyBoYW5kbGVyTW9kdWxlOiBzdHJpbmc7IGhhbmRsZXJNZXRob2Q6IHN0cmluZyB9LFxuXHRpZDogc3RyaW5nLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuKTogdm9pZCB7XG5cdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKTtcblx0Y29uc3QgY29udHJvbGxlciA9IHZpZXc/LmdldENvbnRyb2xsZXIoKTtcblxuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0Y29uc3Qgc0ludm9jYXRpb25Hcm91cGluZyA9XG5cdFx0XHRcdGFjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcgJiZcblx0XHRcdFx0YWN0aW9uLkludm9jYXRpb25Hcm91cGluZy4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIjtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHNJbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdGNvbnRyb2xJZDogaWQsXG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdG1vZGVsOiB2aWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nXG5cdFx0XHR9O1xuXHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24oZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmcsIHBhcmFtcyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHR9O1xuXHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nKSB7XG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IEpTT04uc3RyaW5naWZ5KChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nKTtcblx0XHRcdH1cblx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihldmVudCwgYWN0aW9uLmhhbmRsZXJNb2R1bGUsIGFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7XG5cdFx0XHRcdGNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRJdGVtcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuXHRpZiAoY2hhcnRCbG9jay5fY2hhcnQpIHtcblx0XHRjb25zdCBkaW1lbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG1lYXN1cmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChjaGFydEJsb2NrLl9jaGFydC5EaW1lbnNpb25zKSB7XG5cdFx0XHRDaGFydEhlbHBlci5mb3JtYXREaW1lbnNpb25zKGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dClcblx0XHRcdFx0LmdldE9iamVjdCgpXG5cdFx0XHRcdC5mb3JFYWNoKChkaW1lbnNpb246IERpbWVuc2lvblR5cGUpID0+IHtcblx0XHRcdFx0XHRkaW1lbnNpb24uaWQgPSBnZW5lcmF0ZShbY2hhcnRCbG9jay5pZCwgXCJkaW1lbnNpb25cIiwgZGltZW5zaW9uLmtleV0pO1xuXHRcdFx0XHRcdGRpbWVuc2lvbnMucHVzaChcblx0XHRcdFx0XHRcdGdldEl0ZW0oXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpZDogZGltZW5zaW9uLmlkLFxuXHRcdFx0XHRcdFx0XHRcdGtleTogZGltZW5zaW9uLmtleSxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogZGltZW5zaW9uLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHRcdHJvbGU6IGRpbWVuc2lvbi5yb2xlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFwiX2ZlX2dyb3VwYWJsZV9cIixcblx0XHRcdFx0XHRcdFx0XCJncm91cGFibGVcIlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoY2hhcnRCbG9jay5tZWFzdXJlcykge1xuXHRcdFx0Q2hhcnRIZWxwZXIuZm9ybWF0TWVhc3VyZXMoY2hhcnRCbG9jay5tZWFzdXJlcykuZm9yRWFjaCgobWVhc3VyZTogTWVhc3VyZVR5cGUpID0+IHtcblx0XHRcdFx0bWVhc3VyZS5pZCA9IGdlbmVyYXRlKFtjaGFydEJsb2NrLmlkLCBcIm1lYXN1cmVcIiwgbWVhc3VyZS5rZXldKTtcblx0XHRcdFx0bWVhc3VyZXMucHVzaChcblx0XHRcdFx0XHRnZXRJdGVtKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZDogbWVhc3VyZS5pZCxcblx0XHRcdFx0XHRcdFx0a2V5OiBtZWFzdXJlLmtleSxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IG1lYXN1cmUubGFiZWwsXG5cdFx0XHRcdFx0XHRcdHJvbGU6IG1lYXN1cmUucm9sZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIixcblx0XHRcdFx0XHRcdFwiYWdncmVnYXRhYmxlXCJcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGRpbWVuc2lvbnMubGVuZ3RoICYmIG1lYXN1cmVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGRpbWVuc2lvbnMuY29uY2F0KG1lYXN1cmVzKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW0oaXRlbTogTWVhc3VyZVR5cGUgfCBEaW1lbnNpb25UeXBlLCBwcmVmaXg6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHQ8TWRjQ2hhcnRJdGVtXG5cdFx0XHRpZD17aXRlbS5pZH1cblx0XHRcdHByb3BlcnR5S2V5PXtwcmVmaXggKyBpdGVtLmtleX1cblx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRsYWJlbD17cmVzb2x2ZUJpbmRpbmdTdHJpbmcoaXRlbS5sYWJlbCBhcyBzdHJpbmcsIFwic3RyaW5nXCIpfVxuXHRcdFx0cm9sZT17aXRlbS5yb2xlfVxuXHRcdC8+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldFRvb2xiYXJBY3Rpb25zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uW10ge1xuXHRjb25zdCBhY3Rpb25zID0gZ2V0QWN0aW9ucyhjaGFydEJsb2NrKTtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5vblNlZ21lbnRlZEJ1dHRvblByZXNzZWQpIHtcblx0XHRhY3Rpb25zLnB1c2goZ2V0U2VnbWVudGVkQnV0dG9uKGNoYXJ0QmxvY2spKTtcblx0fVxuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c0VuYWJsZWQpIHtcblx0XHRhY3Rpb25zLnB1c2goXG5cdFx0XHRnZXRTdGFuZGFyZEFjdGlvbnMoXG5cdFx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNFbmFibGVkLFxuXHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzVmlzaWJsZSxcblx0XHRcdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCEsXG5cdFx0XHRcdGNoYXJ0QmxvY2tcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdGlmIChhY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9ucyhcblx0aXNJbnNpZ2h0c0VuYWJsZWQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCxcblx0aXNJbnNpZ2h0c1Zpc2libGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCxcblx0aWQ6IHN0cmluZyxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiB2aXNpYmxlPXtpc0luc2lnaHRzVmlzaWJsZX0+XG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbaWQsIFwiU3RhbmRhcmRBY3Rpb246Okluc2lnaHRzXCJdKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9JTlNJR0hUU19DQVJEfVwiXG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y2hhcnRCbG9jay5vbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtpc0luc2lnaHRzRW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT1cIkFsd2F5c092ZXJmbG93XCIgLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9ucyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbltdIHtcblx0Y29uc3QgYWN0aW9ucyA9IHJlbW92ZU1lbnVJdGVtcyhjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA/PyBbXSk7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb24gYmVmb3JlIHByb2Nlc3Npbmdcblx0Y29uc3QgYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb24gPSBBY3Rpb25IZWxwZXIuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKGFjdGlvbnMpO1xuXG5cdHJldHVybiBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbi5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24uYW5ub3RhdGlvblBhdGggfHwgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIiAmJiAhYWN0aW9uLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uXCIpKSkge1xuXHRcdFx0Ly8gTG9hZCBhbm5vdGF0aW9uIGJhc2VkIGFjdGlvbnNcblx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCBjaGFydEJsb2NrLl9jaGFydENvbnRleHQsIGZhbHNlLCBjaGFydEJsb2NrKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgYWN0aW9ucyAvIGFjdGlvbiBncm91cHNcblx0XHRcdHJldHVybiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbiBhcyBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudUl0ZW1zKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSB7XG5cdC8vIElmIGFjdGlvbiBpcyBhbHJlYWR5IHBhcnQgb2YgbWVudSBpbiBhY3Rpb24gZ3JvdXAsIHRoZW4gaXQgd2lsbFxuXHQvLyBiZSByZW1vdmVkIGZyb20gdGhlIG1haW4gYWN0aW9ucyBsaXN0XG5cdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRpZiAoYWN0aW9uLm1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gYWN0aW9ucy5tYXAoKGFjdCkgPT4gYWN0LmtleSkuaW5kZXhPZihpdGVtLmtleSk7XG5cdFx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbjogQ3VzdG9tQW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IGFjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA/PyBmYWxzZSkgJiYgYWN0aW9uLmVuYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0YWN0aW9uRW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdC8vIExvYWQgWE1MIG9yIG1hbmlmZXN0IGJhc2VkIHRvb2xiYXIgYWN0aW9uc1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogYWN0aW9uLnRleHQgPyBhY3Rpb24udGV4dCA6IFwiXCIsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcmVzczogYWN0aW9uLnByZXNzID8gYWN0aW9uLnByZXNzIDogXCJcIixcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZSA6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHQvLyBMb2FkIGFjdGlvbiBncm91cHMgKE1lbnUpXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGFjdGlvbkVuYWJsZWQsXG5cdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5OiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRVc2VEZWZhdWx0QWN0aW9uT25seShhY3Rpb24pLFxuXHRcdFx0XHRidXR0b25Nb2RlOiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRCdXR0b25Nb2RlKGFjdGlvbiksXG5cdFx0XHRcdGRlZmF1bHRBY3Rpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0YWN0aW9uczogYWN0aW9uLFxuXHRcdFx0XHRwcmlvcml0eTogYWN0aW9uLnByaW9yaXR5LFxuXHRcdFx0XHRncm91cDogYWN0aW9uLmdyb3VwXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnRDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9ja1xuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gcm9tTWVudShtZW51SXRlbUFjdGlvbjogQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IHByZXNzSGFuZGxlcjogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdGlmIChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdC8vQW5ub3RhdGlvbiBiYXNlZCBhY3Rpb24gaXMgcGFzc2VkIGFzIG1lbnUgaXRlbSBmb3IgbWVudSBidXR0b25cblx0XHRyZXR1cm4gZ2V0QWN0aW9uKG1lbnVJdGVtQWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGlmIChtZW51SXRlbUFjdGlvbi5jb21tYW5kKSB7XG5cdFx0cHJlc3NIYW5kbGVyID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0fSBlbHNlIGlmIChtZW51SXRlbUFjdGlvbi5ub1dyYXAgPz8gZmFsc2UpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7XG5cdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmdW5jdGlvbk5hbWUgPSBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRbdGVtcDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKVxuXHRcdFx0XHRcdC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHRcdFx0Py5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIik7XG5cdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTW9kdWxlLCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7IGNvbnRleHRzOiBzZWxlY3RlZENvbnRleHRzIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e21lbnVJdGVtQWN0aW9uLnRleHR9IHsuLi5wcmVzc0hhbmRsZXJ9IHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9IGVuYWJsZWQ9e21lbnVJdGVtQWN0aW9uLmVuYWJsZWR9IC8+O1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbihcblx0cHJvcHM6IEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGFNZW51SXRlbXMgPSAocHJvcHMuYWN0aW9ucz8ubWVudSBhcyBDdXN0b21BY3Rpb25bXSkubWFwKChhY3Rpb246IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdHJldHVybiBnZXRNZW51SXRlbUZyb21NZW51KGFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0fSk7XG5cdGNvbnN0IGlzQUlPcGVyYXRpb24gPSBpc01lbnVBSU9wZXJhdGlvbihwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKTtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3Byb3BzLnRleHR9XG5cdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdGlkPXtwcm9wcy5pZH1cblx0XHRcdFx0dmlzaWJsZT17cHJvcHMudmlzaWJsZX1cblx0XHRcdFx0ZW5hYmxlZD17cHJvcHMuZW5hYmxlZH1cblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9e3Byb3BzLnVzZURlZmF1bHRBY3Rpb25Pbmx5fVxuXHRcdFx0XHRidXR0b25Nb2RlPXtwcm9wcy5idXR0b25Nb2RlfVxuXHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdGRlZmF1bHRBY3Rpb249e1wicHJvcHMuZGVmYXVsdEFjdGlvblwiIGFzIHVua25vd24gYXMgKCkgPT4gdm9pZH1cblx0XHRcdFx0aWNvbj17aXNBSU9wZXJhdGlvbiA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRtZW51OiA8TWVudT57YU1lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtwcm9wcy5wcmlvcml0eX0gZ3JvdXA9e3Byb3BzLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBpc01lbnVJdGVtOiBib29sZWFuLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoID8/IFwiXCIpITtcblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdHJldHVybiBnZXROYXZpZ2F0aW9uQWN0aW9ucyhhY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldEFubm90YXRpb25BY3Rpb25zKGNoYXJ0Q29udGV4dCwgYWN0aW9uIGFzIEFubm90YXRpb25BY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51Py5tYXAoKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb24obWVudUFjdGlvbiwgY2hhcnRDb250ZXh0LCB0cnVlLCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRpZD17YWN0aW9uLmtleX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbkFjdGlvbnMoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0bGV0IGVuYWJsZWQgPSBcInRydWVcIjtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdGFjdGlvbixcblx0XHR7XG5cdFx0XHRpZDogdW5kZWZpbmVkLFxuXHRcdFx0dW5pdHRlc3RpZDogXCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25CdXR0b25BY3Rpb25cIixcblx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRhcmlhSGFzUG9wdXA6IHVuZGVmaW5lZCxcblx0XHRcdHByZXNzOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKGRhdGFGaWVsZCwgYFxcJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfWAsIGZhbHNlKSEsXG5cdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdH0sXG5cdFx0aXNNZW51SXRlbSxcblx0XHRjaGFydEJsb2NrLFxuXHRcdGRhdGFGaWVsZFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9ucyhcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEFubm90YXRpb25BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IFRvb2xiYXJBY3Rpb24ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pKTtcblx0Y29uc3QgYWN0aW9uT2JqZWN0ID0gYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGlzQm91bmRQYXRoID0gQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChpc0JvdW5kUGF0aCkhLmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIWlzQm91bmQgfHwgaXNCb3VuZC4kSXNCb3VuZCAhPT0gdHJ1ZSB8fCBhY3Rpb25PYmplY3RbYEAke0NvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlfWBdICE9PSBmYWxzZSkge1xuXHRcdGNvbnN0IGVuYWJsZWQgPSBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoYWN0aW9uLCBpc0JvdW5kLCBkYXRhRmllbGQsIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jay5fY29udGV4dCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkgYXMgQ29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgYXJpYUhhc1BvcHVwID0gaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID1cblx0XHRcdGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHx8IFwiXCI7XG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGRhdGFGaWVsZENvbnRleHQpXSksXG5cdFx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogYXJpYUhhc1BvcHVwLFxuXHRcdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0XHR2aXNpYmxlOiBnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spXG5cdFx0XHR9LFxuXHRcdFx0aXNNZW51SXRlbSxcblx0XHRcdGNoYXJ0QmxvY2ssXG5cdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0YWN0aW9uOiAoQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbikgJiB7IG5vV3JhcD86IGJvb2xlYW4gfSxcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0aWYgKGlzTWVudUl0ZW0pIHtcblx0XHRjb25zdCBwcmVzc0V2ZW50OiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IHtcblx0XHRcdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jay5fYmxvY2tJZCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiB2aWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZD8uTGFiZWwgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZD8uQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/Lk1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHQgIH07XG5cblx0XHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e3Rvb2xiYXJBY3Rpb24ubGFiZWx9IHsuLi5wcmVzc0V2ZW50fSBlbmFibGVkPXt0b29sYmFyQWN0aW9uLmVuYWJsZWR9IHZpc2libGU9e3Rvb2xiYXJBY3Rpb24udmlzaWJsZX0gLz47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGJ1aWxkQWN0aW9uKGFjdGlvbiwgdG9vbGJhckFjdGlvbiwgY2hhcnRCbG9jaywgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uLmlkfVxuXHRcdFx0XHR0ZXh0PXt0b29sYmFyQWN0aW9uLmxhYmVsfVxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9e3Rvb2xiYXJBY3Rpb24uYXJpYUhhc1BvcHVwfVxuXHRcdFx0XHR7Li4uZ2V0QWN0aW9uUHJlc3MoYWN0aW9uLCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjaGFydEJsb2NrKX1cblx0XHRcdFx0ZW5hYmxlZD17dG9vbGJhckFjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXt0b29sYmFyQWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGljb249e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrXG4pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSB7XG5cdGxldCBhY3Rpb25QcmVzczogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSB7XG5cdFx0cHJlc3M6IFwiXCIgYXMgdW5rbm93biBhcyAoKSA9PiB2b2lkXG5cdH07XG5cblx0aWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0XHR9IGVsc2UgaWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5ub1dyYXAgPT09IHRydWUpIHtcblx0XHRcdGFjdGlvblByZXNzID0gZ2V0Q3VzdG9tQWN0aW9uUHJlc3MoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbik7XG5cdFx0fSBlbHNlIGlmICghYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRhY3Rpb25QcmVzcyA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IGdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kKGFjdGlvbiwgZGF0YUZpZWxkLCBjaGFydEJsb2NrLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9uUHJlc3M7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gYWN0aW9uLmhhbmRsZXJNZXRob2Q/LnNwbGl0KFwiLlwiKVsxXSBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0W21ldGhvZDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0XHRpZiAoY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKSBjb250cm9sbGVyW2Z1bmN0aW9uTmFtZV0oZXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJlc3NXaXRoQW5ub3RhdGlvblBhdGgoYWN0aW9uOiBDdXN0b21BY3Rpb24pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0ge1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZXZlbnQuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogc2VsZWN0ZWRDb250ZXh0c1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jaz8uX2Jsb2NrSWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQ/LkFjdGlvbiBhcyBzdHJpbmcsIHBhcmFtcyk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdGlzQm91bmQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRjb250ZXh0OiBDb250ZXh0XG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBjaGFydENvbnRleHQgfSksXG5cdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCB8fCBcIlwiXG5cdFx0ICApO1xufVxuXG5mdW5jdGlvbiBnZXRTZWdtZW50ZWRCdXR0b24oY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRsYXlvdXRJbmZvcm1hdGlvbj17e1xuXHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWU6IFwiZW5kXCIsXG5cdFx0XHRcdGFsaWdubWVudDogXCJFbmRcIlxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKX1cblx0XHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXsoZXZlbnQ6IFNlZ21lbnRlZEJ1dHRvbiRTZWxlY3Rpb25DaGFuZ2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVNlZ21lbnRlZEJ1dHRvblByZXNzZWQ/Lihcblx0XHRcdFx0XHRcdG1lcmdlKGV2ZW50LmdldFBhcmFtZXRlcnMoKSwgeyBzZWxlY3RlZEtleTogZXZlbnQuZ2V0U291cmNlKCkuZ2V0U2VsZWN0ZWRLZXkoKSB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdHZpc2libGU9e25vdEVxdWFsKHBhdGhJbk1vZGVsKFwiYWxwQ29udGVudFZpZXdcIiwgXCJwYWdlSW50ZXJuYWxcIiksIFwiVGFibGVcIil9XG5cdFx0XHRcdHNlbGVjdGVkS2V5PXtwYXRoSW5Nb2RlbChcImFscENvbnRlbnRWaWV3XCIsIFwicGFnZUludGVybmFsXCIpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBnZXRTZWdtZW50ZWRCdXR0b25JdGVtcygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1NlZ21lbnRlZEJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zKCk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uSXRlbXMgPSBbXTtcblx0aWYgKENvbW1vbkhlbHBlci5pc0Rlc2t0b3AoKSkge1xuXHRcdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0hZQlJJRF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJIeWJyaWRcIiwgXCJzYXAtaWNvbjovL2NoYXJ0LXRhYmxlLXZpZXdcIilcblx0XHQpO1xuXHR9XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9DSEFSVF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJDaGFydFwiLCBcInNhcC1pY29uOi8vYmFyLWNoYXJ0XCIpXG5cdCk7XG5cdHNlZ21lbnRlZEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIiwgXCJUYWJsZVwiLCBcInNhcC1pY29uOi8vdGFibGUtdmlld1wiKVxuXHQpO1xuXHRyZXR1cm4gc2VnbWVudGVkQnV0dG9uSXRlbXM7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0odG9vbHRpcDogc3RyaW5nLCBrZXk6IHN0cmluZywgaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIDxTZWdtZW50ZWRCdXR0b25JdGVtIHRvb2x0aXA9e3Rvb2x0aXB9IGtleT17a2V5fSBpY29uPXtpY29ufSAvPjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbm5vdGF0aW9uIHBhdGggcG9pbnRpbmcgdG8gdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiAoQ2hhcnQpLlxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhbW9kZWwgb2JqZWN0IHBhdGggZm9yIHRoZSBjaGFydFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldFZpc3VhbGl6YXRpb25QYXRoKFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiBtZXRhUGF0aCBpcyBub3Qgc2V0XG5cdGlmICghbWV0YVBhdGgpIHtcblx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBDaGFydGApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YDtcblx0fVxuXG5cdGlmIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB7XG5cdFx0cmV0dXJuIG1ldGFQYXRoOyAvLyBNZXRhUGF0aCBpcyBhbHJlYWR5IHBvaW50aW5nIHRvIGEgQ2hhcnRcblx0fVxuXG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdHN3aXRjaCAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50ZXJtKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdFx0cmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHR2aXN1YWxpemF0aW9ucyA9IGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0bWV0YVBhdGgsXG5cdFx0XHRcdHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBjaGFydFZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydDtcblx0fSk7XG5cblx0aWYgKGNoYXJ0Vml6KSB7XG5cdFx0cmV0dXJuIGNoYXJ0Vml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgQ2hhcnQgaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YVBhdGggcGFyYW1ldGVyIGZvciBjaGFydDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm19YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0gJiYgZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgpIHtcblx0XHRjb25zdCBoaWRkZW5QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgYC9AJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59LyRQYXRoYCxcblx0XHRcdGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdLiRQYXRoXG5cdFx0KTtcblx0XHRyZXR1cm4gQ2hhcnRIZWxwZXIuZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4oZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGgsIHtcblx0XHRcdGNvbnRleHQ6IGhpZGRlblBhdGhDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRyZXR1cm4gIWRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0Q29udmVydGVyQ29udGV4dChcblx0cHJvcGVydGllczogQ2hhcnRCbG9jayxcblx0b3JpZ2luYWxWaWV3RGF0YTogUGFydGlhbDxWaWV3RGF0YT4sXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGV4dHJhUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VNb2RlbDtcblx0ZGVsZXRlIHZpZXdEYXRhLmFwcENvbXBvbmVudDtcblx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRsZXQgY29udHJvbENvbmZpZ3VyYXRpb24gPSB7fTtcblxuXHQvLyBPbmx5IG1lcmdlIGluIHBhZ2UgY29udHJvbCBjb25maWd1cmF0aW9uIGlmIHRoZSBidWlsZGluZyBibG9jayBpcyBvbiB0aGUgc2FtZSBjb250ZXh0XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoY29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uID8/IGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldD8ubmFtZTtcblx0aWYgKFxuXHRcdHJlbGF0aXZlUGF0aCA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uY29udGV4dFBhdGggfHxcblx0XHRyZWxhdGl2ZVBhdGggPT09IGAvJHtvcmlnaW5hbFZpZXdEYXRhPy5lbnRpdHlTZXR9YCB8fFxuXHRcdGVudGl0eVNldE5hbWUgPT09IG9yaWdpbmFsVmlld0RhdGE/LmVudGl0eVNldFxuXHQpIHtcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbiA9IHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uITtcblx0fVxuXHR2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiA9IG1lcmdlKGNvbnRyb2xDb25maWd1cmF0aW9uLCBleHRyYVBhcmFtcyB8fCB7fSkgYXMgQ29udHJvbENvbmZpZ3VyYXRpb247XG5cblx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0cHJvcGVydGllcy5fbWV0YU1vZGVsLFxuXHRcdGRpYWdub3N0aWNzLFxuXHRcdG1lcmdlLFxuXHRcdGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHZpZXdEYXRhIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+LFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKGNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGV4dHJhUGFyYW1zID0gZ2V0RXh0cmFQYXJhbXMoY2hhcnRCbG9jaywgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MsIGV4dHJhUGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gbW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHZvaWQge1xuXHRpZiAoY2hhcnRCbG9jay5fYXBwbHlJZFRvQ29udGVudCkge1xuXHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQgPSBjaGFydEJsb2NrLmlkLnJlcGxhY2UoLzo6Q2hhcnQkLywgXCJcIik7XG5cdFx0Y2hhcnRCbG9jay5fY29udGVudElkID0gY2hhcnRCbG9jay5fYmxvY2tJZDtcblx0fSBlbHNlIHtcblx0XHRjaGFydEJsb2NrLl9ibG9ja0lkID0gY2hhcnRCbG9jay5pZDtcblx0XHRjaGFydEJsb2NrLl9jb250ZW50SWQgPSBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5pZCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZShcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+XG4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gY2hhcnRCbG9jay5nZXRNZXRhUGF0aE9iamVjdChjaGFydEJsb2NrLm1ldGFQYXRoLCBjaGFydEJsb2NrLl9yZXNvbHZlZENvbnRleHRQYXRoKTtcblx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsID0gY2hhcnRCbG9jay5fZ2V0T3duZXIoKT8ucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aCEuZ2V0UGF0aCgpKSE7XG5cdGNoYXJ0QmxvY2suX2NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY2hhcnRCbG9jay5jb250ZXh0UGF0aCA/PyBtZXRhQ29udGV4dFBhdGg/LmdldENvbnRleHRQYXRoKCkpITtcblxuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q29udmVydGVyQ29udGV4dChjaGFydEJsb2NrLCB2aWV3RGF0YSwgY29udGV4dE9iamVjdFBhdGgsIGRpYWdub3N0aWNzKTtcblx0Y29uc3Qgdmlld0NvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/LmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGlzTXVsdGlUYWJzID0gKHZpZXdDb25maWc/LnBhdGhzPy5sZW5ndGggYXMgbnVtYmVyKSA+IDE7XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/Lmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cblx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0ID0gQ2hhcnRIZWxwZXIuZ2V0VWlDaGFydChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQpITtcblx0Y2hhcnRCbG9jay5fY2hhcnQgPSBjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgQ2hhcnRUeXBlO1xuXHRjaGFydEJsb2NrLl9ibG9ja0FjdGlvbnMgPSBbXTtcblx0Y2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMgPSBbXTtcblx0bW9kaWZ5SWRlbnRpZmllcnMoY2hhcnRCbG9jayk7XG5cdGlmIChjaGFydEJsb2NrLl9jaGFydCkge1xuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uID0gY3JlYXRlQ2hhcnREZWZpbml0aW9uKFxuXHRcdFx0Y2hhcnRCbG9jayxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRjb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dC5nZXRQYXRoKClcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbikgYXMgQ29udGV4dDtcblx0XHQvLyBBUEkgUHJvcGVydGllc1xuXHRcdGNoYXJ0QmxvY2submF2aWdhdGlvblBhdGggPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0XHRjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0ID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYXV0b0JpbmRPbkluaXQ7XG5cdFx0Y2hhcnRCbG9jay52aXpQcm9wZXJ0aWVzID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udml6UHJvcGVydGllcztcblx0XHRjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmFjdGlvbnM7XG5cdFx0Y2hhcnRCbG9jay5maWx0ZXIgPSBnZXRGaWx0ZXJCYXIoY2hhcnRCbG9jayk7XG5cdFx0bGV0IHBlcnNvbmFsaXphdGlvbjogQ2hhcnRQMTNuVHlwZTtcblx0XHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5wZXJzb25hbGl6YXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAoY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwidHJ1ZVwiOlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKS5qb2luKFwiLFwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMocGVyc29uYWxpemF0aW9uLCBjaGFydEJsb2NrKTtcblx0XHRjaGFydEJsb2NrLnZpc2libGUgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52aXNpYmxlO1xuXHRcdGNoYXJ0QmxvY2suZHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQobWV0YUNvbnRleHRQYXRoISk7XG5cdFx0Y2hhcnRCbG9jay5fY2hhcnRUeXBlID0gQ2hhcnRIZWxwZXIuZm9ybWF0Q2hhcnRUeXBlKGNoYXJ0QmxvY2suX2NoYXJ0LkNoYXJ0VHlwZSk7XG5cblx0XHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRCbG9jay5fY2hhcnQsIHtcblx0XHRcdGNvbnRleHQ6IGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dFxuXHRcdH0pO1xuXG5cdFx0aWYgKE9iamVjdC5rZXlzKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9ucyBhcyBvYmplY3QpLmxlbmd0aCA+IDApIHtcblx0XHRcdE9iamVjdC5rZXlzKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9ucyBhcyBvYmplY3QpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jb21tYW5kQWN0aW9uc1trZXldO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25Db250ZXh0ID0gY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uKTtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aCAmJiBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dCAmJiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdHB1c2hBY3Rpb25Db21tYW5kKGFjdGlvbkNvbnRleHQsIGRhdGFGaWVsZCwgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsIGFjdGlvbiwgY2hhcnRCbG9jayk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y2hhcnRCbG9jay5tZWFzdXJlcyA9IGdldENoYXJ0TWVhc3VyZXMoY2hhcnRCbG9jayk7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5jcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQpO1xuXHRcdGNoYXJ0QmxvY2suX3NvcnRDb25kaXRpb25zID0gQ2hhcnRIZWxwZXIuZ2V0U29ydENvbmRpdGlvbnMoXG5cdFx0XHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQsXG5cdFx0XHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRwcmVzZW50YXRpb25QYXRoLmdldFBhdGgoKSxcblx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmFwcGx5U3VwcG9ydGVkXG5cdFx0KTtcblx0XHRjb25zdCBjaGFydEFjdGlvbnNDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldFBhdGgoKSArIFwiL0FjdGlvbnNcIixcblx0XHRcdGNoYXJ0QmxvY2suX2NoYXJ0LkFjdGlvbnMgYXMgdW5rbm93biBhcyBDb250ZXh0XG5cdFx0KTtcblx0XHRjb25zdCB0YXJnZXRDb2xsZWN0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRUYXJnZXRDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uKTtcblx0XHRjb25zdCB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0Q29sbGVjdGlvblBhdGgsIGNvbGxlY3Rpb24pITtcblx0XHRjb25zdCBhY3Rpb25zT2JqZWN0ID0gY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgoY2hhcnRBY3Rpb25zQ29udGV4dC5nZXRQYXRoKCkpPy50YXJnZXQ7XG5cblx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhID0ge1xuXHRcdFx0dGFyZ2V0Q29sbGVjdGlvblBhdGg6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24sXG5cdFx0XHRlbnRpdHlTZXQ6XG5cdFx0XHRcdHR5cGVvZiB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KCkgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHQ/IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoKVxuXHRcdFx0XHRcdDogdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLFxuXHRcdFx0ZW50aXR5VHlwZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbiArIFwiL1wiLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnBhcnNlKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGFjdGlvbnNPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdKSArIFwiXCIsXG5cdFx0XHRzZWdtZW50ZWRCdXR0b25JZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSksXG5cdFx0XHRjdXN0b21BZ2c6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jdXN0b21BZ2csXG5cdFx0XHR0cmFuc0FnZzogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnRyYW5zQWdnLFxuXHRcdFx0YXBwbHlTdXBwb3J0ZWQ6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5hcHBseVN1cHBvcnRlZCxcblx0XHRcdHZpelByb3BlcnRpZXM6IEpTT04ucGFyc2UoY2hhcnRCbG9jay52aXpQcm9wZXJ0aWVzKSxcblx0XHRcdGRyYWZ0U3VwcG9ydGVkOiBjaGFydEJsb2NrLmRyYWZ0U3VwcG9ydGVkLFxuXHRcdFx0bXVsdGlWaWV3czogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/Lm11bHRpVmlld3MgfHwgKCFoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zICYmIGlzTXVsdGlUYWJzKSxcblx0XHRcdHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoOiB7XG5cdFx0XHRcdGRhdGE6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5zZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHRcdFx0fSxcblx0XHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZSxcblx0XHRcdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jaGFydE1lYXN1cmVLZXlBbmRSb2xlXG5cdFx0fTtcblx0XHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0KSB7XG5cdFx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhLmVudGl0eVNldCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24uc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBmYWxsYmFjayB0byBkaXNwbGF5IGVtcHR5IGNoYXJ0XG5cdFx0Y2hhcnRCbG9jay5hdXRvQmluZE9uSW5pdCA9IGZhbHNlO1xuXHRcdGNoYXJ0QmxvY2sudmlzaWJsZSA9IFwidHJ1ZVwiO1xuXHRcdGNoYXJ0QmxvY2submF2aWdhdGlvblBhdGggPSBcIlwiO1xuXG5cdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YSA9IHtcblx0XHRcdHRhcmdldENvbGxlY3Rpb25QYXRoOiBcIlwiLFxuXHRcdFx0ZW50aXR5U2V0OiBcIlwiLFxuXHRcdFx0ZW50aXR5VHlwZTogXCJcIixcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogXCJcIixcblx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zOiBcIlwiLFxuXHRcdFx0c2VnbWVudGVkQnV0dG9uSWQ6IFwiXCIsXG5cdFx0XHRjdXN0b21BZ2c6IHt9LFxuXHRcdFx0dHJhbnNBZ2c6IHt9LFxuXHRcdFx0YXBwbHlTdXBwb3J0ZWQ6IHt9LFxuXHRcdFx0dml6UHJvcGVydGllczoge31cblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlckJhcihjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmlsdGVyQmFyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChjaGFydEJsb2NrLmZpbHRlckJhcik7XG5cdGlmIChjaGFydEJsb2NrLmZpbHRlckJhciAmJiBmaWx0ZXJCYXI/LmlzQTxNYWNyb0FQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRyZXR1cm4gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0fSBlbHNlIGlmIChmaWx0ZXJCYXI/LmlzQTxDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0cmV0dXJuIGNoYXJ0QmxvY2suZmlsdGVyQmFyO1xuXHR9IGVsc2UgaWYgKGNoYXJ0QmxvY2suZmlsdGVyQmFyKSB7XG5cdFx0cmV0dXJuIGdldENvbnRlbnRJZChjaGFydEJsb2NrLmZpbHRlckJhcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVsZWdhdGUoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IG9iamVjdCB7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUpIHtcblx0XHQoY2hhcnRCbG9jay5jaGFydERlbGVnYXRlIGFzIENoYXJ0RGVsZWdhdGUpLnBheWxvYWQuc2VsZWN0aW9uTW9kZSA9XG5cdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/XG5cdFx0XHQoY2hhcnRCbG9jay5jaGFydERlbGVnYXRlIGFzIENoYXJ0RGVsZWdhdGUpLnBheWxvYWQuc2VsZWN0aW9uTW9kZSA/P1xuXHRcdFx0XCJNVUxUSVBMRVwiO1xuXHR9XG5cdHJldHVybiBjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGVcblx0XHQ/IGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZVxuXHRcdDoge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0Y2hhcnRDb250ZXh0UGF0aDogY2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxlY3Rpb25Nb2RlOlxuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/PyBjaGFydEJsb2NrLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz8gXCJNVUxUSVBMRVwiXG5cdFx0XHRcdH1cblx0XHQgIH07XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbURhdGEoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEN1c3RvbURhdGFbXSB7XG5cdHJldHVybiBbXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInRhcmdldENvbGxlY3Rpb25QYXRoXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRofSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZW50aXR5U2V0XCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmVudGl0eVNldH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImVudGl0eVR5cGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5VHlwZX0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5vcGVyYXRpb25BdmFpbGFibGVNYXB9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uc1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5tdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uc30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInNlZ21lbnRlZEJ1dHRvbklkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnNlZ21lbnRlZEJ1dHRvbklkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY3VzdG9tQWdnXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmN1c3RvbUFnZ30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInRyYW5zQWdnXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRyYW5zQWdnfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiYXBwbHlTdXBwb3J0ZWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuYXBwbHlTdXBwb3J0ZWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJ2aXpQcm9wZXJ0aWVzXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnZpelByb3BlcnRpZXN9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJkcmFmdFN1cHBvcnRlZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5kcmFmdFN1cHBvcnRlZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm11bHRpVmlld3NcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEubXVsdGlWaWV3c30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLnNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRofSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZX0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY2hhcnRNZWFzdXJlS2V5QW5kUm9sZX0gLz5cblx0XTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9EYXRhKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBJbGx1c3RyYXRlZE1lc3NhZ2UgfCB1bmRlZmluZWQge1xuXHRpZiAoY2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXHRyZXR1cm4gKFxuXHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuQXV0b31cblx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuQmVmb3JlU2VhcmNofVxuXHRcdFx0dGl0bGU9e2NoYXJ0QmxvY2suZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RJVExFX1RFWFRcIil9XG5cdFx0XHRkZXNjcmlwdGlvbj17Y2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiKX1cblx0XHRcdGVuYWJsZURlZmF1bHRUaXRsZUFuZERlc2NyaXB0aW9uPXtmYWxzZX1cblx0XHRcdGVuYWJsZVZlcnRpY2FsUmVzcG9uc2l2ZW5lc3M9e3RydWV9XG5cdFx0PjwvSWxsdXN0cmF0ZWRNZXNzYWdlPlxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWRjQ2hhcnRUZW1wbGF0ZShcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRkaWFnbm9zdGljczogRGlhZ25vc3RpY3MsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0Q29udGV4dE9iamVjdFBhdGg+XG4pOiBNZGNDaGFydCB7XG5cdGluaXRpYWxpc2UoY2hhcnRCbG9jaywgdmlld0RhdGEsIGRpYWdub3N0aWNzLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGNoYXJ0QmxvY2subGF5b3V0RGF0YSA9IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjFcIiBzaHJpbmtGYWN0b3I9XCIxXCIgLz47XG5cblx0cmV0dXJuIChcblx0XHQ8TWRjQ2hhcnRcblx0XHRcdGJpbmRpbmc9e3sgaW50ZXJuYWw6IFwiY29udHJvbHMvXCIgKyBjaGFydEJsb2NrLl9ibG9ja0lkIH19XG5cdFx0XHRpZD17Y2hhcnRCbG9jay5fY29udGVudElkfVxuXHRcdFx0Y2hhcnRUeXBlPXtjaGFydEJsb2NrLl9jaGFydFR5cGV9XG5cdFx0XHRzb3J0Q29uZGl0aW9ucz17Y2hhcnRCbG9jay5fc29ydENvbmRpdGlvbnN9XG5cdFx0XHRoZWFkZXI9e2NoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmhlYWRlciA/PyBjaGFydEJsb2NrLmhlYWRlciA/PyBjaGFydEJsb2NrLl9jaGFydD8uVGl0bGU/LnRvU3RyaW5nKCkgPz8gXCJcIn1cblx0XHRcdGhlYWRlclZpc2libGU9e2NoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmhlYWRlclZpc2libGUgPz8gY2hhcnRCbG9jay5oZWFkZXJWaXNpYmxlfVxuXHRcdFx0bWluSGVpZ2h0PXtEZXZpY2Uuc3lzdGVtLnBob25lID8gXCI4MHZoXCIgOiBcIjQwMHB4XCJ9XG5cdFx0XHRoZWlnaHQ9XCIxMDAlXCJcblx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRoZWFkZXJMZXZlbD17Y2hhcnRCbG9jay5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXtjaGFydEJsb2NrLmhlYWRlclN0eWxlfVxuXHRcdFx0cDEzbk1vZGU9eyhjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24hIGFzIHN0cmluZyk/LnNwbGl0KFwiLFwiKX1cblx0XHRcdGZpbHRlcj17Y2hhcnRCbG9jay5maWx0ZXJ9XG5cdFx0XHRub0RhdGFUZXh0PXtcblx0XHRcdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aCA9PT0gXCJcIlxuXHRcdFx0XHRcdD8gY2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ0hBUlRfTk9fQU5OT1RBVElPTl9TRVRfVEVYVFwiKVxuXHRcdFx0XHRcdDogY2hhcnRCbG9jay5ub0RhdGFUZXh0XG5cdFx0XHR9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17Y2hhcnRCbG9jay5hdXRvQmluZE9uSW5pdH1cblx0XHRcdGRlbGVnYXRlPXtnZXREZWxlZ2F0ZShjaGFydEJsb2NrKX1cblx0XHRcdHZpc2libGU9e2NoYXJ0QmxvY2sudmlzaWJsZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBnZXRDdXN0b21EYXRhKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRkZXBlbmRlbnRzOiBbZ2V0RGVwZW5kZW50cyhjaGFydEJsb2NrLCBjaGFydEJsb2NrLl9jaGFydENvbnRleHQpLCBnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyKGNoYXJ0QmxvY2spXSxcblx0XHRcdFx0aXRlbXM6IGdldEl0ZW1zKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRhY3Rpb25zOiBjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA/IGdldFRvb2xiYXJBY3Rpb25zKGNoYXJ0QmxvY2spIDogY2hhcnRCbG9jay5fYmxvY2tBY3Rpb25zLFxuXHRcdFx0XHR2YXJpYW50OiBjcmVhdGVWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKSxcblx0XHRcdFx0bm9EYXRhOiBnZXROb0RhdGEoY2hhcnRCbG9jaylcblx0XHRcdH19XG5cdFx0PC9NZGNDaGFydD5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUdBLE1BQU1BLFdBQXNDLEdBQUc7SUFDOUMsdURBQXVELEVBQUUsT0FBTztJQUNoRSx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLHVEQUF1RCxFQUFFLE9BQU87SUFDaEUsdURBQXVELEVBQUU7RUFDMUQsQ0FBQztFQUFDLElBMEJHQyxxQkFBcUIsMEJBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFBLE9BQXJCQSxxQkFBcUI7RUFBQSxFQUFyQkEscUJBQXFCO0VBK0UxQixTQUFTQyxxQkFBcUJBLENBQzdCQyxVQUFzQixFQUN0QkMsZ0JBQWtDLEVBQ2xDQyxpQkFBc0csRUFDdEdDLFdBQW1CLEVBQ0U7SUFDckIsSUFBSUMsaUJBQWlCLEdBQUdDLGtDQUFrQyxDQUFDSCxpQkFBaUIsQ0FBQztJQUM3RSxJQUFJSSxjQUF3QyxHQUFHLEVBQUU7SUFDakQsSUFBSU4sVUFBVSxDQUFDTyxnQkFBZ0IsRUFBRUMsU0FBUyxDQUFDLENBQUMsRUFBRUMsS0FBSyx5REFBOEMsRUFBRTtNQUNsR0gsY0FBYyxHQUFHTixVQUFVLENBQUNPLGdCQUFnQixDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDRSxjQUFjO0lBQ3hFLENBQUMsTUFBTSxJQUFJVixVQUFVLENBQUNPLGdC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
|
|
1350
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbk92ZXJmbG93R3JvdXBzIiwiYWN0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsImZvckVhY2giLCJhY3Rpb24iLCJpc0EiLCJrZXkiLCJnZXRBY3Rpb25Qcm9wZXJ0aWVzIiwidGV4dCIsInBsYWNlbWVudCIsImFuY2hvciIsIm1hcCIsIl8iLCJpbmRleCIsImdyb3VwIiwib3ZlcmZsb3dHcm91cCIsImFjdCIsImFjdGlvbktleSIsImNvbmNhdCIsInByZXNzIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJlbmFibGVkIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJzaG93U2VwYXJhdG9yIiwib3ZlcmZsb3dHcm91cHMiLCJwb3NpdGlvbiIsIm1lbnUiLCJhY3Rpb25Qcm9wZXJ0aWVzIiwiX19ub1dyYXAiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRhdGEiLCJjb250ZXh0UGF0aCIsInVpZCIsImFjdGlvbnNNb2RlbCIsIkpTT05Nb2RlbCIsInNldFByb3BlcnR5IiwiZ2V0Q2hhcnRNZWFzdXJlcyIsImNoYXJ0QW5ub3RhdGlvblBhdGgiLCJjaGFydERlZmluaXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInNwbGl0IiwiZmlsdGVyIiwiaXRlbSIsInBvcyIsImluZGV4T2YiLCJyZXBsYWNlQWxsIiwib0NoYXJ0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiX21ldGFNb2RlbCIsIl9jb250ZXh0IiwidGFyZ2V0T2JqZWN0IiwibWVhc3VyZXMiLCJhbm5vUGF0aCIsImdldFBhdGgiLCJjaGFydE1lYXN1cmVzIiwiTWVhc3VyZXMiLCJjaGFydER5bmFtaWNNZWFzdXJlcyIsIkR5bmFtaWNNZWFzdXJlcyIsImVudGl0eVNldFBhdGgiLCJyZXBsYWNlIiwidHJhbnNBZ2dyZWdhdGlvbnMiLCJ0cmFuc0FnZyIsImN1c3RvbUFnZ3JlZ2F0aW9ucyIsImN1c3RvbUFnZyIsImNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5IiwiY29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXMiLCJMb2ciLCJ3YXJuaW5nIiwiaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUiLCJvQ2hhcnRNZWFzdXJlIiwib0N1c3RvbUFnZ01lYXN1cmUiLCJnZXRDdXN0b21BZ2dNZWFzdXJlIiwiRXJyb3IiLCJkeW5hbWljTWVhc3VyZSIsImdldER5bmFtaWNNZWFzdXJlcyIsImNoYXJ0TWVhc3VyZSIsInZhbHVlIiwiY3VzdG9tQWdnTWVhc3VyZSIsIm1lYXN1cmVUeXBlIiwic2V0Q3VzdG9tQWdnTWVhc3VyZSIsInNldFRyYW5zQWdnTWVhc3VyZSIsInNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMiLCJfY2hhcnQiLCJNZWFzdXJlQXR0cmlidXRlcyIsIm1lYXN1cmVzTW9kZWwiLCIkJHZhbHVlQXNQcm9taXNlIiwibWVhc3VyZSIsImVycm9yIiwicm9sZSIsImxhYmVsIiwicHJvcGVydHlQYXRoIiwicHVzaCIsInRyYW5zQWdnTWVhc3VyZSIsIm5hbWUiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsImNoYXJ0RHluYW1pY01lYXN1cmUiLCJjaGFydCIsImFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsInN0YXJ0c1dpdGgiLCJOYW1lIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJBZ2dyZWdhdGlvbk1ldGhvZCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsIiR0YXJnZXQiLCJtZWFzdXJlQXR0cmlidXRlcyIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJfc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlIiwicGF0aCIsIkR5bmFtaWNNZWFzdXJlIiwiTWVhc3VyZSIsIm1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQiLCJEYXRhUG9pbnQiLCJSb2xlIiwiZGF0YVBvaW50Iiwic2V0TWVhc3VyZVJvbGUiLCJzZXRNZWFzdXJlRGF0YVBvaW50IiwiY3JlYXRlRGF0YVBvaW50UHJvcGVydHkiLCJvRGF0YVBvaW50QW5ubyIsIm9EYXRhUG9pbnQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFZhbHVlIiwiJFBhdGgiLCJGb3JlY2FzdFZhbHVlIiwiZm9yZUNhc3RWYWx1ZSIsIm9Dcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJDYWxjdWxhdGVkIiwiU3RhdGljIiwiJEVudW1NZW1iZXIiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwib1RocmVzaG9sZHMiLCJiQ29uc3RhbnQiLCJidWlsZFRocmVzaG9sZHMiLCJDb25zdGFudFRocmVzaG9sZHMiLCJEeW5hbWljVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5IiwidGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb24iLCJrZXlzIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJkeW5hbWljVGhyZXNob2xkcyIsIm9uZVN1cHBsaWVkIiwidXNlZE1lYXN1cmVzIiwiY29uc3RhbnRUaHJlc2hvbGRzIiwiaW5pdGlhbGlzZVRocmVzaG9sZHMiLCJwcm9jZXNzVGhyZXNob2xkcyIsIkFnZ3JlZ2F0aW9uTGV2ZWxzIiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxGb3JUaHJlc2hvbGRzIiwib0FnZ3JlZ2F0aW9uTGV2ZWwiLCJWaXNpYmxlRGltZW5zaW9ucyIsInNLZXkiLCJwcm9jZXNzQWdncmVnYXRpb25MZXZlbHNGb3JDb25zdGFudFRocmVzaG9sZHMiLCJhZ2dyZWdhdGlvbkxldmVsIiwiYWdncmVnYXRpb25MZXZlbEluZm8iLCJ2aXNpYmxlRGltZW5zaW9ucyIsIkFnZ3JlZ2F0aW9uTGV2ZWwiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWUiLCJDaGFydEhlbHBlciIsImZvcm1hdEpTT05Ub1N0cmluZyIsImdldERlcGVuZGVudHMiLCJjaGFydENvbnRleHQiLCJfY29tbWFuZEFjdGlvbnMiLCJjb21tYW5kQWN0aW9uIiwiZ2V0QWN0aW9uQ29tbWFuZCIsImNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMiLCJwZXJzb25hbGl6YXRpb24iLCJfcGVyc29uYWxpemF0aW9uIiwiam9pbiIsInZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uIiwidmFsaWQiLCJzcGxpdEFycmF5IiwiYWNjZXB0ZWRWYWx1ZXMiLCJhcnJheUVsZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRNYW5hZ2VtZW50IiwiY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQiLCJfanN4IiwiVmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImdlbmVyYXRlIiwiX2Jsb2NrSWQiLCJmb3IiLCJzaG93U2V0QXNEZWZhdWx0IiwiaGVhZGVyTGV2ZWwiLCJzZWxlY3QiLCJldmVudCIsImZpcmVWYXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwiZmlyZVZhcmlhbnRTYXZlZCIsImdldFBlcnNpc3RlbmNlUHJvdmlkZXIiLCJQZXJzaXN0ZW5jZVByb3ZpZGVyIiwicHVzaEFjdGlvbkNvbW1hbmQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkIiwiY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uIiwib25FeGVjdXRlSUJOIiwiQ29tbW9uSGVscGVyIiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwib25FeGVjdXRlTWFuaWZlc3QiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJkYXRhRmllbGRDb250ZXh0IiwiZGF0YUZpZWxkQWN0aW9uIiwiZ2V0QWN0aW9uQ29udGV4dCIsImlzQm91bmRQYXRoIiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImlzQm91bmQiLCJlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImNvbnRleHQiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQiLCIkSXNCb3VuZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwiaXNJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiY29tbWFuZEVuYWJsZWQiLCJ0eXBlIiwiYWN0aW9uQ29tbWFuZCIsIkNvbW1hbmRFeGVjdXRpb24iLCJleGVjdXRlIiwiY29tbWFuZEV4ZWN1dGUiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZSIsImNvbW1hbmQiLCJJc0JvdW5kIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFNvdXJjZSIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwic0ludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsInBhcmFtcyIsImNvbnRleHRzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsImludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJlZGl0RmxvdyIsImludm9rZUFjdGlvbiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImdldEl0ZW1zIiwiZGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJmb3JtYXREaW1lbnNpb25zIiwiX2NoYXJ0Q29udGV4dCIsImRpbWVuc2lvbiIsImdldEl0ZW0iLCJmb3JtYXRNZWFzdXJlcyIsInByZWZpeCIsIk1kY0NoYXJ0SXRlbSIsInByb3BlcnR5S2V5IiwiZ2V0VG9vbGJhckFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJnZXRTdGFuZGFyZEFjdGlvbnMiLCJpc0luc2lnaHRzVmlzaWJsZSIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJjaGlsZHJlbiIsIkJ1dHRvbiIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwibGF5b3V0RGF0YSIsIk92ZXJmbG93VG9vbGJhckxheW91dERhdGEiLCJwcmlvcml0eSIsInJlbW92ZU1lbnVJdGVtcyIsImNoYXJ0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiQWN0aW9uSGVscGVyIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiZ2V0QWN0aW9uIiwiZ2V0U2VwYXJhdG9yIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDdXN0b21BY3Rpb25zIiwiaWR4Iiwic3BsaWNlIiwiYWN0aW9uRW5hYmxlZCIsImdldEFjdGlvblRvb2xiYXJBY3Rpb24iLCJ1bml0dGVzdGlkIiwiYXJpYUhhc1BvcHVwIiwiZ2V0QWN0aW9uVG9vbGJhck1lbnVBY3Rpb24iLCJ1c2VEZWZhdWx0QWN0aW9uT25seSIsIkRlZmF1bHRBY3Rpb25IYW5kbGVyIiwiZ2V0VXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiZ2V0QnV0dG9uTW9kZSIsImRlZmF1bHRBY3Rpb24iLCJnZXRNZW51SXRlbUZyb21NZW51IiwibWVudUl0ZW1BY3Rpb24iLCJwcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJmdW5jdGlvbk5hbWUiLCJzZWxlY3RlZENvbnRleHRzIiwiTWVudUl0ZW0iLCJwcm9wcyIsImFNZW51SXRlbXMiLCJpc0FJT3BlcmF0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJNZW51QnV0dG9uIiwibWVudVBvc2l0aW9uIiwiRG9jayIsIkJlZ2luQm90dG9tIiwiaWNvbiIsImFpSWNvbiIsImFyaWFEZXNjcmliZWRCeSIsImdldElkIiwiTWVudSIsImlzTWVudUl0ZW0iLCJnZXROYXZpZ2F0aW9uQWN0aW9ucyIsImdldEFubm90YXRpb25BY3Rpb25zIiwibWVudUl0ZW1zIiwibWVudUFjdGlvbiIsIlRvb2xiYXJTZXBhcmF0b3IiLCJhY3Rpb25PYmplY3QiLCJnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQiLCJkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgiLCJpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIiwidG9vbGJhckFjdGlvbiIsInByZXNzRXZlbnQiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJidWlsZEFjdGlvbiIsImdldEFjdGlvblByZXNzIiwiYWN0aW9uUHJlc3MiLCJnZXRDdXN0b21BY3Rpb25QcmVzcyIsImdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoIiwiZ2V0U3RhbmRhcmRBY3Rpb25QcmVzc1dpdGhOb0NvbW1hbmQiLCJsYXlvdXRJbmZvcm1hdGlvbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImFsaWdubWVudCIsIlNlZ21lbnRlZEJ1dHRvbiIsInNlbGVjdGlvbkNoYW5nZSIsImZpcmVTZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwibWVyZ2UiLCJnZXRQYXJhbWV0ZXJzIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm5vdEVxdWFsIiwicGF0aEluTW9kZWwiLCJpdGVtcyIsImdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwic2VnbWVudGVkQnV0dG9uSXRlbXMiLCJpc0Rlc2t0b3AiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtIiwidG9vbHRpcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsIm1ldGFQYXRoIiwidGVybSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiY2hhcnRWaXoiLCJmaW5kIiwidml6IiwiaGlkZGVuUGF0aENvbnRleHQiLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbkZvclRhYmxlQWN0aW9uc0FuZElCTiIsImdldENoYXJ0Q29udmVydGVyQ29udGV4dCIsInByb3BlcnRpZXMiLCJvcmlnaW5hbFZpZXdEYXRhIiwiZGlhZ25vc3RpY3MiLCJ2aWV3RGF0YSIsImFzc2lnbiIsInJlc291cmNlTW9kZWwiLCJhcHBDb21wb25lbnQiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInJlbGF0aXZlUGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJlbnRpdHlTZXROYW1lIiwidGFyZ2V0RW50aXR5U2V0IiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiTWFuaWZlc3RXcmFwcGVyIiwiZ2V0Q29udmVydGVyQ29udGV4dCIsImluaXRpYWxDb252ZXJ0ZXJDb250ZXh0IiwibW9kaWZ5SWRlbnRpZmllcnMiLCJfYXBwbHlJZFRvQ29udGVudCIsIl9jb250ZW50SWQiLCJpbml0aWFsaXNlIiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJfcmVzb2x2ZWRDb250ZXh0UGF0aCIsIl9nZXRPd25lciIsInByZXByb2Nlc3NvckNvbnRleHQiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJnZXRDb250ZXh0UGF0aCIsInZpZXdDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImlzTXVsdGlUYWJzIiwicGF0aHMiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0VWlDaGFydCIsIl9ibG9ja0FjdGlvbnMiLCJjb2xsZWN0aW9uIiwibmF2aWdhdGlvblBhdGgiLCJhdXRvQmluZE9uSW5pdCIsInZpelByb3BlcnRpZXMiLCJnZXRGaWx0ZXJCYXIiLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiX2NoYXJ0VHlwZSIsImZvcm1hdENoYXJ0VHlwZSIsIkNoYXJ0VHlwZSIsImNvbW1hbmRBY3Rpb25zIiwicHJlc2VudGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0IiwiX3NvcnRDb25kaXRpb25zIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJhcHBseVN1cHBvcnRlZCIsImNoYXJ0QWN0aW9uc0NvbnRleHQiLCJBY3Rpb25zIiwidGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsInRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCIsImFjdGlvbnNPYmplY3QiLCJjb252ZXJ0ZWRUeXBlcyIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiX2N1c3RvbURhdGEiLCJlbnRpdHlUeXBlIiwicGFyc2UiLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwic2VnbWVudGVkQnV0dG9uSWQiLCJtdWx0aVZpZXdzIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJjaGFydERpbWVuc2lvbktleUFuZFJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwibmF2UHJvcHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxhc3ROYXZQcm9wIiwiaXNDb250YWlubWVudCIsImNvbnRhaW5zVGFyZ2V0IiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0Iiwic3Vic3RyaW5nIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RGVsZWdhdGUiLCJjaGFydERlbGVnYXRlIiwicGF5bG9hZCIsInNlbGVjdGlvbk1vZGUiLCJ0b1VwcGVyQ2FzZSIsImNoYXJ0Q29udGV4dFBhdGgiLCJwYXJhbWV0ZXJzIiwiJCRncm91cElkIiwiZ2V0Q3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJnZXROb0RhdGEiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkF1dG8iLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIkJlZm9yZVNlYXJjaCIsInRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJkZXNjcmlwdGlvbiIsImVuYWJsZURlZmF1bHRUaXRsZUFuZERlc2NyaXB0aW9uIiwiZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcyIsImdldE1kY0NoYXJ0VGVtcGxhdGUiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwic2hyaW5rRmFjdG9yIiwiTWRjQ2hhcnQiLCJiaW5kaW5nIiwiaW50ZXJuYWwiLCJjaGFydFR5cGUiLCJzb3J0Q29uZGl0aW9ucyIsImhlYWRlciIsIlRpdGxlIiwiaGVhZGVyVmlzaWJsZSIsIm1pbkhlaWdodCIsIkRldmljZSIsInN5c3RlbSIsInBob25lIiwiaGVpZ2h0Iiwid2lkdGgiLCJoZWFkZXJTdHlsZSIsInAxM25Nb2RlIiwibm9EYXRhVGV4dCIsImRlbGVnYXRlIiwiY3VzdG9tRGF0YSIsImRlcGVuZGVudHMiLCJnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQiLCJ2YXJpYW50Iiwibm9EYXRhIiwiX2V4cG9ydHMiLCJpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24iLCJJbnZpc2libGVUZXh0IiwidG9TdGF0aWMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1kY0NoYXJ0VGVtcGxhdGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblByb3BlcnR5LCBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IEFuYWx5dGljc0Fubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBDb3JlQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdENoYXJ0TWVhc3VyZVJvbGVUeXBlLFxuXHRDaGFydCBhcyBDaGFydFR5cGUsXG5cdENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlLFxuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhUG9pbnQsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0TGV2ZWxUaHJlc2hvbGRzVHlwZSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsIFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7XG5cdG5vdEVxdWFsLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHR0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgQ29udHJvbENvbmZpZ3VyYXRpb24sIE92ZXJmbG93R3JvdXBzQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFpSWNvbixcblx0aXNNZW51QUlPcGVyYXRpb24sXG5cdHR5cGUgQW5ub3RhdGlvbkFjdGlvbixcblx0dHlwZSBCYXNlQWN0aW9uLFxuXHR0eXBlIEN1c3RvbUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0UDEzblR5cGUsIENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxpemF0aW9uQW5kUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0Z2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuXHRnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB0eXBlIHsgU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uSXRlbSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uSXRlbVwiO1xuaW1wb3J0IFRvb2xiYXJTZXBhcmF0b3IgZnJvbSBcInNhcC9tL1Rvb2xiYXJTZXBhcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCB7IERvY2sgfSBmcm9tIFwic2FwL3VpL2NvcmUvUG9wdXBcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2F2ZUV2ZW50LCBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWRjQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgTWRjQ2hhcnRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2NoYXJ0L0l0ZW1cIjtcbmltcG9ydCBQZXJzaXN0ZW5jZVByb3ZpZGVyIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vUGVyc2lzdGVuY2VQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSwgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENoYXJ0QmxvY2sgZnJvbSBcIi4uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwiLi4vTWFjcm9BUElcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgRGVmYXVsdEFjdGlvbkhhbmRsZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvRGVmYXVsdEFjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tIFwiLi9DaGFydEhlbHBlclwiO1xuXG5jb25zdCBtZWFzdXJlUm9sZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzMVwiOiBcImF4aXMxXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczJcIjogXCJheGlzMlwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMzXCI6IFwiYXhpczNcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzNFwiOiBcImF4aXM0XCJcbn07XG50eXBlIEV4dGVuZGVkQWN0aW9uR3JvdXAgPSBBY3Rpb25Hcm91cCAmIHsgbWVudUNvbnRlbnRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQWN0aW9uPiB9O1xudHlwZSBDaGFydFBheWxvYWQgPSB7XG5cdGNoYXJ0Q29udGV4dFBhdGg6IHN0cmluZztcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmc7XG59O1xudHlwZSBDaGFydERlbGVnYXRlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBheWxvYWQ6IENoYXJ0UGF5bG9hZDtcbn07XG5leHBvcnQgdHlwZSBBY3Rpb25PckFjdGlvbkdyb3VwID0gUmVjb3JkPHN0cmluZywgQWN0aW9uIHwgRXh0ZW5kZWRBY3Rpb25Hcm91cD47XG5leHBvcnQgdHlwZSBDdXN0b21BbmRBY3Rpb24gPSBDdXN0b21BY3Rpb24gJiAoQWN0aW9uIHwgQWN0aW9uR3JvdXApO1xuZXhwb3J0IHR5cGUgQ3VzdG9tVG9vbGJhck1lbnVBY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dmlzaWJsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0dXNlRGVmYXVsdEFjdGlvbk9ubHk/OiBib29sZWFuO1xuXHRidXR0b25Nb2RlPzogc3RyaW5nO1xuXHRkZWZhdWx0QWN0aW9uPzogc3RyaW5nO1xuXHRhY3Rpb25zPzogQ3VzdG9tQWN0aW9uO1xuXHRwcmlvcml0eT86IE92ZXJmbG93VG9vbGJhclByaW9yaXR5O1xuXHRncm91cD86IG51bWJlcjtcblx0b3ZlcmZsb3dHcm91cD86IG51bWJlcjtcbn07XG5cbmVudW0gcGVyc29uYWxpemF0aW9uVmFsdWVzIHtcblx0U29ydCA9IFwiU29ydFwiLFxuXHRUeXBlID0gXCJUeXBlXCIsXG5cdEl0ZW0gPSBcIkl0ZW1cIixcblx0RmlsdGVyID0gXCJGaWx0ZXJcIlxufVxuXG5leHBvcnQgdHlwZSBNZWFzdXJlVHlwZSA9IHtcblx0aWQ/OiBzdHJpbmc7XG5cdGtleT86IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRkYXRhUG9pbnQ/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIERpbWVuc2lvblR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tbWFuZEFjdGlvbiA9IHtcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dDtcblx0b25FeGVjdXRlQWN0aW9uOiBzdHJpbmc7XG5cdG9uRXhlY3V0ZUlCTj86IHN0cmluZztcblx0b25FeGVjdXRlTWFuaWZlc3Q6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcbn07XG5cbnR5cGUgVG9vbEJhckFjdGlvbiA9IHtcblx0dW5pdHRlc3RpZDogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0YXJpYUhhc1BvcHVwPzogc3RyaW5nO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHZpc2libGU6IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydEN1c3RvbURhdGEgPSB7XG5cdHRhcmdldENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRlbnRpdHlUeXBlOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogc3RyaW5nO1xuXHRzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nO1xuXHRjdXN0b21BZ2c6IG9iamVjdDtcblx0dHJhbnNBZ2c6IG9iamVjdDtcblx0YXBwbHlTdXBwb3J0ZWQ6IG9iamVjdDtcblx0dml6UHJvcGVydGllczogb2JqZWN0O1xuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IG9iamVjdDtcblx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlPzogb2JqZWN0O1xuXHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlPzogb2JqZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDb250ZXh0T2JqZWN0UGF0aCA9IENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50O1xuXG50eXBlIEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdGtleTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdF9fbm9XcmFwOiBib29sZWFuO1xuXHRwcmVzczogc3RyaW5nIHwgbnVsbDtcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW47XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHBvc2l0aW9uPzogb2JqZWN0O1xuXHRtZW51Pzogc3RyaW5nW107XG5cdGdyb3VwPzogbnVtYmVyO1xuXHRvdmVyZmxvd0dyb3VwPzogbnVtYmVyO1xufTtcblxudHlwZSBUb29sYmFyQWN0aW9uID0gTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udHJvbFBhdGg6IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0bGV0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGxldCB2aXN1YWxpemF0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG5cdGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5WaXN1YWxpemF0aW9ucztcblx0fSBlbHNlIGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5QcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucztcblx0fVxuXHRpZiAodmlzdWFsaXphdGlvbnM/Lmxlbmd0aCAmJiAhY2hlY2tDaGFydEV4aXN0cyh2aXN1YWxpemF0aW9ucywgY29udHJvbFBhdGgpKSB7XG5cdFx0dmlzdWFsaXphdGlvblBhdGggPSBcIlwiO1xuXHR9XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiB2aXN1YWxpemF0aW9uUGF0aCBpcyBtaXNzaW5nIG9yIHZpc3VhbGl6YXRpb25QYXRoIGlzIG5vdCBmb3VuZCBpbiBjb250cm9sIChpbiBjYXNlIG9mIFByZXNlbnRhdGlvblZhcmlhbnQpXG5cdGlmICghdmlzdWFsaXphdGlvblBhdGgpIHtcblx0XHR2aXN1YWxpemF0aW9uUGF0aCA9IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBjaGFydEJsb2NrLnVzZUNvbmRlbnNlZExheW91dCxcblx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWUsXG5cdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb246IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkRlZmluaXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBjaGVja0NoYXJ0RXhpc3RzKHZpc3VhbGl6YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuIHZpc3VhbGl6YXRpb25zLnNvbWUoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb25QYXRoPy5pbmNsdWRlcyh2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aCkpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgdG8gZ2V0IGRldGFpbHMgV1JUIGFjdGlvbihzKSBzaG93biBpbiB0aGUgY2hhcnQncyB0b29sYmFyLlxuICogQHBhcmFtIGNoYXJ0QmxvY2sgQ2hhcnQgYmxvY2sgcHJvcGVydGllc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFZpc3VhbGl6YXRpb24gcGF0aFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIHRoZSByZXF1aXJlZCBhY3Rpb24ocykgZGV0YWlsc1xuICovXG5mdW5jdGlvbiBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgb2JqZWN0PiB7XG5cdGNvbnN0IGV4dHJhUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0Y29uc3QgYWN0aW9uT3ZlcmZsb3dHcm91cHM6IE92ZXJmbG93R3JvdXBzQ29uZmlndXJhdGlvbiA9IHt9O1xuXG5cdGlmIChjaGFydEJsb2NrLmFjdGlvbnMpIHtcblx0XHRPYmplY3QudmFsdWVzKGNoYXJ0QmxvY2suYWN0aW9ucyk/LmZvckVhY2goKGFjdGlvbjogQWN0aW9uIHwgQWN0aW9uR3JvdXApID0+IHtcblx0XHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbkdyb3VwPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uR3JvdXBcIikpIHtcblx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb24ua2V5XSA9IGdldEFjdGlvblByb3BlcnRpZXMoXG5cdFx0XHRcdFx0YWN0aW9uLmtleSxcblx0XHRcdFx0XHRhY3Rpb24udGV4dCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiBhY3Rpb24ucGxhY2VtZW50LFxuXHRcdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhY3Rpb24uYWN0aW9ucy5tYXAoKF8sIGluZGV4KSA9PiBhY3Rpb24ua2V5ICsgXCJfTWVudV9cIiArIGluZGV4KSxcblx0XHRcdFx0XHRhY3Rpb24uZ3JvdXAsXG5cdFx0XHRcdFx0YWN0aW9uLm92ZXJmbG93R3JvdXBcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhY3Rpb24uYWN0aW9ucz8uZm9yRWFjaCgoYWN0OiBBY3Rpb24sIGluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25LZXkgPSBhY3Rpb24ua2V5LmNvbmNhdChcIl9NZW51X1wiLCBpbmRleCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb25LZXldID0gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGFjdGlvbktleSxcblx0XHRcdFx0XHRcdGFjdC50ZXh0LFxuXHRcdFx0XHRcdFx0YWN0LnByZXNzLFxuXHRcdFx0XHRcdFx0ISFhY3QucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3QuZW5hYmxlZCA9PT0gbnVsbCB8fCBhY3QuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFjdC5lbmFibGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLnByZXNzLFxuXHRcdFx0XHRcdCEhYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID09PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkID09IHVuZGVmaW5lZCA/IHRydWUgOiBhY3Rpb24uZW5hYmxlZCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IGFjdGlvbi5wbGFjZW1lbnQsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGFjdGlvbi5hbmNob3Jcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRhY3Rpb24uZ3JvdXAsXG5cdFx0XHRcdFx0YWN0aW9uLm92ZXJmbG93R3JvdXBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoY2hhcnRCbG9jay5hY3Rpb25PdmVyZmxvd0dyb3Vwcykge1xuXHRcdE9iamVjdC52YWx1ZXMoY2hhcnRCbG9jay5hY3Rpb25PdmVyZmxvd0dyb3Vwcyk/LmZvckVhY2goKG92ZXJmbG93R3JvdXApID0+IHtcblx0XHRcdGFjdGlvbk92ZXJmbG93R3JvdXBzW292ZXJmbG93R3JvdXAub3ZlcmZsb3dHcm91cC50b1N0cmluZygpXSA9IHsgc2hvd1NlcGFyYXRvcjogb3ZlcmZsb3dHcm91cC5zaG93U2VwYXJhdG9yID8/IGZhbHNlIH07XG5cdFx0fSk7XG5cdH1cblx0aWYgKHZpc3VhbGl6YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suYWN0aW9ucykge1xuXHRcdGV4dHJhUGFyYW1zW3Zpc3VhbGl6YXRpb25QYXRoXSA9IHtcblx0XHRcdGFjdGlvbnM6IGN1c3RvbUFjdGlvbnMsXG5cdFx0XHRvdmVyZmxvd0dyb3VwczogYWN0aW9uT3ZlcmZsb3dHcm91cHNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGV4dHJhUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRrZXk6IHN0cmluZyxcblx0dGV4dDogc3RyaW5nLFxuXHRwcmVzczogc3RyaW5nIHwgbnVsbCxcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW4sXG5cdGVuYWJsZWQ6IGJvb2xlYW4sXG5cdHBvc2l0aW9uPzogb2JqZWN0LFxuXHRtZW51Pzogc3RyaW5nW10sXG5cdGdyb3VwPzogbnVtYmVyLFxuXHRvdmVyZmxvd0dyb3VwPzogbnVtYmVyXG4pOiBBY3Rpb25Qcm9wZXJ0aWVzIHtcblx0Y29uc3QgYWN0aW9uUHJvcGVydGllczogQWN0aW9uUHJvcGVydGllcyA9IHtcblx0XHRrZXksXG5cdFx0dGV4dCxcblx0XHRfX25vV3JhcDogdHJ1ZSxcblx0XHRwcmVzcyxcblx0XHRyZXF1aXJlc1NlbGVjdGlvbixcblx0XHRlbmFibGVkLFxuXHRcdGdyb3VwLFxuXHRcdG92ZXJmbG93R3JvdXBcblx0fTtcblxuXHRpZiAocG9zaXRpb24pIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLnBvc2l0aW9uID0gcG9zaXRpb247XG5cdH1cblx0aWYgKG1lbnUpIHtcblx0XHRhY3Rpb25Qcm9wZXJ0aWVzLm1lbnUgPSBtZW51O1xuXHR9XG5cblx0cmV0dXJuIGFjdGlvblByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGE6IG9iamVjdCB8IEJhc2VBY3Rpb25bXSB8IEN1c3RvbUFjdGlvbik6IENvbnRleHQge1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt1aWQoKX1gO1xuXHRjb25zdCBhY3Rpb25zTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdGFjdGlvbnNNb2RlbC5zZXRQcm9wZXJ0eShjb250ZXh0UGF0aCwgZGF0YSk7XG5cdHJldHVybiBhY3Rpb25zTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoY29udGV4dFBhdGgpITtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ29udGV4dCB7XG5cdGNvbnN0IGNoYXJ0QW5ub3RhdGlvblBhdGggPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBnZXRBYnNvbHV0ZVBhdGggaW4gY29udmVydGVyQ29udGV4dCByZXR1cm5zIFwiL1NhbGVzT3JkZXJNYW5hZ2UvX0l0ZW0vX0l0ZW0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLnYxLkNoYXJ0XCIgYXMgYW5ub3RhdGlvblBhdGhcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjaGFydEFubm90YXRpb25QYXRoXG5cdFx0LmZpbHRlcihmdW5jdGlvbiAoaXRlbTogc3RyaW5nLCBwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGNoYXJ0QW5ub3RhdGlvblBhdGguaW5kZXhPZihpdGVtKSA9PSBwb3M7XG5cdFx0fSlcblx0XHQudG9TdHJpbmcoKVxuXHRcdC5yZXBsYWNlQWxsKFwiLFwiLCBcIi9cIik7XG5cdGNvbnN0IG9DaGFydCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxDaGFydFR5cGU+KFxuXHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhbm5vdGF0aW9uUGF0aCkhLFxuXHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0KS50YXJnZXRPYmplY3Q7XG5cdGxldCBtZWFzdXJlczogTWVhc3VyZVR5cGVbXSA9IFtdO1xuXHRjb25zdCBhbm5vUGF0aCA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IGNoYXJ0TWVhc3VyZXMgPSBvQ2hhcnQ/Lk1lYXN1cmVzID8gb0NoYXJ0Lk1lYXN1cmVzIDogW107XG5cdGNvbnN0IGNoYXJ0RHluYW1pY01lYXN1cmVzID0gb0NoYXJ0Py5EeW5hbWljTWVhc3VyZXMgPyBvQ2hhcnQuRHluYW1pY01lYXN1cmVzIDogW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBhbm5vUGF0aC5yZXBsYWNlKC9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuKENoYXJ0fFByZXNlbnRhdGlvblZhcmlhbnR8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkuKi8sIFwiXCIpO1xuXHRjb25zdCB0cmFuc0FnZ3JlZ2F0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnRyYW5zQWdnIGFzIFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlPjtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY3VzdG9tQWdnIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuXHQvLyBpbnRpbWF0ZSB0aGUgdXNlciBpZiB0aGVyZSBpcyBBZ2dyZWdhdGVQcm9wZXJ0eSBjb25maWd1cmVkIHdpdGggbm8gRHluYW1pY01lYXN1cmVzLCBidXQgdGhlcmUgYXJlIG1lYXN1cmVzIHdpdGggQWdncmVnYXRlZFByb3BlcnRpZXNcblx0aWYgKFxuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmXG5cdFx0IWNoYXJ0RHluYW1pY01lYXN1cmVzICYmXG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXNcblx0KSB7XG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcIlRoZSB0cmFuc2Zvcm1hdGlvbmFsIGFnZ3JlZ2F0ZSBtZWFzdXJlcyBhcmUgY29uZmlndXJlZCBhcyBDaGFydC5NZWFzdXJlcyBidXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuRHluYW1pY01lYXN1cmVzIGluc3RlYWQuIFBsZWFzZSBjaGVjayB0aGUgU0FQIEhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgY29ycmVjdCB0aGUgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUgPSBjaGFydE1lYXN1cmVzLnNvbWUoKG9DaGFydE1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0Y29uc3Qgb0N1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgb0NoYXJ0TWVhc3VyZSk7XG5cdFx0cmV0dXJuICEhb0N1c3RvbUFnZ01lYXN1cmU7XG5cdH0pO1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgIWNoYXJ0RHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgIWlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGNvbmZpZ3VyZSBEeW5hbWljTWVhc3VyZXMgZm9yIHRoZSBjaGFydFwiKTtcblx0fVxuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkgJiYgb0NoYXJ0KSB7XG5cdFx0Zm9yIChjb25zdCBkeW5hbWljTWVhc3VyZSBvZiBjaGFydER5bmFtaWNNZWFzdXJlcykge1xuXHRcdFx0bWVhc3VyZXMgPSBnZXREeW5hbWljTWVhc3VyZXMobWVhc3VyZXMsIGR5bmFtaWNNZWFzdXJlLCBlbnRpdHlTZXRQYXRoLCBvQ2hhcnQsIGNoYXJ0QmxvY2spO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGNoYXJ0TWVhc3VyZSBvZiBjaGFydE1lYXN1cmVzKSB7XG5cdFx0Y29uc3Qga2V5ID0gY2hhcnRNZWFzdXJlLnZhbHVlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ01lYXN1cmUgPSBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9ucywgY2hhcnRNZWFzdXJlKTtcblx0XHRjb25zdCBtZWFzdXJlVHlwZTogTWVhc3VyZVR5cGUgPSB7fTtcblx0XHRpZiAoY3VzdG9tQWdnTWVhc3VyZSkge1xuXHRcdFx0bWVhc3VyZXMgPSBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZSwga2V5KTtcblx0XHRcdC8vaWYgdGhlcmUgaXMgbmVpdGhlciBhZ2dyZWdhdGVkUHJvcGVydHkgbm9yIG1lYXN1cmVzIHBvaW50aW5nIHRvIGN1c3RvbUFnZ3JlZ2F0ZXMsIGJ1dCB3ZSBoYXZlIG5vcm1hbCBtZWFzdXJlcy4gTm93IGNoZWNrIGlmIHRoZXNlIG1lYXN1cmVzIGFyZSBwYXJ0IG9mIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIE9ialxuXHRcdH0gZWxzZSBpZiAoIWNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmIHRyYW5zQWdncmVnYXRpb25zW2tleV0pIHtcblx0XHRcdG1lYXN1cmVzID0gc2V0VHJhbnNBZ2dNZWFzdXJlKG1lYXN1cmVzLCBtZWFzdXJlVHlwZSwgdHJhbnNBZ2dyZWdhdGlvbnMsIGtleSk7XG5cdFx0fVxuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnRCbG9jay5fY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIG1lYXN1cmVUeXBlLCBjaGFydEJsb2NrKTtcblx0fVxuXHRjb25zdCBtZWFzdXJlc01vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lYXN1cmVzKTtcblx0KG1lYXN1cmVzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0cmV0dXJuIG1lYXN1cmVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xufVxuXG5mdW5jdGlvbiBzZXRDdXN0b21BZ2dNZWFzdXJlKG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLCBtZWFzdXJlOiBNZWFzdXJlVHlwZSwgY3VzdG9tQWdnTWVhc3VyZTogTWVhc3VyZVR5cGUsIGtleTogc3RyaW5nKTogTWVhc3VyZVR5cGVbXSB7XG5cdGlmIChrZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBNZWFzdXJlOiAke2tleX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHR9XG5cdG1lYXN1cmUua2V5ID0gY3VzdG9tQWdnTWVhc3VyZS52YWx1ZTtcblx0bWVhc3VyZS5yb2xlID0gXCJheGlzMVwiO1xuXHRtZWFzdXJlLmxhYmVsID0gY3VzdG9tQWdnTWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBjdXN0b21BZ2dNZWFzdXJlLnZhbHVlO1xuXHRtZWFzdXJlcy5wdXNoKG1lYXN1cmUpO1xuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIHNldFRyYW5zQWdnTWVhc3VyZShcblx0bWVhc3VyZXM6IE1lYXN1cmVUeXBlW10sXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHR0cmFuc0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGU+LFxuXHRrZXk6IHN0cmluZ1xuKTogTWVhc3VyZVR5cGVbXSB7XG5cdGNvbnN0IHRyYW5zQWdnTWVhc3VyZSA9IHRyYW5zQWdncmVnYXRpb25zW2tleV07XG5cdG1lYXN1cmUua2V5ID0gdHJhbnNBZ2dNZWFzdXJlLm5hbWU7XG5cdG1lYXN1cmUucm9sZSA9IFwiYXhpczFcIjtcblx0bWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBrZXk7XG5cdG1lYXN1cmUuYWdncmVnYXRpb25NZXRob2QgPSB0cmFuc0FnZ01lYXN1cmUuYWdncmVnYXRpb25NZXRob2Q7XG5cdG1lYXN1cmUubGFiZWwgPSB0cmFuc0FnZ01lYXN1cmUubGFiZWwgfHwgbWVhc3VyZS5sYWJlbDtcblx0bWVhc3VyZXMucHVzaChtZWFzdXJlKTtcblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljTWVhc3VyZXMoXG5cdG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLFxuXHRjaGFydER5bmFtaWNNZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRjaGFydDogQ2hhcnRUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBNZWFzdXJlVHlwZVtdIHtcblx0Y29uc3Qga2V5ID0gY2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZSB8fCBcIlwiO1xuXHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIGtleSkgYXMgQ29udGV4dCxcblx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gTWVhc3VyZTogJHtrZXl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHQvLyBjaGVjayBpZiB0aGUgYW5ub3RhdGlvbiBwYXRoIGlzIHdyb25nXG5cdH0gZWxzZSBpZiAoIWFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgdGhlIHJpZ2h0IEFubm90YXRpb25QYXRoIHRvIHRoZSBEeW5hbWljIE1lYXN1cmUgJHtjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlfWApO1xuXHRcdC8vIGNoZWNrIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIEBcblx0fSBlbHNlIGlmIChjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlPy5zdGFydHNXaXRoKGBAJHtBbmFseXRpY3NBbm5vdGF0aW9uVGVybXMuQWdncmVnYXRlZFByb3BlcnR5fWApID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSB0aGUgcmlnaHQgQW5ub3RhdGlvblBhdGggdG8gdGhlIER5bmFtaWMgTWVhc3VyZSAke2NoYXJ0RHluYW1pY01lYXN1cmUudmFsdWV9YCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gY2hlY2sgaWYgQWdncmVnYXRlZFByb3BlcnR5IGlzIGRlZmluZWQgaW4gZ2l2ZW4gRHluYW1pY01lYXN1cmVcblx0XHRjb25zdCBkeW5hbWljTWVhc3VyZTogTWVhc3VyZVR5cGUgPSB7XG5cdFx0XHRrZXk6IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5OYW1lLnRvU3RyaW5nKCksXG5cdFx0XHRyb2xlOiBcImF4aXMxXCJcblx0XHR9O1xuXHRcdGR5bmFtaWNNZWFzdXJlLnByb3BlcnR5UGF0aCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRkeW5hbWljTWVhc3VyZS5hZ2dyZWdhdGlvbk1ldGhvZCA9IGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGlvbk1ldGhvZC50b1N0cmluZygpO1xuXHRcdGR5bmFtaWNNZWFzdXJlLmxhYmVsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoXG5cdFx0XHRhZ2dyZWdhdGVkUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdFx0YWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRcdFwiXCJcblx0XHQpO1xuXHRcdHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoY2hhcnQuTWVhc3VyZUF0dHJpYnV0ZXMsIGVudGl0eVNldFBhdGgsIGR5bmFtaWNNZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHRtZWFzdXJlcy5wdXNoKGR5bmFtaWNNZWFzdXJlKTtcblx0fVxuXHRyZXR1cm4gbWVhc3VyZXM7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFnZ01lYXN1cmUoY3VzdG9tQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZSB8IHVuZGVmaW5lZD4sIG1lYXN1cmU6IE1lYXN1cmVUeXBlKTogTWVhc3VyZVR5cGUgfCBudWxsIHtcblx0aWYgKG1lYXN1cmUudmFsdWUgJiYgY3VzdG9tQWdncmVnYXRpb25zW21lYXN1cmUudmFsdWVdKSB7XG5cdFx0bWVhc3VyZS5sYWJlbCA9IGN1c3RvbUFnZ3JlZ2F0aW9uc1ttZWFzdXJlLnZhbHVlXT8ubGFiZWw7XG5cdFx0cmV0dXJuIG1lYXN1cmU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMoXG5cdG1lYXN1cmVBdHRyaWJ1dGVzOiBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlW10sXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRpZiAobWVhc3VyZUF0dHJpYnV0ZXM/Lmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgbWVhc3VyZUF0dHJpYnV0ZSBvZiBtZWFzdXJlQXR0cmlidXRlcykge1xuXHRcdFx0X3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShtZWFzdXJlQXR0cmlidXRlLCBlbnRpdHlTZXRQYXRoLCBtZWFzdXJlLCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gX3NldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZShcblx0bWVhc3VyZUF0dHJpYnV0ZTogQ2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGNvbnN0IHBhdGggPSBtZWFzdXJlQXR0cmlidXRlLkR5bmFtaWNNZWFzdXJlID8gbWVhc3VyZUF0dHJpYnV0ZT8uRHluYW1pY01lYXN1cmU/LnZhbHVlIDogbWVhc3VyZUF0dHJpYnV0ZT8uTWVhc3VyZT8udmFsdWU7XG5cdGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQgPSBtZWFzdXJlQXR0cmlidXRlLkRhdGFQb2ludCA/IG1lYXN1cmVBdHRyaWJ1dGU/LkRhdGFQb2ludD8udmFsdWUgOiBudWxsO1xuXHRjb25zdCByb2xlID0gbWVhc3VyZUF0dHJpYnV0ZS5Sb2xlO1xuXHRjb25zdCBkYXRhUG9pbnQ6IERhdGFQb2ludCB8IHVuZGVmaW5lZCA9IG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnRcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhUG9pbnQ+KFxuXHRcdFx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZW50aXR5U2V0UGF0aCArIG1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQpIGFzIENvbnRleHQsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2NvbnRleHRcblx0XHQgICkudGFyZ2V0T2JqZWN0XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGlmIChtZWFzdXJlLmtleSA9PT0gcGF0aCkge1xuXHRcdHNldE1lYXN1cmVSb2xlKG1lYXN1cmUsIHJvbGUgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPENoYXJ0TWVhc3VyZVJvbGVUeXBlPik7XG5cdFx0Ly9zdGlsbCB0byBhZGQgZGF0YSBwb2ludCwgYnV0IFVJNSBDaGFydCBBUEkgaXMgbWlzc2luZ1xuXHRcdHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZSwgZGF0YVBvaW50KTtcblx0fVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgZGF0YSBwb2ludCBhcyBhIEpTT04gb2JqZWN0LlxuICogQHBhcmFtIG9EYXRhUG9pbnRBbm5vXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGpzb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURhdGFQb2ludFByb3BlcnR5KG9EYXRhUG9pbnRBbm5vOiBEYXRhUG9pbnQpOiB7XG5cdHRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRmb3JlQ2FzdFZhbHVlPzogc3RyaW5nO1xuXHRjcml0aWNhbGl0eT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSB7XG5cdGNvbnN0IG9EYXRhUG9pbnQ6IHsgdGFyZ2V0VmFsdWU/OiBzdHJpbmc7IGZvcmVDYXN0VmFsdWU/OiBzdHJpbmc7IGNyaXRpY2FsaXR5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSA9IHt9O1xuXG5cdGlmIChvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZSkge1xuXHRcdG9EYXRhUG9pbnQudGFyZ2V0VmFsdWUgPSBvRGF0YVBvaW50QW5uby5UYXJnZXRWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGlmIChvRGF0YVBvaW50QW5uby5Gb3JlY2FzdFZhbHVlKSB7XG5cdFx0b0RhdGFQb2ludC5mb3JlQ2FzdFZhbHVlID0gb0RhdGFQb2ludEFubm8uRm9yZWNhc3RWYWx1ZS4kUGF0aDtcblx0fVxuXG5cdGxldCBvQ3JpdGljYWxpdHkgPSBudWxsO1xuXHRpZiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpIHtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkpICYmIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5LnBhdGgpIHtcblx0XHRcdC8vd2lsbCBiZSBhbiBhZ2dyZWdhdGVkIHByb3BlcnR5IG9yIGN1c3RvbSBhZ2dyZWdhdGVcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0Q2FsY3VsYXRlZDogb0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkucGF0aFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRTdGF0aWM6IChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eSBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08Q3JpdGljYWxpdHlUeXBlPikuJEVudW1NZW1iZXIucmVwbGFjZShcblx0XHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZS9cIixcblx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdClcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pIHtcblx0XHRjb25zdCBvVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0gPSB7fTtcblx0XHRjb25zdCBiQ29uc3RhbnQgPSBidWlsZFRocmVzaG9sZHMob1RocmVzaG9sZHMsIG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdFx0aWYgKGJDb25zdGFudCkge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHRDb25zdGFudFRocmVzaG9sZHM6IG9UaHJlc2hvbGRzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdER5bmFtaWNUaHJlc2hvbGRzOiBvVGhyZXNob2xkc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRpZiAob0NyaXRpY2FsaXR5KSB7XG5cdFx0b0RhdGFQb2ludC5jcml0aWNhbGl0eSA9IG9Dcml0aWNhbGl0eTtcblx0fVxuXG5cdHJldHVybiBvRGF0YVBvaW50O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB0aHJlc2hvbGRzIGFyZSBkeW5hbWljIG9yIGNvbnN0YW50LlxuICogQHBhcmFtIHRocmVzaG9sZHMgVGhlIHRocmVzaG9sZCBza2VsZXRvblxuICogQHBhcmFtIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24gVGhlIFVJLkRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGhyZXNob2xkIHNob3VsZCBiZSBzdXBwbGllZCBhcyBDb25zdGFudFRocmVzaG9sZHMsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgdGhyZXNob2xkIHNob3VsZFxuICogYmUgc3VwcGxpZWQgYXMgRHluYW1pY1RocmVzaG9sZHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVGhyZXNob2xkcyhcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiBib29sZWFuIHtcblx0Y29uc3Qga2V5cyA9IFtcblx0XHRcIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlTG93VmFsdWVcIixcblx0XHRcIlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVwiXG5cdF07XG5cdHRocmVzaG9sZHMuSW1wcm92ZW1lbnREaXJlY3Rpb24gPSAoXG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbi5JbXByb3ZlbWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIE1ldGFNb2RlbEVudW08SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlPlxuXHQpPy4kRW51bU1lbWJlci5yZXBsYWNlKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1wiLCBcIlwiKTtcblxuXHRjb25zdCBkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0gPSB7XG5cdFx0b25lU3VwcGxpZWQ6IGZhbHNlLFxuXHRcdHVzZWRNZWFzdXJlczogW11cblx0XHQvLyBjb21iaW5hdGlvbiB0byBjaGVjayB3aGV0aGVyIGF0IGxlYXN0IG9uZSBpcyBzdXBwbGllZFxuXHR9O1xuXHRjb25zdCBjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuXHRcdG9uZVN1cHBsaWVkOiBmYWxzZVxuXHRcdC8vIGNvbWJpbmF0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYXQgbGVhc3Qgb25lIGlzIHN1cHBsaWVkXG5cdH07XG5cblx0aW5pdGlhbGlzZVRocmVzaG9sZHMoa2V5cywgZHluYW1pY1RocmVzaG9sZHMsIGNvbnN0YW50VGhyZXNob2xkcywgY3JpdGljYWxpdHlDYWxjdWxhdGlvbik7XG5cdHByb2Nlc3NUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGR5bmFtaWNUaHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXG5cdHJldHVybiAhZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQ7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0ZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkeW5hbWljVGhyZXNob2xkc1trZXldID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbltrZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdXG5cdFx0XHQ/IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXS4kUGF0aFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0ZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQgPSBkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBkeW5hbWljVGhyZXNob2xkc1trZXldO1xuXG5cdFx0aWYgKCFkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdFx0Ly8gb25seSBjb25zaWRlciBpbiBjYXNlIG5vIGR5bmFtaWMgdGhyZXNob2xkIGlzIHN1cHBsaWVkXG5cdFx0XHRjb25zdGFudFRocmVzaG9sZHNba2V5XSA9IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXTtcblx0XHRcdGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCA9IGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCB8fCBjb25zdGFudFRocmVzaG9sZHNba2V5XTtcblx0XHR9IGVsc2UgaWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdGR5bmFtaWNUaHJlc2hvbGRzLnVzZWRNZWFzdXJlcy5wdXNoKGR5bmFtaWNUaHJlc2hvbGRzW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRkeW5hbWljVGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IHVzZWRNZWFzdXJlczogdW5rbm93bltdIH0sXG5cdGNvbnN0YW50VGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXG4pOiB2b2lkIHtcblx0Ly8gZHluYW1pYyBkZWZpbml0aW9uIHNoYWxsIG92ZXJydWxlIGNvbnN0YW50IGRlZmluaXRpb25cblx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0aWYgKGR5bmFtaWNUaHJlc2hvbGRzW2tleV0pIHtcblx0XHRcdFx0dGhyZXNob2xkc1trZXldID0gZHluYW1pY1RocmVzaG9sZHNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyZXNob2xkcy51c2VkTWVhc3VyZXMgPSBkeW5hbWljVGhyZXNob2xkcy51c2VkTWVhc3VyZXM7XG5cdH0gZWxzZSB7XG5cdFx0dGhyZXNob2xkcy5BZ2dyZWdhdGlvbkxldmVscyA9IFtdO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsRm9yVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdGxldCBvQWdncmVnYXRpb25MZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0Ly8gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIHN0YXRpYyB2YWx1ZSBpcyBzdXBwbGllZFxuXHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzLm9uZVN1cHBsaWVkKSB7XG5cdFx0Ly8gYWRkIG9uZSBlbnRyeSBpbiB0aGUgYWdncmVnYXRpb24gbGV2ZWxcblx0XHRvQWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFZpc2libGVEaW1lbnNpb25zOiBudWxsXG5cdFx0fTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBvZiBrZXlzKSB7XG5cdFx0XHRpZiAoY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkxldmVsW3NLZXldID0gY29uc3RhbnRUaHJlc2hvbGRzW3NLZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2gob0FnZ3JlZ2F0aW9uTGV2ZWwpO1xuXHR9XG5cblx0cHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKGtleXMsIHRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24sIG9BZ2dyZWdhdGlvbkxldmVsKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxzRm9yQ29uc3RhbnRUaHJlc2hvbGRzKFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0dGhyZXNob2xkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IEFnZ3JlZ2F0aW9uTGV2ZWxzPzogdW5rbm93bltdIH0sXG5cdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb246IENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlLFxuXHRhZ2dyZWdhdGlvbkxldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG5cdGlmIChjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcyAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbkxldmVsSW5mbyBvZiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLkNvbnN0YW50VGhyZXNob2xkcykge1xuXHRcdFx0Y29uc3QgdmlzaWJsZURpbWVuc2lvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwgPyBbXSA6IG51bGw7XG5cblx0XHRcdGlmICh2aXNpYmxlRGltZW5zaW9ucyAmJiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsICYmIGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvLkFnZ3JlZ2F0aW9uTGV2ZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBvZiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsKSB7XG5cdFx0XHRcdFx0dmlzaWJsZURpbWVuc2lvbnMucHVzaCgocHJvcGVydHlQYXRoIGFzIHVua25vd24gYXMgRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPikuJFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YWdncmVnYXRpb25MZXZlbCA9IHtcblx0XHRcdFx0VmlzaWJsZURpbWVuc2lvbnM6IHZpc2libGVEaW1lbnNpb25zXG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYWdncmVnYXRpb25MZXZlbEluZm9ba2V5IGFzIHVua25vd24gYXMga2V5b2YgTGV2ZWxUaHJlc2hvbGRzVHlwZV07XG5cdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTGV2ZWxba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHM/LnB1c2goYWdncmVnYXRpb25MZXZlbCk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldE1lYXN1cmVEYXRhUG9pbnQobWVhc3VyZTogTWVhc3VyZVR5cGUsIGRhdGFQb2ludDogRGF0YVBvaW50IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChkYXRhUG9pbnQgJiYgZGF0YVBvaW50LlZhbHVlLiRQYXRoID09IG1lYXN1cmUua2V5KSB7XG5cdFx0bWVhc3VyZS5kYXRhUG9pbnQgPSBDaGFydEhlbHBlci5mb3JtYXRKU09OVG9TdHJpbmcoY3JlYXRlRGF0YVBvaW50UHJvcGVydHkoZGF0YVBvaW50KSkgfHwgXCJcIjtcblx0fVxufVxuXG5mdW5jdGlvbiBzZXRNZWFzdXJlUm9sZShtZWFzdXJlOiBNZWFzdXJlVHlwZSwgcm9sZTogTWV0YU1vZGVsRW51bTxDaGFydE1lYXN1cmVSb2xlVHlwZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKHJvbGUgIT0gbnVsbCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcm9sZS4kRW51bU1lbWJlcjtcblx0XHRtZWFzdXJlLnJvbGUgPSBtZWFzdXJlUm9sZVtpbmRleF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCBjaGFydENvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGlmIChjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLm1hcCgoY29tbWFuZEFjdGlvbjogQ29tbWFuZEFjdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbkNvbW1hbmQoY29tbWFuZEFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBlcnNvbmFsaXphdGlvbiBTcGVjaWZpZXMgdGhlIGNoYXJ0IHBlcnNvbmFsaXphdGlvblxuICovXG5cbmZ1bmN0aW9uIGNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMocGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogdm9pZCB7XG5cdGlmIChwZXJzb25hbGl6YXRpb24pIHtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSBcImZhbHNlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gZmFsc2UpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gXCJ0cnVlXCIgfHwgKHBlcnNvbmFsaXphdGlvbiBhcyBib29sZWFuKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdH0gZWxzZSBpZiAodmVyaWZ5VmFsaWRQZXJzb25hbGl6YXRpb24ocGVyc29uYWxpemF0aW9uIGFzIHN0cmluZykgPT09IHRydWUpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gcGVyc29uYWxpemF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgcGVyc29uYWxpemF0aW9uIGlzIHZhbGlkIG9yIG5vdCB2YWxpZFxuICovXG5mdW5jdGlvbiB2ZXJpZnlWYWxpZFBlcnNvbmFsaXphdGlvbihwZXJzb25hbGl6YXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgdmFsaWQgPSB0cnVlO1xuXHRjb25zdCBzcGxpdEFycmF5ID0gcGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgYWNjZXB0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpO1xuXHRzcGxpdEFycmF5LmZvckVhY2goKGFycmF5RWxlbWVudCkgPT4ge1xuXHRcdGlmICghYWNjZXB0ZWRWYWx1ZXMuaW5jbHVkZXMoYXJyYXlFbGVtZW50KSkge1xuXHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IGNoYXJ0QmxvY2sudmFyaWFudE1hbmFnZW1lbnQgPyBjaGFydEJsb2NrLnZhcmlhbnRNYW5hZ2VtZW50IDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udmFyaWFudE1hbmFnZW1lbnQ7XG5cdHJldHVybiBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJOb25lXCIgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB7XG5cdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uO1xuXHRpZiAocGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiVk1cIl0pfVxuXHRcdFx0XHRcdGZvcj17W2NoYXJ0QmxvY2suX2Jsb2NrSWQhXX1cblx0XHRcdFx0XHRzaG93U2V0QXNEZWZhdWx0PXt0cnVlfVxuXHRcdFx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0XHRcdHNlbGVjdD17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlVmFyaWFudFNlbGVjdGVkPy4oZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0c2F2ZT17KGV2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTYXZlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVZhcmlhbnRTYXZlZD8uKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIk5vbmVcIiB8fCB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fSBlbHNlIGlmICghcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0TG9nLndhcm5pbmcoXCJWYXJpYW50IE1hbmFnZW1lbnQgY2Fubm90IGJlIGVuYWJsZWQgd2hlbiBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWRcIik7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldFBlcnNpc3RlbmNlUHJvdmlkZXIoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFBlcnNpc3RlbmNlUHJvdmlkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jaykgPT09IFwiTm9uZVwiKSB7XG5cdFx0cmV0dXJuIDxQZXJzaXN0ZW5jZVByb3ZpZGVyIGlkPXtnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtjaGFydEJsb2NrLl9ibG9ja0lkfSAvPjtcblx0fVxufVxuXG5mdW5jdGlvbiBwdXNoQWN0aW9uQ29tbWFuZChcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0ZGF0YUZpZWxkOiAoTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ICYgeyBJbnZvY2F0aW9uR3JvdXBpbmc6IE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPiB9KSB8IHVuZGVmaW5lZCxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0aWYgKGRhdGFGaWVsZCkge1xuXHRcdGNvbnN0IGNvbW1hbmRBY3Rpb24gPSB7XG5cdFx0XHRhY3Rpb25Db250ZXh0OiBhY3Rpb25Db250ZXh0LFxuXHRcdFx0b25FeGVjdXRlQWN0aW9uOiBDaGFydEhlbHBlci5nZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKFxuXHRcdFx0XHRjaGFydEJsb2NrLl9ibG9ja0lkISxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiXG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKFxuXHRcdFx0XHRkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31gLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGNoYXJ0QmxvY2spLFxuXHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHR9O1xuXHRcdGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zLnB1c2goY29tbWFuZEFjdGlvbik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChjb21tYW5kQWN0aW9uOiBDb21tYW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCBhY3Rpb24gPSBjb21tYW5kQWN0aW9uLmFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGggJiYgY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQgJiYgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pO1xuXHRjb25zdCBpc0JvdW5kUGF0aCA9IENvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkKGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoaXNCb3VuZFBhdGgpIS5nZXRPYmplY3QoKTtcblx0Y29uc3QgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShcblx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRjb250ZXh0OiBjaGFydENvbnRleHRcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBpc0FjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZFxuXHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHQ6IENoYXJ0SGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0aXNCb3VuZCAmJiBpc0JvdW5kLiRJc0JvdW5kLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRjaGFydEJsb2NrLl9jb250ZXh0LFxuXHRcdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcIlwiLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QgfHwgXCJcIlxuXHRcdCAgKTtcblx0bGV0IGlzSUJORW5hYmxlZDtcblx0aWYgKGFjdGlvbi5lbmFibGVkKSB7XG5cdFx0aXNJQk5FbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGlzSUJORW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblxuXHRsZXQgY29tbWFuZEVuYWJsZWQ6IGJvb2xlYW47XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzQWN0aW9uRW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGlzSUJORW5hYmxlZCA/PyBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb21tYW5kRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25Db21tYW5kID0gKFxuXHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRleGVjdXRlPXsoZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50KTogdm9pZCA9PlxuXHRcdFx0XHRjb21tYW5kRXhlY3V0ZShldmVudCwgYWN0aW9uLCBjaGFydEJsb2NrLl9ibG9ja0lkISwgY29tbWFuZEFjdGlvbi5jaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCEsIGRhdGFGaWVsZClcblx0XHRcdH1cblx0XHRcdGVuYWJsZWQ9e2NvbW1hbmRFbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17KGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dCwgY2hhcnRCbG9jaykgYXMgYm9vbGVhbikgPz8gYWN0aW9uLnZpc2libGV9XG5cdFx0XHRjb21tYW5kPXthY3Rpb24uY29tbWFuZH1cblx0XHQvPlxuXHQpO1xuXG5cdGlmIChcblx0XHRhY3Rpb24udHlwZSA9PSBcIkZvckFjdGlvblwiICYmXG5cdFx0KCFpc0JvdW5kIHx8XG5cdFx0XHRpc0JvdW5kLklzQm91bmQgIT09IHRydWUgfHxcblx0XHRcdChhY3Rpb25Db250ZXh0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2BAJHtDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZX1gXSAhPT0gZmFsc2UpXG5cdCkge1xuXHRcdHJldHVybiBhY3Rpb25Db21tYW5kO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29tbWFuZDtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21tYW5kRXhlY3V0ZShcblx0ZXZlbnQ6IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50LFxuXHRhY3Rpb246IHsgSW52b2NhdGlvbkdyb3VwaW5nOiB7ICRFbnVtTWVtYmVyOiBzdHJpbmcgfTsgYWN0aW9uOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaGFuZGxlck1vZHVsZTogc3RyaW5nOyBoYW5kbGVyTWV0aG9kOiBzdHJpbmcgfSxcblx0aWQ6IHN0cmluZyxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbik6IHZvaWQge1xuXHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhldmVudC5nZXRTb3VyY2UoKSk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3Py5nZXRDb250cm9sbGVyKCk7XG5cblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGNvbnN0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPVxuXHRcdFx0XHRhY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdGFjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0OiBcIklzb2xhdGVkXCI7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBzSW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRjb250cm9sSWQ6IGlkLFxuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZ1xuXHRcdFx0fTtcblx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0fTtcblx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZykge1xuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeSgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZyk7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SXRlbXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y29uc3QgZGltZW5zaW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBtZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAoY2hhcnRCbG9jay5fY2hhcnQuRGltZW5zaW9ucykge1xuXHRcdFx0Q2hhcnRIZWxwZXIuZm9ybWF0RGltZW5zaW9ucyhjaGFydEJsb2NrLl9jaGFydENvbnRleHQpXG5cdFx0XHRcdC5nZXRPYmplY3QoKVxuXHRcdFx0XHQuZm9yRWFjaCgoZGltZW5zaW9uOiBEaW1lbnNpb25UeXBlKSA9PiB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uLmlkID0gZ2VuZXJhdGUoW2NoYXJ0QmxvY2suaWQsIFwiZGltZW5zaW9uXCIsIGRpbWVuc2lvbi5rZXldKTtcblx0XHRcdFx0XHRkaW1lbnNpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRnZXRJdGVtKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aWQ6IGRpbWVuc2lvbi5pZCxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IGRpbWVuc2lvbi5rZXksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRpbWVuc2lvbi5sYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRyb2xlOiBkaW1lbnNpb24ucm9sZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIl9mZV9ncm91cGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcdFwiZ3JvdXBhYmxlXCJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGNoYXJ0QmxvY2subWVhc3VyZXMpIHtcblx0XHRcdENoYXJ0SGVscGVyLmZvcm1hdE1lYXN1cmVzKGNoYXJ0QmxvY2subWVhc3VyZXMpLmZvckVhY2goKG1lYXN1cmU6IE1lYXN1cmVUeXBlKSA9PiB7XG5cdFx0XHRcdG1lYXN1cmUuaWQgPSBnZW5lcmF0ZShbY2hhcnRCbG9jay5pZCwgXCJtZWFzdXJlXCIsIG1lYXN1cmUua2V5XSk7XG5cdFx0XHRcdG1lYXN1cmVzLnB1c2goXG5cdFx0XHRcdFx0Z2V0SXRlbShcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWQ6IG1lYXN1cmUuaWQsXG5cdFx0XHRcdFx0XHRcdGtleTogbWVhc3VyZS5rZXksXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBtZWFzdXJlLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHRyb2xlOiBtZWFzdXJlLnJvbGVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIl9mZV9hZ2dyZWdhdGFibGVfXCIsXG5cdFx0XHRcdFx0XHRcImFnZ3JlZ2F0YWJsZVwiXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChkaW1lbnNpb25zLmxlbmd0aCAmJiBtZWFzdXJlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBkaW1lbnNpb25zLmNvbmNhdChtZWFzdXJlcyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGl0ZW06IE1lYXN1cmVUeXBlIHwgRGltZW5zaW9uVHlwZSwgcHJlZml4OiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0PE1kY0NoYXJ0SXRlbVxuXHRcdFx0aWQ9e2l0ZW0uaWR9XG5cdFx0XHRwcm9wZXJ0eUtleT17cHJlZml4ICsgaXRlbS5rZXl9XG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0bGFiZWw9e3Jlc29sdmVCaW5kaW5nU3RyaW5nKGl0ZW0ubGFiZWwgYXMgc3RyaW5nLCBcInN0cmluZ1wiKX1cblx0XHRcdHJvbGU9e2l0ZW0ucm9sZX1cblx0XHQvPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRUb29sYmFyQWN0aW9ucyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbltdIHtcblx0Y29uc3QgYWN0aW9ucyA9IGdldEFjdGlvbnMoY2hhcnRCbG9jayk7XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGdldFNlZ21lbnRlZEJ1dHRvbihjaGFydEJsb2NrKSk7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNFbmFibGVkKSB7XG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0Z2V0U3RhbmRhcmRBY3Rpb25zKFxuXHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzRW5hYmxlZCxcblx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0XHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQhLFxuXHRcdFx0XHRjaGFydEJsb2NrXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnMoXG5cdGlzSW5zaWdodHNFbmFibGVkOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzSW5zaWdodHNWaXNpYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlkOiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gdmlzaWJsZT17aXNJbnNpZ2h0c1Zpc2libGV9PlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2lkLCBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNoYXJ0QmxvY2sub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17aXNJbnNpZ2h0c0VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9XCJBbHdheXNPdmVyZmxvd1wiIC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb25bXSB7XG5cdGNvbnN0IGFjdGlvbnMgPSByZW1vdmVNZW51SXRlbXMoY2hhcnRCbG9jay5jaGFydEFjdGlvbnMgPz8gW10pO1xuXHQvLyBBcHBseSBwcmltYXJ5IGFjdGlvbiBvdmVyZmxvdyBwcm90ZWN0aW9uIGJlZm9yZSBwcm9jZXNzaW5nXG5cdGNvbnN0IGFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uID0gQWN0aW9uSGVscGVyLmVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyhhY3Rpb25zKTtcblxuXHRyZXR1cm4gYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb24ubWFwKChhY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLmFubm90YXRpb25QYXRoIHx8IChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIgJiYgIWFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvblwiKSkpIHtcblx0XHRcdC8vIExvYWQgYW5ub3RhdGlvbiBiYXNlZCBhY3Rpb25zXG5cdFx0XHRyZXR1cm4gZ2V0QWN0aW9uKGFjdGlvbiwgY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LCBmYWxzZSwgY2hhcnRCbG9jayk7XG5cdFx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJTZXBhcmF0b3JcIikge1xuXHRcdFx0cmV0dXJuIGdldFNlcGFyYXRvcihhY3Rpb24pO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uLmhhc093blByb3BlcnR5KFwibm9XcmFwXCIpKSB7XG5cdFx0XHQvLyBMb2FkIFhNTCBvciBtYW5pZmVzdCBiYXNlZCBhY3Rpb25zIC8gYWN0aW9uIGdyb3Vwc1xuXHRcdFx0cmV0dXJuIGdldEN1c3RvbUFjdGlvbnMoYWN0aW9uIGFzIEN1c3RvbUFuZEFjdGlvbiwgY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNZW51SXRlbXMoYWN0aW9uczogQmFzZUFjdGlvbltdKTogQmFzZUFjdGlvbltdIHtcblx0Ly8gSWYgYWN0aW9uIGlzIGFscmVhZHkgcGFydCBvZiBtZW51IGluIGFjdGlvbiBncm91cCwgdGhlbiBpdCB3aWxsXG5cdC8vIGJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiBhY3Rpb25zIGxpc3Rcblx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuXHRcdGlmIChhY3Rpb24ubWVudSkge1xuXHRcdFx0YWN0aW9uLm1lbnUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBpZHggPSBhY3Rpb25zLm1hcCgoYWN0KSA9PiBhY3Qua2V5KS5pbmRleE9mKGl0ZW0ua2V5KTtcblx0XHRcdFx0aWYgKGlkeCAhPT0gLTEpIHtcblx0XHRcdFx0XHRhY3Rpb25zLnNwbGljZShpZHgsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFjdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFjdGlvbnMoYWN0aW9uOiBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0Q29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb24ge1xuXHRsZXQgYWN0aW9uRW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkIGFzIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGlmICgoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID8/IGZhbHNlKSAmJiBhY3Rpb24uZW5hYmxlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRhY3Rpb25FbmFibGVkID0gXCJ7PSAle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMX1cIjtcblx0fVxuXHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgdG9vbGJhciBhY3Rpb25zXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgYWN0aW9uLmlkXSksXG5cdFx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBhY3Rpb24udGV4dCA/IGFjdGlvbi50ZXh0IDogXCJcIixcblx0XHRcdFx0YXJpYUhhc1BvcHVwOiB1bmRlZmluZWQsXG5cdFx0XHRcdHByZXNzOiBhY3Rpb24ucHJlc3MgPyBhY3Rpb24ucHJlc3MgOiBcIlwiLFxuXHRcdFx0XHRlbmFibGVkOiBhY3Rpb25FbmFibGVkLFxuXHRcdFx0XHR2aXNpYmxlOiBhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlIDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRmYWxzZSxcblx0XHRcdGNoYXJ0QmxvY2tcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdC8vIExvYWQgYWN0aW9uIGdyb3VwcyAoTWVudSlcblx0XHRyZXR1cm4gZ2V0QWN0aW9uVG9vbGJhck1lbnVBY3Rpb24oXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgYWN0aW9uLmlkXSksXG5cdFx0XHRcdHRleHQ6IGFjdGlvbi50ZXh0LFxuXHRcdFx0XHR2aXNpYmxlOiBhY3Rpb24udmlzaWJsZSxcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk6IERlZmF1bHRBY3Rpb25IYW5kbGVyLmdldFVzZURlZmF1bHRBY3Rpb25Pbmx5KGFjdGlvbiksXG5cdFx0XHRcdGJ1dHRvbk1vZGU6IERlZmF1bHRBY3Rpb25IYW5kbGVyLmdldEJ1dHRvbk1vZGUoYWN0aW9uKSxcblx0XHRcdFx0ZGVmYXVsdEFjdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY3Rpb25zOiBhY3Rpb24sXG5cdFx0XHRcdHByaW9yaXR5OiBhY3Rpb24ucHJpb3JpdHksXG5cdFx0XHRcdGdyb3VwOiBhY3Rpb24uZ3JvdXBcblx0XHRcdH0sXG5cdFx0XHRjaGFydENvbnRleHQsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZyb21NZW51KG1lbnVJdGVtQWN0aW9uOiBDdXN0b21BY3Rpb24sIGNoYXJ0Q29udGV4dDogQ29udGV4dCwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb24ge1xuXHRsZXQgcHJlc3NIYW5kbGVyOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0aWYgKG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0Ly9Bbm5vdGF0aW9uIGJhc2VkIGFjdGlvbiBpcyBwYXNzZWQgYXMgbWVudSBpdGVtIGZvciBtZW51IGJ1dHRvblxuXHRcdHJldHVybiBnZXRBY3Rpb24obWVudUl0ZW1BY3Rpb24sIGNoYXJ0Q29udGV4dCwgdHJ1ZSwgY2hhcnRCbG9jayk7XG5cdH1cblx0aWYgKG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke21lbnVJdGVtQWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9O1xuXHR9IGVsc2UgaWYgKG1lbnVJdGVtQWN0aW9uLm5vV3JhcCA/PyBmYWxzZSkge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IG1lbnVJdGVtQWN0aW9uLmhhbmRsZXJNZXRob2Q/LnNwbGl0KFwiLlwiKVsxXSBhcyBzdHJpbmc7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB7IC4uLkNvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpLmdldENvbnRyb2xsZXIoKSB9IGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRcdFt0ZW1wOiBzdHJpbmddOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKSBjb250cm9sbGVyW2Z1bmN0aW9uTmFtZV0oZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cHJlc3NIYW5kbGVyID0ge1xuXHRcdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpXG5cdFx0XHRcdFx0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHQ/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKTtcblx0XHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIG1lbnVJdGVtQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG1lbnVJdGVtQWN0aW9uLmhhbmRsZXJNZXRob2QsIHsgY29udGV4dHM6IHNlbGVjdGVkQ29udGV4dHMgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiA8TWVudUl0ZW0gdGV4dD17bWVudUl0ZW1BY3Rpb24udGV4dH0gey4uLnByZXNzSGFuZGxlcn0gdmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX0gZW5hYmxlZD17bWVudUl0ZW1BY3Rpb24uZW5hYmxlZH0gLz47XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRwcm9wczogQ3VzdG9tVG9vbGJhck1lbnVBY3Rpb24sXG5cdGNoYXJ0Q29udGV4dDogQ29udGV4dCxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0Y29uc3QgYU1lbnVJdGVtcyA9IChwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKS5tYXAoKGFjdGlvbjogQ3VzdG9tQWN0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1lbnVJdGVtRnJvbU1lbnUoYWN0aW9uLCBjaGFydENvbnRleHQsIGNoYXJ0QmxvY2spO1xuXHR9KTtcblx0Y29uc3QgaXNBSU9wZXJhdGlvbiA9IGlzTWVudUFJT3BlcmF0aW9uKHByb3BzLmFjdGlvbnM/Lm1lbnUgYXMgQ3VzdG9tQWN0aW9uW10pO1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0PE1lbnVCdXR0b25cblx0XHRcdFx0dGV4dD17cHJvcHMudGV4dH1cblx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0aWQ9e3Byb3BzLmlkfVxuXHRcdFx0XHR2aXNpYmxlPXtwcm9wcy52aXNpYmxlfVxuXHRcdFx0XHRlbmFibGVkPXtwcm9wcy5lbmFibGVkfVxuXHRcdFx0XHR1c2VEZWZhdWx0QWN0aW9uT25seT17cHJvcHMudXNlRGVmYXVsdEFjdGlvbk9ubHl9XG5cdFx0XHRcdGJ1dHRvbk1vZGU9e3Byb3BzLmJ1dHRvbk1vZGV9XG5cdFx0XHRcdG1lbnVQb3NpdGlvbj17RG9jay5CZWdpbkJvdHRvbX1cblx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17cHJvcHMuZGVmYXVsdEFjdGlvbiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IFVJNUV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRpY29uPXtpc0FJT3BlcmF0aW9uID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2lzQUlPcGVyYXRpb24gPyBbYCR7Y2hhcnRCbG9jay5nZXRJZCgpfS0tZmU6OkFpQWN0aW9uOjpBcmlhVGV4dGBdIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdG1lbnU6IDxNZW51PnthTWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e3Byb3BzLnByaW9yaXR5fSBncm91cD17cHJvcHMuZ3JvdXB9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb24oYWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGlzTWVudUl0ZW06IGJvb2xlYW4sIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggPz8gXCJcIikhO1xuXHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldE5hdmlnYXRpb25BY3Rpb25zKGFjdGlvbiwgZGF0YUZpZWxkQ29udGV4dCwgaXNNZW51SXRlbSwgY2hhcnRCbG9jayk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRyZXR1cm4gZ2V0QW5ub3RhdGlvbkFjdGlvbnMoY2hhcnRDb250ZXh0LCBhY3Rpb24gYXMgQW5ub3RhdGlvbkFjdGlvbiwgZGF0YUZpZWxkQ29udGV4dCwgaXNNZW51SXRlbSwgY2hhcnRCbG9jayk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiKSB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnU/Lm1hcCgobWVudUFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbihtZW51QWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0PE1lbnVCdXR0b25cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdGlkPXthY3Rpb24ua2V5fVxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHRcdG1lbnVQb3NpdGlvbj17RG9jay5CZWdpbkJvdHRvbX1cblx0XHRcdFx0XHRpY29uPXthY3Rpb24/LmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0YXJpYURlc2NyaWJlZEJ5PXthY3Rpb24/LmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBbYCR7Y2hhcnRCbG9jay5nZXRJZCgpfS0tZmU6OkFpQWN0aW9uOjpBcmlhVGV4dGBdIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VwYXJhdG9yKGFjdGlvbjogQmFzZUFjdGlvbik6IFRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0PFRvb2xiYXJTZXBhcmF0b3I+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyU2VwYXJhdG9yPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbkFjdGlvbnMoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0bGV0IGVuYWJsZWQgPSBcInRydWVcIjtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQ7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdGVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdGFjdGlvbixcblx0XHR7XG5cdFx0XHRpZDogdW5kZWZpbmVkLFxuXHRcdFx0dW5pdHRlc3RpZDogXCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25CdXR0b25BY3Rpb25cIixcblx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRhcmlhSGFzUG9wdXA6IHVuZGVmaW5lZCxcblx0XHRcdHByZXNzOiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKGRhdGFGaWVsZCwgYFxcJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfWAsIGZhbHNlKSEsXG5cdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdH0sXG5cdFx0aXNNZW51SXRlbSxcblx0XHRjaGFydEJsb2NrLFxuXHRcdGRhdGFGaWVsZFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9ucyhcblx0Y2hhcnRDb250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEFubm90YXRpb25BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IFRvb2xiYXJBY3Rpb24ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb24gPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb24pKTtcblx0Y29uc3QgYWN0aW9uT2JqZWN0ID0gYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGlzQm91bmRQYXRoID0gQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChpc0JvdW5kUGF0aCkhLmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIWlzQm91bmQgfHwgaXNCb3VuZC4kSXNCb3VuZCAhPT0gdHJ1ZSB8fCBhY3Rpb25PYmplY3RbYEAke0NvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlfWBdICE9PSBmYWxzZSkge1xuXHRcdGNvbnN0IGVuYWJsZWQgPSBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoYWN0aW9uLCBpc0JvdW5kLCBkYXRhRmllbGQsIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jay5fY29udGV4dCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkgYXMgQ29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgYXJpYUhhc1BvcHVwID0gaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID1cblx0XHRcdGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHx8IFwiXCI7XG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGRhdGFGaWVsZENvbnRleHQpXSksXG5cdFx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogYXJpYUhhc1BvcHVwLFxuXHRcdFx0XHRlbmFibGVkOiBlbmFibGVkLFxuXHRcdFx0XHR2aXNpYmxlOiBnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spXG5cdFx0XHR9LFxuXHRcdFx0aXNNZW51SXRlbSxcblx0XHRcdGNoYXJ0QmxvY2ssXG5cdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0YWN0aW9uOiAoQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbikgJiB7IG5vV3JhcD86IGJvb2xlYW4gfSxcblx0dG9vbGJhckFjdGlvbjogVG9vbEJhckFjdGlvbixcblx0aXNNZW51SXRlbTogYm9vbGVhbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0aWYgKGlzTWVudUl0ZW0pIHtcblx0XHRjb25zdCBwcmVzc0V2ZW50OiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IHtcblx0XHRcdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jay5fYmxvY2tJZCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiB2aWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZD8uTGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZzogYWN0aW9uLmRpc2FibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQ/LkFjdGlvbiBhcyBzdHJpbmcsIHBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZ1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0ICB9O1xuXG5cdFx0cmV0dXJuIDxNZW51SXRlbSB0ZXh0PXt0b29sYmFyQWN0aW9uLmxhYmVsfSB7Li4ucHJlc3NFdmVudH0gZW5hYmxlZD17dG9vbGJhckFjdGlvbi5lbmFibGVkfSB2aXNpYmxlPXt0b29sYmFyQWN0aW9uLnZpc2libGV9IC8+O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBidWlsZEFjdGlvbihhY3Rpb24sIHRvb2xiYXJBY3Rpb24sIGNoYXJ0QmxvY2ssIGRhdGFGaWVsZCwgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRvb2xiYXJBY3Rpb246IFRvb2xCYXJBY3Rpb24sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmdcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dG9vbGJhckFjdGlvbi5pZH1cblx0XHRcdFx0dGV4dD17dG9vbGJhckFjdGlvbi5sYWJlbH1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXt0b29sYmFyQWN0aW9uLmFyaWFIYXNQb3B1cH1cblx0XHRcdFx0ey4uLmdldEFjdGlvblByZXNzKGFjdGlvbiwgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY2hhcnRCbG9jayl9XG5cdFx0XHRcdGVuYWJsZWQ9e3Rvb2xiYXJBY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17dG9vbGJhckFjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRpY29uPXthY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYURlc2NyaWJlZEJ5PXthY3Rpb24/LmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBbYCR7Y2hhcnRCbG9jay5nZXRJZCgpfS0tZmU6OkFpQWN0aW9uOjpBcmlhVGV4dGBdIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmcsXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrXG4pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0gfCB7IFwianN4OmNvbW1hbmRcIjogQ29tbWFuZFByb3BlcnRpZXMgfSB7XG5cdGxldCBhY3Rpb25QcmVzczogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSB7XG5cdFx0cHJlc3M6IFwiXCIgYXMgdW5rbm93biBhcyAoKSA9PiB2b2lkXG5cdH07XG5cblx0aWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0XHR9IGVsc2UgaWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5ub1dyYXAgPT09IHRydWUpIHtcblx0XHRcdGFjdGlvblByZXNzID0gZ2V0Q3VzdG9tQWN0aW9uUHJlc3MoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbik7XG5cdFx0fSBlbHNlIGlmICghYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRhY3Rpb25QcmVzcyA9IGFjdGlvbi5jb21tYW5kXG5cdFx0XHQ/IHsgXCJqc3g6Y29tbWFuZFwiOiBgY21kOiR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9XG5cdFx0XHQ6IGdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kKGFjdGlvbiwgZGF0YUZpZWxkLCBjaGFydEJsb2NrLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9uUHJlc3M7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gYWN0aW9uLmhhbmRsZXJNZXRob2Q/LnNwbGl0KFwiLlwiKVsxXSBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0W21ldGhvZDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0XHRpZiAoY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKSBjb250cm9sbGVyW2Z1bmN0aW9uTmFtZV0oZXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJlc3NXaXRoQW5ub3RhdGlvblBhdGgoYWN0aW9uOiBDdXN0b21BY3Rpb24pOiB7IHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KSA9PiB2b2lkIH0ge1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZXZlbnQuZ2V0U291cmNlKCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXHRcdFx0RlBNSGVscGVyLmFjdGlvbldyYXBwZXIoZXZlbnQsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRjb250ZXh0czogc2VsZWN0ZWRDb250ZXh0c1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0QmxvY2s/OiBDaGFydEJsb2NrLFxuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZ1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IE9wZXJhdGlvbkdyb3VwaW5nVHlwZS5DaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogY2hhcnRCbG9jaz8uX2Jsb2NrSWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGFjdGlvbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24oZGF0YUZpZWxkPy5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uTWFwcGluZykge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IEpTT04uc3RyaW5naWZ5KChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEFubm90YXRpb25BY3Rpb25zRW5hYmxlZChcblx0YWN0aW9uOiBCYXNlQWN0aW9uLFxuXHRpc0JvdW5kOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGNoYXJ0Q29udGV4dDogQ29udGV4dCxcblx0Y29udGV4dDogQ29udGV4dFxuKTogc3RyaW5nIHtcblx0cmV0dXJuIGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0OiBDaGFydEhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQoXG5cdFx0XHRcdGlzQm91bmQgJiYgaXNCb3VuZC4kSXNCb3VuZCxcblx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmcsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdENoYXJ0SGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChjaGFydENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogY2hhcnRDb250ZXh0IH0pLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QgfHwgXCJcIlxuXHRcdCAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudGVkQnV0dG9uKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0bGF5b3V0SW5mb3JtYXRpb249e3tcblx0XHRcdFx0YWdncmVnYXRpb25OYW1lOiBcImVuZFwiLFxuXHRcdFx0XHRhbGlnbm1lbnQ6IFwiRW5kXCJcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSl9XG5cdFx0XHRcdHNlbGVjdGlvbkNoYW5nZT17KGV2ZW50OiBTZWdtZW50ZWRCdXR0b24kU2VsZWN0aW9uQ2hhbmdlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjaGFydEJsb2NrLmZpcmVTZWdtZW50ZWRCdXR0b25QcmVzc2VkPy4oXG5cdFx0XHRcdFx0XHRtZXJnZShldmVudC5nZXRQYXJhbWV0ZXJzKCksIHsgc2VsZWN0ZWRLZXk6IGV2ZW50LmdldFNvdXJjZSgpLmdldFNlbGVjdGVkS2V5KCkgfSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHR2aXNpYmxlPXtub3RFcXVhbChwYXRoSW5Nb2RlbChcImFscENvbnRlbnRWaWV3XCIsIFwicGFnZUludGVybmFsXCIpLCBcIlRhYmxlXCIpfVxuXHRcdFx0XHRzZWxlY3RlZEtleT17cGF0aEluTW9kZWwoXCJhbHBDb250ZW50Vmlld1wiLCBcInBhZ2VJbnRlcm5hbFwiKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogZ2V0U2VnbWVudGVkQnV0dG9uSXRlbXMoKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9TZWdtZW50ZWRCdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRTZWdtZW50ZWRCdXR0b25JdGVtcygpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHNlZ21lbnRlZEJ1dHRvbkl0ZW1zID0gW107XG5cdGlmIChDb21tb25IZWxwZXIuaXNEZXNrdG9wKCkpIHtcblx0XHRzZWdtZW50ZWRCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0Z2V0U2VnbWVudGVkQnV0dG9uSXRlbShcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9IWUJSSURfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCIsIFwiSHlicmlkXCIsIFwic2FwLWljb246Ly9jaGFydC10YWJsZS12aWV3XCIpXG5cdFx0KTtcblx0fVxuXHRzZWdtZW50ZWRCdXR0b25JdGVtcy5wdXNoKFxuXHRcdGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0oXCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fQ0hBUlRfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCIsIFwiQ2hhcnRcIiwgXCJzYXAtaWNvbjovL2Jhci1jaGFydFwiKVxuXHQpO1xuXHRzZWdtZW50ZWRCdXR0b25JdGVtcy5wdXNoKFxuXHRcdGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0oXCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCIsIFwiVGFibGVcIiwgXCJzYXAtaWNvbjovL3RhYmxlLXZpZXdcIilcblx0KTtcblx0cmV0dXJuIHNlZ21lbnRlZEJ1dHRvbkl0ZW1zO1xufVxuXG5mdW5jdGlvbiBnZXRTZWdtZW50ZWRCdXR0b25JdGVtKHRvb2x0aXA6IHN0cmluZywga2V5OiBzdHJpbmcsIGljb246IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiA8U2VnbWVudGVkQnV0dG9uSXRlbSB0b29sdGlwPXt0b29sdGlwfSBrZXk9e2tleX0gaWNvbj17aWNvbn0gLz47XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYW5ub3RhdGlvbiBwYXRoIHBvaW50aW5nIHRvIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gKENoYXJ0KS5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgY2hhcnRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gcGF0aFxuICovXG5mdW5jdGlvbiBnZXRWaXN1YWxpemF0aW9uUGF0aChcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRUeXBlIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuXHRjb25zdCBtZXRhUGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoY29udGV4dE9iamVjdFBhdGgpO1xuXG5cdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgQ2hhcnQgaWYgbWV0YVBhdGggaXMgbm90IHNldFxuXHRpZiAoIW1ldGFQYXRoKSB7XG5cdFx0TG9nLmVycm9yKGBNaXNzaW5nIG1ldGFQYXRoIHBhcmFtZXRlciBmb3IgQ2hhcnRgKTtcblx0XHRyZXR1cm4gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH1cblxuXHRpZiAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCkge1xuXHRcdHJldHVybiBtZXRhUGF0aDsgLy8gTWV0YVBhdGggaXMgYWxyZWFkeSBwb2ludGluZyB0byBhIENoYXJ0XG5cdH1cblxuXHQvL05lZWQgdG8gc3dpdGNoIHRvIHRoZSBjb250ZXh0IHJlbGF0ZWQgdGhlIFBWIG9yIFNQVlxuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obWV0YVBhdGgpO1xuXG5cdGxldCB2aXN1YWxpemF0aW9uczogVmlzdWFsaXphdGlvbkFuZFBhdGhbXSA9IFtdO1xuXHRzd2l0Y2ggKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGVybSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdGlmIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QuUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHR2aXN1YWxpemF0aW9ucyA9IGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHRcdG1ldGFQYXRoLFxuXHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0dmlzdWFsaXphdGlvbnMgPSBnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0XHRcdG1ldGFQYXRoLFxuXHRcdFx0XHRyZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0Y29uc3QgY2hhcnRWaXogPSB2aXN1YWxpemF0aW9ucy5maW5kKCh2aXopID0+IHtcblx0XHRyZXR1cm4gdml6LnZpc3VhbGl6YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ7XG5cdH0pO1xuXG5cdGlmIChjaGFydFZpeikge1xuXHRcdHJldHVybiBjaGFydFZpei5hbm5vdGF0aW9uUGF0aDtcblx0fSBlbHNlIHtcblx0XHQvLyBmYWxsYmFjayB0byBkZWZhdWx0IENoYXJ0IGlmIGFubm90YXRpb24gbWlzc2luZyBpbiBQVlxuXHRcdExvZy5lcnJvcihgQmFkIG1ldGFQYXRoIHBhcmFtZXRlciBmb3IgY2hhcnQ6ICR7Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50ZXJtfWApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YDtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdICYmIGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdLiRQYXRoKSB7XG5cdFx0Y29uc3QgaGlkZGVuUGF0aENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKSArIGAvQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufS8kUGF0aGAsXG5cdFx0XHRkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXS4kUGF0aFxuXHRcdCk7XG5cdFx0cmV0dXJuIENoYXJ0SGVscGVyLmdldEhpZGRlblBhdGhFeHByZXNzaW9uRm9yVGFibGVBY3Rpb25zQW5kSUJOKGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdLiRQYXRoLCB7XG5cdFx0XHRjb250ZXh0OiBoaWRkZW5QYXRoQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdKSB7XG5cdFx0cmV0dXJuICFkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDaGFydENvbnZlcnRlckNvbnRleHQoXG5cdHByb3BlcnRpZXM6IENoYXJ0QmxvY2ssXG5cdG9yaWdpbmFsVmlld0RhdGE6IFBhcnRpYWw8Vmlld0RhdGE+LFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydENvbnRleHRPYmplY3RQYXRoPixcblx0ZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzLFxuXHRleHRyYVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRsZXQgdmlld0RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbFZpZXdEYXRhKTtcblx0ZGVsZXRlIHZpZXdEYXRhLnJlc291cmNlTW9kZWw7XG5cdGRlbGV0ZSB2aWV3RGF0YS5hcHBDb21wb25lbnQ7XG5cdHZpZXdEYXRhID0gZGVlcENsb25lKHZpZXdEYXRhKTtcblx0bGV0IGNvbnRyb2xDb25maWd1cmF0aW9uID0ge307XG5cblx0Ly8gT25seSBtZXJnZSBpbiBwYWdlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgb24gdGhlIHNhbWUgY29udGV4dFxuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnRleHRPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiA/PyBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGNvbnN0IGVudGl0eVNldE5hbWUgPSBjb250ZXh0T2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVNldD8ubmFtZSA/PyBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWU7XG5cdGlmIChcblx0XHRyZWxhdGl2ZVBhdGggPT09IG9yaWdpbmFsVmlld0RhdGE/LmNvbnRleHRQYXRoIHx8XG5cdFx0cmVsYXRpdmVQYXRoID09PSBgLyR7b3JpZ2luYWxWaWV3RGF0YT8uZW50aXR5U2V0fWAgfHxcblx0XHRlbnRpdHlTZXROYW1lID09PSBvcmlnaW5hbFZpZXdEYXRhPy5lbnRpdHlTZXRcblx0KSB7XG5cdFx0Y29udHJvbENvbmZpZ3VyYXRpb24gPSB2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiE7XG5cdH1cblx0dmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gPSBtZXJnZShjb250cm9sQ29uZmlndXJhdGlvbiwgZXh0cmFQYXJhbXMgfHwge30pIGFzIENvbnRyb2xDb25maWd1cmF0aW9uO1xuXG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lLFxuXHRcdHByb3BlcnRpZXMuX21ldGFNb2RlbCxcblx0XHRkaWFnbm9zdGljcyxcblx0XHRtZXJnZSxcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcih2aWV3RGF0YSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncylcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udmVydGVyQ29udGV4dChcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9jayxcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydENvbnRleHRPYmplY3RQYXRoPixcblx0ZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzXG4pOiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRjb25zdCBpbml0aWFsQ29udmVydGVyQ29udGV4dCA9IGdldENoYXJ0Q29udmVydGVyQ29udGV4dChjaGFydEJsb2NrLCB2aWV3RGF0YSwgY29udGV4dE9iamVjdFBhdGgsIGRpYWdub3N0aWNzKTtcblx0Y29uc3QgdmlzdWFsaXphdGlvblBhdGggPSBnZXRWaXN1YWxpemF0aW9uUGF0aChjb250ZXh0T2JqZWN0UGF0aCwgaW5pdGlhbENvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBleHRyYVBhcmFtcyA9IGdldEV4dHJhUGFyYW1zKGNoYXJ0QmxvY2ssIHZpc3VhbGl6YXRpb25QYXRoKTtcblx0cmV0dXJuIGdldENoYXJ0Q29udmVydGVyQ29udGV4dChjaGFydEJsb2NrLCB2aWV3RGF0YSwgY29udGV4dE9iamVjdFBhdGgsIGRpYWdub3N0aWNzLCBleHRyYVBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIG1vZGlmeUlkZW50aWZpZXJzKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiB2b2lkIHtcblx0aWYgKGNoYXJ0QmxvY2suX2FwcGx5SWRUb0NvbnRlbnQpIHtcblx0XHRjaGFydEJsb2NrLl9ibG9ja0lkID0gY2hhcnRCbG9jay5pZC5yZXBsYWNlKC86OkNoYXJ0JC8sIFwiXCIpO1xuXHRcdGNoYXJ0QmxvY2suX2NvbnRlbnRJZCA9IGNoYXJ0QmxvY2suX2Jsb2NrSWQ7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCA9IGNoYXJ0QmxvY2suaWQ7XG5cdFx0Y2hhcnRCbG9jay5fY29udGVudElkID0gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suaWQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2UoXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydENvbnRleHRPYmplY3RQYXRoPlxuKTogdm9pZCB7XG5cdGNvbnN0IG1ldGFDb250ZXh0UGF0aCA9IGNoYXJ0QmxvY2suZ2V0TWV0YVBhdGhPYmplY3QoY2hhcnRCbG9jay5tZXRhUGF0aCwgY2hhcnRCbG9jay5fcmVzb2x2ZWRDb250ZXh0UGF0aCk7XG5cdGNoYXJ0QmxvY2suX21ldGFNb2RlbCA9IGNoYXJ0QmxvY2suX2dldE93bmVyKCk/LnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy5tZXRhTW9kZWwgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGghLmdldFBhdGgoKSkhO1xuXHRjaGFydEJsb2NrLl9jb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNoYXJ0QmxvY2suY29udGV4dFBhdGggPz8gbWV0YUNvbnRleHRQYXRoPy5nZXRDb250ZXh0UGF0aCgpKSE7XG5cblx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IGdldENvbnZlcnRlckNvbnRleHQoY2hhcnRCbG9jaywgdmlld0RhdGEsIGNvbnRleHRPYmplY3RQYXRoLCBkaWFnbm9zdGljcyk7XG5cdGNvbnN0IHZpZXdDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBpc011bHRpVGFicyA9ICh2aWV3Q29uZmlnPy5wYXRocz8ubGVuZ3RoIGFzIG51bWJlcikgPiAxO1xuXHRjb25zdCBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpPy5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXG5cdGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCA9IENoYXJ0SGVscGVyLmdldFVpQ2hhcnQoY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0KSE7XG5cdGNoYXJ0QmxvY2suX2NoYXJ0ID0gY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldE9iamVjdCgpIGFzIENoYXJ0VHlwZTtcblx0Y2hhcnRCbG9jay5fYmxvY2tBY3Rpb25zID0gW107XG5cdGNoYXJ0QmxvY2suX2NvbW1hbmRBY3Rpb25zID0gW107XG5cdG1vZGlmeUlkZW50aWZpZXJzKGNoYXJ0QmxvY2spO1xuXHRpZiAoY2hhcnRCbG9jay5fY2hhcnQpIHtcblx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbiA9IGNyZWF0ZUNoYXJ0RGVmaW5pdGlvbihcblx0XHRcdGNoYXJ0QmxvY2ssXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0UGF0aCgpXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsZWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24pIGFzIENvbnRleHQ7XG5cdFx0Ly8gQVBJIFByb3BlcnRpZXNcblx0XHRjaGFydEJsb2NrLm5hdmlnYXRpb25QYXRoID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24ubmF2aWdhdGlvblBhdGg7XG5cdFx0Y2hhcnRCbG9jay5hdXRvQmluZE9uSW5pdCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmF1dG9CaW5kT25Jbml0O1xuXHRcdGNoYXJ0QmxvY2sudml6UHJvcGVydGllcyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZpelByb3BlcnRpZXM7XG5cdFx0Y2hhcnRCbG9jay5jaGFydEFjdGlvbnMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hY3Rpb25zO1xuXHRcdGNoYXJ0QmxvY2suZmlsdGVyID0gZ2V0RmlsdGVyQmFyKGNoYXJ0QmxvY2spO1xuXHRcdGxldCBwZXJzb25hbGl6YXRpb246IENoYXJ0UDEzblR5cGU7XG5cdFx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGVyc29uYWxpemF0aW9uID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24ucGVyc29uYWxpemF0aW9uO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzd2l0Y2ggKGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJmYWxzZVwiOlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSBPYmplY3QudmFsdWVzKHBlcnNvbmFsaXphdGlvblZhbHVlcykuam9pbihcIixcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb24gYXMgc3RyaW5nO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzKHBlcnNvbmFsaXphdGlvbiwgY2hhcnRCbG9jayk7XG5cdFx0Y2hhcnRCbG9jay52aXNpYmxlID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24udmlzaWJsZTtcblx0XHRjaGFydEJsb2NrLmRyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkKG1ldGFDb250ZXh0UGF0aCEpO1xuXHRcdGNoYXJ0QmxvY2suX2NoYXJ0VHlwZSA9IENoYXJ0SGVscGVyLmZvcm1hdENoYXJ0VHlwZShjaGFydEJsb2NrLl9jaGFydC5DaGFydFR5cGUpO1xuXG5cdFx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gQ2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0QmxvY2suX2NoYXJ0LCB7XG5cdFx0XHRjb250ZXh0OiBjaGFydEJsb2NrLl9jaGFydENvbnRleHRcblx0XHR9KTtcblxuXHRcdGlmIChPYmplY3Qua2V5cyhjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY29tbWFuZEFjdGlvbnMgYXMgb2JqZWN0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY29tbWFuZEFjdGlvbnMgYXMgb2JqZWN0KS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY29tbWFuZEFjdGlvbnNba2V5XTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbik7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGggJiYgY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQgJiYgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0Y29uc3QgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShvcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRwdXNoQWN0aW9uQ29tbWFuZChhY3Rpb25Db250ZXh0LCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhY3Rpb24sIGNoYXJ0QmxvY2spO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNoYXJ0QmxvY2subWVhc3VyZXMgPSBnZXRDaGFydE1lYXN1cmVzKGNoYXJ0QmxvY2spO1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblBhdGggPSBDb21tb25IZWxwZXIuY3JlYXRlUHJlc2VudGF0aW9uUGF0aENvbnRleHQoY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0KTtcblx0XHRjaGFydEJsb2NrLl9zb3J0Q29uZGl0aW9ucyA9IENoYXJ0SGVscGVyLmdldFNvcnRDb25kaXRpb25zKFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0cHJlc2VudGF0aW9uUGF0aC5nZXRQYXRoKCksXG5cdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hcHBseVN1cHBvcnRlZFxuXHRcdCk7XG5cdFx0Y29uc3QgY2hhcnRBY3Rpb25zQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dC5nZXRQYXRoKCkgKyBcIi9BY3Rpb25zXCIsXG5cdFx0XHRjaGFydEJsb2NrLl9jaGFydC5BY3Rpb25zIGFzIHVua25vd24gYXMgQ29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29sbGVjdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvbik7XG5cdFx0Y29uc3QgdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhcmdldENvbGxlY3Rpb25QYXRoLCBjb2xsZWN0aW9uKSE7XG5cdFx0Y29uc3QgYWN0aW9uc09iamVjdCA9IGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKGNoYXJ0QWN0aW9uc0NvbnRleHQuZ2V0UGF0aCgpKT8udGFyZ2V0O1xuXG5cdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YSA9IHtcblx0XHRcdHRhcmdldENvbGxlY3Rpb25QYXRoOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uLFxuXHRcdFx0ZW50aXR5U2V0OlxuXHRcdFx0XHR0eXBlb2YgdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdCgpID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0PyB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0XHQ6IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiKSxcblx0XHRcdGVudGl0eVR5cGU6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbGxlY3Rpb24gKyBcIi9cIixcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5wYXJzZShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IEFjdGlvbkhlbHBlci5nZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyhhY3Rpb25zT2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSkgKyBcIlwiLFxuXHRcdFx0c2VnbWVudGVkQnV0dG9uSWQ6IGdlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pLFxuXHRcdFx0Y3VzdG9tQWdnOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY3VzdG9tQWdnLFxuXHRcdFx0dHJhbnNBZ2c6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy50cmFuc0FnZyxcblx0XHRcdGFwcGx5U3VwcG9ydGVkOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uYXBwbHlTdXBwb3J0ZWQsXG5cdFx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnBhcnNlKGNoYXJ0QmxvY2sudml6UHJvcGVydGllcyksXG5cdFx0XHRkcmFmdFN1cHBvcnRlZDogY2hhcnRCbG9jay5kcmFmdFN1cHBvcnRlZCxcblx0XHRcdG11bHRpVmlld3M6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5tdWx0aVZpZXdzIHx8ICghaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyAmJiBpc011bHRpVGFicyksXG5cdFx0XHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aDoge1xuXHRcdFx0XHRkYXRhOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0XHRcdH0sXG5cdFx0XHRjaGFydERpbWVuc2lvbktleUFuZFJvbGU6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uPy5jaGFydERpbWVuc2lvbktleUFuZFJvbGUsXG5cdFx0XHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY2hhcnRNZWFzdXJlS2V5QW5kUm9sZVxuXHRcdH07XG5cdFx0Y29uc3QgbmF2UHJvcHMgPSBjb250ZXh0T2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcyBhcyBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblx0XHRjb25zdCBsYXN0TmF2UHJvcCA9IG5hdlByb3BzW25hdlByb3BzLmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBsYXN0TmF2UHJvcD8uY29udGFpbnNUYXJnZXQgJiYgY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ID09PSB1bmRlZmluZWQ7XG5cdFx0aWYgKChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPz8gZmFsc2UpIHx8IChpc0NvbnRhaW5tZW50ID8/IGZhbHNlKSkge1xuXHRcdFx0Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5lbnRpdHlTZXQgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmFsbGJhY2sgdG8gZGlzcGxheSBlbXB0eSBjaGFydFxuXHRcdGNoYXJ0QmxvY2suYXV0b0JpbmRPbkluaXQgPSBmYWxzZTtcblx0XHRjaGFydEJsb2NrLnZpc2libGUgPSBcInRydWVcIjtcblx0XHRjaGFydEJsb2NrLm5hdmlnYXRpb25QYXRoID0gXCJcIjtcblxuXHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEgPSB7XG5cdFx0XHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogXCJcIixcblx0XHRcdGVudGl0eVNldDogXCJcIixcblx0XHRcdGVudGl0eVR5cGU6IFwiXCIsXG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IFwiXCIsXG5cdFx0XHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogXCJcIixcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkOiBcIlwiLFxuXHRcdFx0Y3VzdG9tQWdnOiB7fSxcblx0XHRcdHRyYW5zQWdnOiB7fSxcblx0XHRcdGFwcGx5U3VwcG9ydGVkOiB7fSxcblx0XHRcdHZpelByb3BlcnRpZXM6IHt9XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJCYXIoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpbHRlckJhciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2hhcnRCbG9jay5maWx0ZXJCYXIpO1xuXHRpZiAoY2hhcnRCbG9jay5maWx0ZXJCYXIgJiYgZmlsdGVyQmFyPy5pc0E8TWFjcm9BUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0cmV0dXJuIGdldENvbnRlbnRJZChjaGFydEJsb2NrLmZpbHRlckJhcik7XG5cdH0gZWxzZSBpZiAoZmlsdGVyQmFyPy5pc0E8Q29udHJvbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdHJldHVybiBjaGFydEJsb2NrLmZpbHRlckJhcjtcblx0fSBlbHNlIGlmIChjaGFydEJsb2NrLmZpbHRlckJhcikge1xuXHRcdHJldHVybiBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5maWx0ZXJCYXIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERlbGVnYXRlKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBvYmplY3Qge1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlbGVnYXRlKSB7XG5cdFx0KGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZSBhcyBDaGFydERlbGVnYXRlKS5wYXlsb2FkLnNlbGVjdGlvbk1vZGUgPVxuXHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/P1xuXHRcdFx0KGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZSBhcyBDaGFydERlbGVnYXRlKS5wYXlsb2FkLnNlbGVjdGlvbk1vZGUgPz9cblx0XHRcdFwiTVVMVElQTEVcIjtcblx0fVxuXHRyZXR1cm4gY2hhcnRCbG9jay5jaGFydERlbGVnYXRlXG5cdFx0PyBjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGVcblx0XHQ6IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGNoYXJ0Q29udGV4dFBhdGg6IGNoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGgsXG5cdFx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvLldvcmtlcnNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2VsZWN0aW9uTW9kZTpcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz8gY2hhcnRCbG9jay5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/IFwiTVVMVElQTEVcIlxuXHRcdFx0XHR9XG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21EYXRhKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBDdXN0b21EYXRhW10ge1xuXHRyZXR1cm4gW1xuXHRcdDxDdXN0b21EYXRhIGtleT17XCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS50YXJnZXRDb2xsZWN0aW9uUGF0aH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImVudGl0eVNldFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5lbnRpdHlTZXR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJlbnRpdHlUeXBlXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmVudGl0eVR5cGV9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEub3BlcmF0aW9uQXZhaWxhYmxlTWFwfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnNcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEubXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnN9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJzZWdtZW50ZWRCdXR0b25JZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5zZWdtZW50ZWRCdXR0b25JZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImN1c3RvbUFnZ1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5jdXN0b21BZ2d9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJ0cmFuc0FnZ1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS50cmFuc0FnZ30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImFwcGx5U3VwcG9ydGVkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmFwcGx5U3VwcG9ydGVkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widml6UHJvcGVydGllc1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS52aXpQcm9wZXJ0aWVzfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZHJhZnRTdXBwb3J0ZWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZHJhZnRTdXBwb3J0ZWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJtdWx0aVZpZXdzXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm11bHRpVmlld3N9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5zZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5jaGFydERpbWVuc2lvbktleUFuZFJvbGV9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmNoYXJ0TWVhc3VyZUtleUFuZFJvbGV9IC8+XG5cdF07XG59XG5cbmZ1bmN0aW9uIGdldE5vRGF0YShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogSWxsdXN0cmF0ZWRNZXNzYWdlIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGggPT09IFwiXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0cmV0dXJuIChcblx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkF1dG99XG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLkJlZm9yZVNlYXJjaH1cblx0XHRcdHRpdGxlPXtjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9USVRMRV9URVhUXCIpfVxuXHRcdFx0ZGVzY3JpcHRpb249e2NoYXJ0QmxvY2suZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIil9XG5cdFx0XHRlbmFibGVEZWZhdWx0VGl0bGVBbmREZXNjcmlwdGlvbj17ZmFsc2V9XG5cdFx0XHRlbmFibGVWZXJ0aWNhbFJlc3BvbnNpdmVuZXNzPXt0cnVlfVxuXHRcdD48L0lsbHVzdHJhdGVkTWVzc2FnZT5cblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1kY0NoYXJ0VGVtcGxhdGUoXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydENvbnRleHRPYmplY3RQYXRoPlxuKTogTWRjQ2hhcnQge1xuXHRpbml0aWFsaXNlKGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBkaWFnbm9zdGljcywgY29udGV4dE9iamVjdFBhdGgpO1xuXHRjaGFydEJsb2NrLmxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCIxXCIgc2hyaW5rRmFjdG9yPVwiMVwiIC8+O1xuXG5cdHJldHVybiAoXG5cdFx0PE1kY0NoYXJ0XG5cdFx0XHRiaW5kaW5nPXt7IGludGVybmFsOiBcImNvbnRyb2xzL1wiICsgY2hhcnRCbG9jay5fYmxvY2tJZCB9fVxuXHRcdFx0aWQ9e2NoYXJ0QmxvY2suX2NvbnRlbnRJZH1cblx0XHRcdGNoYXJ0VHlwZT17Y2hhcnRCbG9jay5fY2hhcnRUeXBlfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e2NoYXJ0QmxvY2suX3NvcnRDb25kaXRpb25zfVxuXHRcdFx0aGVhZGVyPXtjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5oZWFkZXIgPz8gY2hhcnRCbG9jay5oZWFkZXIgPz8gY2hhcnRCbG9jay5fY2hhcnQ/LlRpdGxlPy50b1N0cmluZygpID8/IFwiXCJ9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5oZWFkZXJWaXNpYmxlID8/IGNoYXJ0QmxvY2suaGVhZGVyVmlzaWJsZX1cblx0XHRcdG1pbkhlaWdodD17RGV2aWNlLnN5c3RlbS5waG9uZSA/IFwiODB2aFwiIDogXCI0MDBweFwifVxuXHRcdFx0aGVpZ2h0PVwiMTAwJVwiXG5cdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0aGVhZGVyTGV2ZWw9e2NoYXJ0QmxvY2suaGVhZGVyTGV2ZWx9XG5cdFx0XHRoZWFkZXJTdHlsZT17Y2hhcnRCbG9jay5oZWFkZXJTdHlsZX1cblx0XHRcdHAxM25Nb2RlPXsoY2hhcnRCbG9jay5fcGVyc29uYWxpemF0aW9uISBhcyBzdHJpbmcpPy5zcGxpdChcIixcIil9XG5cdFx0XHRmaWx0ZXI9e2NoYXJ0QmxvY2suZmlsdGVyfVxuXHRcdFx0bm9EYXRhVGV4dD17XG5cdFx0XHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGggPT09IFwiXCJcblx0XHRcdFx0XHQ/IGNoYXJ0QmxvY2suZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NIQVJUX05PX0FOTk9UQVRJT05fU0VUX1RFWFRcIilcblx0XHRcdFx0XHQ6IGNoYXJ0QmxvY2subm9EYXRhVGV4dFxuXHRcdFx0fVxuXHRcdFx0YXV0b0JpbmRPbkluaXQ9e2NoYXJ0QmxvY2suYXV0b0JpbmRPbkluaXR9XG5cdFx0XHRkZWxlZ2F0ZT17Z2V0RGVsZWdhdGUoY2hhcnRCbG9jayl9XG5cdFx0XHR2aXNpYmxlPXtjaGFydEJsb2NrLnZpc2libGV9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogZ2V0Q3VzdG9tRGF0YShjaGFydEJsb2NrKSxcblx0XHRcdFx0ZGVwZW5kZW50czogW1xuXHRcdFx0XHRcdGdldERlcGVuZGVudHMoY2hhcnRCbG9jaywgY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0KSxcblx0XHRcdFx0XHRnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRcdGdldEFjY0FJQWN0aW9uSW52aXNpYmxlVGV4dChjaGFydEJsb2NrKVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRpdGVtczogZ2V0SXRlbXMoY2hhcnRCbG9jayksXG5cdFx0XHRcdGFjdGlvbnM6IGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID8gZ2V0VG9vbGJhckFjdGlvbnMoY2hhcnRCbG9jaykgOiBjaGFydEJsb2NrLl9ibG9ja0FjdGlvbnMsXG5cdFx0XHRcdHZhcmlhbnQ6IGNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRub0RhdGE6IGdldE5vRGF0YShjaGFydEJsb2NrKVxuXHRcdFx0fX1cblx0XHQ8L01kY0NoYXJ0PlxuXHQpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgSW52aXNpYmxlVGV4dCBmb3IgdGhlIEFJIEFjdGlvbiBidXR0b25zLlxuICogQHBhcmFtIGNoYXJ0QmxvY2sgQ2hhcnRCbG9jayBpbnN0YW5jZVxuICogQHJldHVybnMgSW52aXNpYmxlVGV4dCBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldEFjY0FJQWN0aW9uSW52aXNpYmxlVGV4dChjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogSW52aXNpYmxlVGV4dCB7XG5cdGNvbnN0IGludmlzaWJsZVRleHRBY2NBSUFjdGlvbiA9IG5ldyBJbnZpc2libGVUZXh0KHtcblx0XHRpZDogYCR7Y2hhcnRCbG9jay5nZXRJZCgpfS0tZmU6OkFpQWN0aW9uOjpBcmlhVGV4dGAsXG5cdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+Q19BQ0NFU1NJQklMSVRZX0FJX0FDVElPTl9BUklBX1RFWFR9XCJcblx0fSk7XG5cdGludmlzaWJsZVRleHRBY2NBSUFjdGlvbi50b1N0YXRpYygpO1xuXHRyZXR1cm4gaW52aXNpYmxlVGV4dEFjY0FJQWN0aW9uO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwR0EsTUFBTUEsV0FBc0MsR0FBRztJQUM5Qyx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLHVEQUF1RCxFQUFFLE9BQU87SUFDaEUsdURBQXVELEVBQUUsT0FBTztJQUNoRSx1REFBdUQsRUFBRTtFQUMxRCxDQUFDO0VBQUMsSUEyQkdDLHFCQUFxQiwwQkFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQUEsT0FBckJBLHFCQUFxQjtFQUFBLEVBQXJCQSxxQkFBcUI7RUFpRjFCLFNBQVNDLHFCQUFxQkEsQ0FDN0JDLFVBQXNCLEVBQ3RCQyxnQkFBa0MsRUFDbEND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
|