@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/deepEqual", "sap/base/util/deepExtend", "sap/fe/base/BindingToolkit", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExtend", "sap/fe/base/BindingToolkit", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/converters/helpers/DataFieldHelper", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/ExcelFormatHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/SizeHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/type/EDM", "sap/fe/macros/CollectionBindingInfo", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/filterBar/FilterBarDelegate", "sap/fe/macros/table/MdcTableTemplate", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/TableRuntime", "sap/fe/macros/table/TableSizeHelper", "sap/fe/macros/table/Utils", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageType", "sap/ui/core/Element", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/mdc/odata/v4/TableDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel", "../TableEventHandlerProvider"], function (Log, deepEqual, deepExtend, BindingToolkit, jsx, ActionRuntime, CommonUtils, CollaborationManager, MetaModelConverter, FilterRestrictions, Columns, DataFieldHelper, ValueFormatter, DeleteHelper, ExcelFormat, ModelHelper, PromiseKeeper, ResourceModelHelper, SizeHelper, DataModelPathHelper, EDM, CollectionBindingInfoAPI, CommonHelper, DelegateUtil, FilterBarDelegate, MdcTableTemplate, TableHelper, TableRuntime, TableSizeHelper, TableUtils, IllustratedMessage, IllustratedMessageType, UI5Element, Fragment, XMLPreprocessor, TableDelegateBase, TypeMap, Filter, Sorter, JSONModel, TableEventHandlerProvider) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getSlotColumn = MdcTableTemplate.getSlotColumn;
|
|
@@ -12,6 +12,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
12
12
|
var isPathFilterable = DataModelPathHelper.isPathFilterable;
|
|
13
13
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
14
14
|
var getLocalizedText = ResourceModelHelper.getLocalizedText;
|
|
15
|
+
var getConnectedFieldsSeparator = DataFieldHelper.getConnectedFieldsSeparator;
|
|
16
|
+
var getConnectedFieldsData = DataFieldHelper.getConnectedFieldsData;
|
|
15
17
|
var ColumnType = Columns.ColumnType;
|
|
16
18
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
17
19
|
var isConstant = BindingToolkit.isConstant;
|
|
@@ -19,6 +21,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
19
21
|
const SEARCH_HAS_BEEN_FIRED = "searchFired";
|
|
20
22
|
const COLUMN_HAS_BEEN_ADDED = "columnAdded";
|
|
21
23
|
const PREVIOUS_SORTERS = "previousSorters";
|
|
24
|
+
async function delayFor(delay) {
|
|
25
|
+
return new Promise(resolve => {
|
|
26
|
+
setTimeout(resolve, delay);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
22
29
|
|
|
23
30
|
/**
|
|
24
31
|
* Helper class for sap.ui.mdc.Table.
|
|
@@ -60,7 +67,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
60
67
|
oDataFieldWidth = TableSizeHelper.getWidthForDataFieldForAnnotation(oData, false, propertyInfos, convertedMetaData, showDataFieldsLabel);
|
|
61
68
|
break;
|
|
62
69
|
case "com.sap.vocabularies.UI.v1.DataField":
|
|
63
|
-
oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData,
|
|
70
|
+
oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData, propertyInfos, convertedMetaData, false, involvedDataModelObjects, showDataFieldsLabel);
|
|
64
71
|
break;
|
|
65
72
|
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
66
73
|
oDataFieldWidth = {
|
|
@@ -85,6 +92,44 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
85
92
|
});
|
|
86
93
|
}
|
|
87
94
|
},
|
|
95
|
+
/**
|
|
96
|
+
* This function calculates the width of a ConnectedFields column.
|
|
97
|
+
* The width of the ConnectedFields is the sum of the width of the 2 properties contained in the ConnectedFields
|
|
98
|
+
* The result of this calculation is stored in the visualSettings.widthCalculation.minWidth property, which is used by the MDCtable.
|
|
99
|
+
* @param table Instance of the MDCtable
|
|
100
|
+
* @param propertyInfo Current propertyInfo
|
|
101
|
+
* @param propertyInfos Array of properties
|
|
102
|
+
* @private
|
|
103
|
+
* @alias sap.fe.macros.TableDelegate
|
|
104
|
+
*/
|
|
105
|
+
_computeVisualSettingsForConnectedField: function (table, propertyInfo, propertyInfos) {
|
|
106
|
+
if (propertyInfo.key.indexOf("DataFieldForAnnotation::ConnectedFields::") === 0) {
|
|
107
|
+
const metaModel = table.getModel().getMetaModel();
|
|
108
|
+
const involvedDataModelObjects = getInvolvedDataModelObjects(metaModel.getContext(propertyInfo.annotationPath));
|
|
109
|
+
const convertedMetaData = involvedDataModelObjects.convertedTypes;
|
|
110
|
+
const dataField = involvedDataModelObjects.targetObject;
|
|
111
|
+
const connectedFields = dataField.Target.$target;
|
|
112
|
+
const connectedFieldsSeparator = getConnectedFieldsSeparator(connectedFields);
|
|
113
|
+
const fieldWidths = [];
|
|
114
|
+
getConnectedFieldsData(connectedFields).forEach(function (data) {
|
|
115
|
+
const dataFieldWidth = TableSizeHelper.getWidthForDataField(data, propertyInfos, convertedMetaData, false, involvedDataModelObjects);
|
|
116
|
+
if (dataFieldWidth) {
|
|
117
|
+
fieldWidths.push(dataFieldWidth.propertyWidth);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const separatorWidth = SizeHelper.getButtonWidth(connectedFieldsSeparator);
|
|
121
|
+
fieldWidths.push(separatorWidth);
|
|
122
|
+
const columnWidth = fieldWidths.reduce(function (acc, value) {
|
|
123
|
+
return acc + value;
|
|
124
|
+
}, 0);
|
|
125
|
+
propertyInfo.visualSettings = deepExtend(propertyInfo.visualSettings, {
|
|
126
|
+
widthCalculation: {
|
|
127
|
+
verticalArrangement: true,
|
|
128
|
+
minWidth: Math.ceil(columnWidth)
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
},
|
|
88
133
|
_computeVisualSettingsForPropertyWithValueHelp: function (table, property) {
|
|
89
134
|
const tableAPI = this._getTableAPI(table);
|
|
90
135
|
if (!property.propertyInfos) {
|
|
@@ -149,12 +194,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
149
194
|
});
|
|
150
195
|
properties.forEach(property => {
|
|
151
196
|
this._computeVisualSettingsForFieldGroup(table, property, properties);
|
|
197
|
+
this._computeVisualSettingsForConnectedField(table, property, properties);
|
|
152
198
|
this._computeVisualSettingsForPropertyWithValueHelp(table, property);
|
|
153
199
|
this._computeLabel(property, labelMap);
|
|
154
200
|
});
|
|
155
201
|
// Add the $editState property
|
|
156
202
|
properties.push({
|
|
157
203
|
key: "$editState",
|
|
204
|
+
name: "$editState",
|
|
158
205
|
path: "$editState",
|
|
159
206
|
groupLabel: "",
|
|
160
207
|
group: "",
|
|
@@ -257,7 +304,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
257
304
|
// if I set this clipBoardSettings the copy provider extract the data according to the template in the html property and it is properly copied in excel
|
|
258
305
|
// but when we copy elsewhere we only get the raw data and not the templated data
|
|
259
306
|
}
|
|
260
|
-
|
|
261
307
|
// Set visualSettings only if it exists
|
|
262
308
|
if (columnInfo.visualSettings && Object.keys(columnInfo.visualSettings).length > 0) {
|
|
263
309
|
propertyInfo.visualSettings = columnInfo.visualSettings;
|
|
@@ -265,14 +311,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
265
311
|
if (columnInfo.exportDataPointTargetValue) {
|
|
266
312
|
propertyInfo.exportDataPointTargetValue = columnInfo.exportDataPointTargetValue;
|
|
267
313
|
}
|
|
268
|
-
|
|
269
314
|
// MDC expects 'propertyInfos' only for complex properties.
|
|
270
315
|
// An empty array throws validation error and undefined value is unhandled.
|
|
271
316
|
if (columnInfo.propertyInfos?.length) {
|
|
272
317
|
propertyInfo.propertyInfos = columnInfo.propertyInfos;
|
|
273
318
|
} else {
|
|
274
319
|
// Add properties which are supported only by simple PropertyInfos.
|
|
275
|
-
|
|
276
320
|
//get the DataModelObjectPath for the column
|
|
277
321
|
const columnDataModelObjectPath = getInvolvedDataModelObjects(metaModel.getContext(columnInfo.annotationPath), metaModel.getContext(DelegateUtil.getCustomData(table, "metaPath")));
|
|
278
322
|
propertyInfo.path = columnInfo.relativePath;
|
|
@@ -377,7 +421,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
377
421
|
_fetchCustomPropertyInfo: function (columnInfo, table, appComponent) {
|
|
378
422
|
let label;
|
|
379
423
|
if (columnInfo.header) {
|
|
380
|
-
if (columnInfo.header.
|
|
424
|
+
if (columnInfo.header.binding) {
|
|
425
|
+
label = columnInfo.header.binding.getExternalValue();
|
|
426
|
+
} else if (columnInfo.header.startsWith("{metaModel>")) {
|
|
381
427
|
label = ModelHelper.fetchTextFromMetaModel(columnInfo.header, undefined, table.getModel().getMetaModel());
|
|
382
428
|
} else {
|
|
383
429
|
label = getLocalizedText(columnInfo.header, appComponent); // Todo: To be removed once MDC provides translation support
|
|
@@ -393,7 +439,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
393
439
|
exportSettings: columnInfo.exportSettings,
|
|
394
440
|
visualSettings: columnInfo.visualSettings
|
|
395
441
|
};
|
|
396
|
-
|
|
397
442
|
// MDC expects 'propertyInfos' only for complex properties.
|
|
398
443
|
// An empty array throws validation error and undefined value is unhandled.
|
|
399
444
|
if (columnInfo.propertyInfos && columnInfo.propertyInfos.length) {
|
|
@@ -426,9 +471,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
426
471
|
},
|
|
427
472
|
_fetchPropertiesForEntity: async function (table, entityTypePath, metaModel, appComponent) {
|
|
428
473
|
// when fetching properties, this binding context is needed - so lets create it only once and use if for all properties/data-fields/line-items
|
|
429
|
-
const bindingPath = ModelHelper.getEntitySetPath(entityTypePath);
|
|
430
474
|
let fetchedProperties = [];
|
|
431
|
-
const
|
|
475
|
+
const dataModel = MetaModelConverter.getInvolvedDataModelObjects(metaModel.getContext(entityTypePath));
|
|
476
|
+
const nonFilterableProperties = FilterRestrictions.getFilterRestrictionsByDataModel(dataModel).NonFilterableProperties;
|
|
432
477
|
return Promise.resolve(this.getColumnsFor(table)).then(columns => {
|
|
433
478
|
// DraftAdministrativeData does not work via 'entitySet/$NavigationPropertyBinding/DraftAdministrativeData'
|
|
434
479
|
if (columns) {
|
|
@@ -474,6 +519,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
474
519
|
if (fetchedProperties.length) {
|
|
475
520
|
return Promise.resolve(fetchedProperties);
|
|
476
521
|
}
|
|
522
|
+
if (appComponent.delayTime > 0) {
|
|
523
|
+
// First call let's add a small delay to ensure this doesn't block the initial view creation
|
|
524
|
+
await delayFor(appComponent.delayTime);
|
|
525
|
+
}
|
|
477
526
|
return this._fetchPropertiesForEntity(table, entityTypePath, metaModel, appComponent).then(function (subFetchedProperties) {
|
|
478
527
|
tableAPI.setCachedPropertyInfos(subFetchedProperties);
|
|
479
528
|
return subFetchedProperties;
|
|
@@ -503,15 +552,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
503
552
|
const getNoDataIllustratedMessageWithFilters = function () {
|
|
504
553
|
if (table.data("hiddenFilters") || table.getQuickFilter()) {
|
|
505
554
|
return {
|
|
506
|
-
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS"),
|
|
555
|
+
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
507
556
|
description: resourceModel.getText("M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW", undefined, suffixResourceKey),
|
|
508
|
-
illustrationType: IllustratedMessageType.
|
|
557
|
+
illustrationType: IllustratedMessageType.NoFilterResults
|
|
509
558
|
};
|
|
510
559
|
}
|
|
511
560
|
return {
|
|
512
|
-
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS"),
|
|
561
|
+
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
513
562
|
description: resourceModel.getText("T_TABLE_AND_CHART_NO_DATA_TEXT_WITH_FILTER", undefined, suffixResourceKey),
|
|
514
|
-
illustrationType: IllustratedMessageType.
|
|
563
|
+
illustrationType: IllustratedMessageType.NoFilterResults
|
|
515
564
|
};
|
|
516
565
|
};
|
|
517
566
|
const filterAssociation = table.getFilter();
|
|
@@ -523,9 +572,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
523
572
|
illustratedInformation = getNoDataIllustratedMessageWithFilters();
|
|
524
573
|
} else {
|
|
525
574
|
illustratedInformation = {
|
|
526
|
-
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS"),
|
|
575
|
+
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
527
576
|
description: resourceModel.getText("T_TABLE_AND_CHART_NO_DATA_TEXT", undefined, suffixResourceKey),
|
|
528
|
-
illustrationType: IllustratedMessageType.
|
|
577
|
+
illustrationType: IllustratedMessageType.NoFilterResults
|
|
529
578
|
};
|
|
530
579
|
}
|
|
531
580
|
} else if (hasFilterOrSearch) {
|
|
@@ -533,9 +582,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
533
582
|
illustratedInformation = getNoDataIllustratedMessageWithFilters();
|
|
534
583
|
} else {
|
|
535
584
|
illustratedInformation = {
|
|
536
|
-
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NODATA"),
|
|
585
|
+
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NODATA", undefined, suffixResourceKey),
|
|
537
586
|
description: resourceModel.getText("M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT", undefined, suffixResourceKey),
|
|
538
|
-
illustrationType: IllustratedMessageType.
|
|
587
|
+
illustrationType: IllustratedMessageType.NoEntries
|
|
539
588
|
};
|
|
540
589
|
}
|
|
541
590
|
if (CommonUtils.getTargetView(table).getViewData().liveMode) {
|
|
@@ -543,9 +592,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
543
592
|
illustratedInformation = getNoDataIllustratedMessageWithFilters();
|
|
544
593
|
} else {
|
|
545
594
|
illustratedInformation = {
|
|
546
|
-
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS"),
|
|
547
|
-
description: resourceModel.getText("M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT"),
|
|
548
|
-
illustrationType: IllustratedMessageType.
|
|
595
|
+
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
596
|
+
description: resourceModel.getText("M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT", undefined, suffixResourceKey),
|
|
597
|
+
illustrationType: IllustratedMessageType.NoFilterResults
|
|
549
598
|
};
|
|
550
599
|
}
|
|
551
600
|
}
|
|
@@ -577,7 +626,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
577
626
|
setTimeout(() => {
|
|
578
627
|
oInternalModelContext.setProperty("dataRequestedTimeoutSet", false);
|
|
579
628
|
const oTableAPI = oTable ? oTable.getParent() : null;
|
|
580
|
-
if (oTableAPI) {
|
|
629
|
+
if (oTableAPI && CommonUtils.getIsEditable(oTable)) {
|
|
581
630
|
oTableAPI.tableDefaultsPromise = oTableAPI.getTableDefaults(oTable) ?? Promise.resolve({});
|
|
582
631
|
}
|
|
583
632
|
}, 0);
|
|
@@ -823,7 +872,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
823
872
|
const allColumns = tableAPI.getTableDefinition().columns;
|
|
824
873
|
const keyPropertyNames = allColumns.filter(c => c.isKey && c.relativePath && c.relativePath !== "IsActiveEntity").map(c => c.relativePath);
|
|
825
874
|
const displayedColumns = table.getColumns().map(column => tableAPI.getTableDefinition().columns.find(c => c.name === column.getPropertyKey()));
|
|
826
|
-
|
|
827
875
|
// Store all properties referenced by displayed columns in a Set
|
|
828
876
|
const referencedPropertyPaths = new Set();
|
|
829
877
|
function processColumn(col) {
|
|
@@ -831,7 +879,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
831
879
|
if (col.relativePath && col.propertyInfos === undefined) {
|
|
832
880
|
referencedPropertyPaths.add(col.relativePath);
|
|
833
881
|
}
|
|
834
|
-
|
|
835
882
|
// Add the additional properties referenced by the column
|
|
836
883
|
col.extension?.additionalProperties?.forEach(additionalColumnName => {
|
|
837
884
|
const additionalColumn = allColumns.find(c => c.name === additionalColumnName);
|
|
@@ -846,7 +893,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
846
893
|
}
|
|
847
894
|
// Process the column itself
|
|
848
895
|
processColumn(column);
|
|
849
|
-
|
|
850
896
|
// Process the columns referenced by the column
|
|
851
897
|
column.propertyInfos?.forEach(relatedColumnName => {
|
|
852
898
|
const relatedColumn = allColumns.find(c => c.name === relatedColumnName);
|
|
@@ -921,7 +967,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
921
967
|
if (tableAPI.getTableDefinition().enableAnalytics !== true) {
|
|
922
968
|
// Aggregate conditions never make sense outside of an analytical table
|
|
923
969
|
table.setAggregateConditions();
|
|
924
|
-
|
|
925
970
|
// Group conditions don't make sense in a Tree or Grid table
|
|
926
971
|
if (tableAPI.getTableDefinition().control.type === "GridTable" || tableAPI.getTableDefinition().control.type === "TreeTable") {
|
|
927
972
|
table.setGroupConditions();
|
|
@@ -946,7 +991,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
946
991
|
internalBindingContext?.setProperty(SEARCH_HAS_BEEN_FIRED, false);
|
|
947
992
|
internalBindingContext?.setProperty(COLUMN_HAS_BEEN_ADDED, false);
|
|
948
993
|
internalBindingContext?.setProperty(PREVIOUS_SORTERS, newSorters);
|
|
949
|
-
|
|
950
994
|
//for Treetable, it's necessary to clear the pastableContexts since the binding destroys previous contexts.
|
|
951
995
|
if (tableAPI.getTableDefinition().control.type === "TreeTable") {
|
|
952
996
|
internalBindingContext?.setProperty("pastableContexts", []);
|
|
@@ -1094,7 +1138,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1094
1138
|
return Fragment.load({
|
|
1095
1139
|
type: "XML",
|
|
1096
1140
|
definition: resultXML,
|
|
1097
|
-
controller: view.getController()
|
|
1141
|
+
controller: view.getController().getExtensionAPI()
|
|
1098
1142
|
});
|
|
1099
1143
|
},
|
|
1100
1144
|
_getExportFormat: function (dataType) {
|
|
@@ -1263,7 +1307,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1263
1307
|
const enableAnalytics = this._getTableAPI(table).getTableDefinition().enableAnalytics;
|
|
1264
1308
|
return getComputedColumn(sTableId, columnInfo, oTableContext, enableAnalytics);
|
|
1265
1309
|
}
|
|
1266
|
-
|
|
1267
1310
|
// fall-back
|
|
1268
1311
|
if (!oMetaModel) {
|
|
1269
1312
|
return Promise.resolve(null);
|
|
@@ -1412,4 +1455,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1412
1455
|
}
|
|
1413
1456
|
});
|
|
1414
1457
|
}, false);
|
|
1415
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiX2dldFRhYmxlQVBJIiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0UGFyZW50IiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0SWQiLCJnZXRDb2x1bW5zRm9yIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29sdW1ucyIsImZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzIiwib1RhYmxlIiwib0NhcGFiaWxpdGllcyIsIlhMU1giLCJvTW9kZWwiLCJEZWxlZ2F0ZVV0aWwiLCJmZXRjaE1vZGVsIiwidGhlbiIsIm1vZGVsIiwiYVN1cHBvcnRlZEZvcm1hdHMiLCJhTG93ZXJGb3JtYXRzIiwibWFwIiwiZWxlbWVudCIsInRvTG93ZXJDYXNlIiwib0Fubm90YXRpb24iLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbHVtbkluZm8iLCJjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNGaWx0ZXJhYmxlIiwiaXNQYXRoRmlsdGVyYWJsZSIsInJlbGF0aXZlUGF0aCIsImlzUGFydE9mTGluZUl0ZW0iLCJpc1BhcnRPZkN1c3RvbUNvbHVtbiIsImlzQ29uc3RhbnQiLCJfZmV0Y2hQcm9wZXJ0eUluZm8iLCJhcHBDb21wb25lbnQiLCJzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNDb21wbGV4VHlwZSIsInR5cGVDb25maWciLCJjbGFzc05hbWUiLCJiRmlsdGVyYWJsZSIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYklzQW5hbHl0aWNhbFRhYmxlIiwiZ2V0Q3VzdG9tRGF0YSIsImdldExvY2FsaXplZFRleHQiLCJ0b29sdGlwIiwiX2dldFR5cGVDb25maWciLCJuYW1lIiwiZm9ybWF0T3B0aW9ucyIsImJhc2VUeXBlIiwic3R5bGUiLCJjb25zdHJhaW50cyIsImF2YWlsYWJpbGl0eSIsImV4cG9ydFNldHRpbmdzIiwiX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzIiwidHlwZSIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwidGVtcGxhdGUiLCJjbGlwYm9hcmRTZXR0aW5ncyIsImtleXMiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsIl91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyIsImlzS2V5IiwiaXNHcm91cGFibGUiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJfc2V0VGV4dEFycmFuZ2VtZW50SW5mbyIsImV4dGVuc2lvbiIsInRlY2huaWNhbGx5R3JvdXBhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsImFkZGl0aW9uYWxMYWJlbCIsImV4cG9ydEZvcm1hdCIsIl9nZXRFeHBvcnRGb3JtYXQiLCJmb3JtYXQiLCJUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsImlzVHlwZUZpbHRlcmFibGUiLCJkZXNjcmlwdGlvbkNvbHVtbiIsIm9Db2wiLCJ0ZXh0UHJvcGVydHkiLCJ2YWx1ZVByb3BlcnR5IiwiZGVzY3JpcHRpb25Qcm9wZXJ0eSIsImFnZ3JlZ2F0YWJsZSIsIl9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvIiwiX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvIiwiaGVhZGVyIiwic3RhcnRzV2l0aCIsIk1vZGVsSGVscGVyIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsIl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uSW5mbyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwiLCJfb1RhYmxlIiwiX29Db2x1bW5JbmZvIiwiYVZpc2libGVDb2x1bW5zIiwib0ludGVybmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNJbnRlcm5hbFBhdGgiLCJnZXRQYXRoIiwiaW5kZXgiLCJzZXRQcm9wZXJ0eSIsIl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJlbnRpdHlUeXBlUGF0aCIsImJpbmRpbmdQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsImZldGNoZWRQcm9wZXJ0aWVzIiwibm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJtYXhDb25kaXRpb25zIiwiaXNNdWx0aVZhbHVlIiwiRXJyb3IiLCJzZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwiZ2V0UHJvcGVydHlJbmZvcyIsIl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eSIsImdldENhY2hlZFByb3BlcnR5SW5mb3MiLCJzdWJGZXRjaGVkUHJvcGVydGllcyIsInNldENhY2hlZFByb3BlcnR5SW5mb3MiLCJzZXROb0RhdGFJbmZvcm1hdGlvbiIsImlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uIiwibm9EYXRhQWdncmVnYXRpb24iLCJnZXROb0RhdGEiLCJpc0EiLCJjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlIiwic2V0VGl0bGUiLCJ0aXRsZSIsInNldERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRJbGx1c3RyYXRpb25UeXBlIiwiaWxsdXN0cmF0aW9uVHlwZSIsInNldElsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwic2V0Tm9EYXRhIiwic2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UiLCJiaW5kaW5nSW5mbyIsInRhYmxlRmlsdGVySW5mbyIsIlRhYmxlVXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzdWZmaXhSZXNvdXJjZUtleSIsInN1YnN0cmluZyIsImlsbHVzdHJhdGVkSW5mb3JtYXRpb24iLCJnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyIsImdldFF1aWNrRmlsdGVyIiwiZ2V0VGV4dCIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb1NlYXJjaFJlc3VsdHMiLCJmaWx0ZXJBc3NvY2lhdGlvbiIsImdldEZpbHRlciIsImhhc0ZpbHRlck9yU2VhcmNoIiwic2VhcmNoIiwiZmlsdGVycyIsInRlc3QiLCJOb0RhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJsaXZlTW9kZSIsImdldE5vRGF0YU1lc3NhZ2VNb2RlIiwiY3VycmVudE5vRGF0YSIsImhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVxdWVzdGVkQXR0YWNoZWQiLCJhdHRhY2hEYXRhUmVxdWVzdGVkIiwic2V0VGltZW91dCIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsImhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkIiwiYkRhdGFSZWNlaXZlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWwiLCJjb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwiLCJlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlIiwiZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUiLCJpc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSIsImRhdGFNb2RlbCIsImlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwiaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCIsIm9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsInByb21pc2UiLCJyZWJpbmQiLCJvQmluZGluZ0luZm8iLCJiSXNTdXNwZW5kZWQiLCJUYWJsZVJ1bnRpbWUiLCJjbGVhclNlbGVjdGlvbiIsImFwcGx5Iiwib25UYWJsZUJvdW5kIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiZmV0Y2hQcm9wZXJ0aWVzIiwicHJlSW5pdCIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJxdWlja0ZpbHRlciIsImNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIkNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00iLCJfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyIsIl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsIl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCIsImZpcmVFdmVudCIsImNvbGxlY3Rpb25CaW5kaW5nSW5mbyIsInF1aWNrRmlsdGVyS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJhdHRhY2hlZEV2ZW50cyIsImdldEF0dGFjaGVkRXZlbnRzIiwiY29udGV4dCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwic2V0QXR0YWNoRXZlbnRzIiwiZSIsInNvcnRlcnMiLCJzb3J0ZXIiLCJuZXdTb3J0ZXJzVG9CZUFwcGxpZWQiLCJ0YWJsZVByb3BlcnRpZXMiLCJ0YWJsZVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwidW5pdFNvcnRlckF2YWlsYWJsZSIsInNvcnQiLCJTb3J0ZXIiLCJnZXRGaWx0ZXJzIiwidXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQiLCJnZXRQYWdlQ29udHJvbGxlciIsInJlY29tbWVuZGF0aW9ucyIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwidGFibGVEZWYiLCJyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsImFubm90YXRpb24iLCJlbnRpdHlUeXBlTmFtZSIsInBhcmFtZXRlcnMiLCIkc2VsZWN0IiwiZ2V0VmlldyIsImNvbnZlcnRlclR5cGUiLCJjYXJkcyIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgSnNDb250cm9sVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbywgZGVmYXVsdCBhcyBUYWJsZSwgVmlzdWFsU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyB2NENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUXVpY2tGaWx0ZXJTZWxlY3RvciBmcm9tIFwiLi4vUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4uL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzYXAudWkubWRjLlRhYmxlLlxuICogPGgzPjxiPk5vdGU6PC9iPjwvaDM+XG4gKiBUaGUgY2xhc3MgaXMgZXhwZXJpbWVudGFsIGFuZCB0aGUgQVBJIGFuZCB0aGUgYmVoYXZpb3IgYXJlIG5vdCBmaW5hbGl6ZWQuIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS42OS4wXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGVCYXNlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgRmllbGRHcm91cCBjb2x1bW4uXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgRmllbGRHcm91cCBpcyB0aGUgd2lkdGggb2YgdGhlIHdpZGVzdCBwcm9wZXJ0eSBjb250YWluZWQgaW4gdGhlIEZpZWxkR3JvdXAgKGluY2x1ZGluZyB0aGUgbGFiZWwgaWYgc2hvd0RhdGFGaWVsZHNMYWJlbCBpcyB0cnVlKVxuXHQgKiBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsY3VsYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uLm1pbldpZHRoIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNREN0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIEN1cnJlbnQgcHJvcGVydHlJbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXA6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6RmllbGRHcm91cDo6XCIpID09PSAwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0YWJsZS5nZXRDb2x1bW5zKCkuZmluZCgoY29sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2wuZ2V0UHJvcGVydHlLZXkoKSA9PT0gcHJvcGVydHlJbmZvLmtleTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbCA9IGNvbHVtbiA/IGNvbHVtbi5kYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQocHJvcGVydHlJbmZvLmFubm90YXRpb25QYXRoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhRGF0YSA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy5jb252ZXJ0ZWRUeXBlcztcblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9EYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRjb25zdCBhRmllbGRXaWR0aDogbnVtYmVyW10gPSBbXTtcblx0XHRcdG9GaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAob0RhdGE6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0bGV0IG9EYXRhRmllbGRXaWR0aDogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9O1xuXHRcdFx0XHRzd2l0Y2ggKG9EYXRhLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGQoXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgob0RhdGEuTGFiZWw/LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0RhdGFGaWVsZFdpZHRoISkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBvYmplY3QsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0aWYgKHByb3BlcnR5LmFubm90YXRpb25QYXRoICYmIG1ldGFNb2RlbCkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5LmFubm90YXRpb25QYXRofUBgKTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZCAmJiBkYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSkge1xuXHRcdFx0XHRcdHByb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyB8fCB7fSwge1xuXHRcdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0XHRnYXA6IHRhYmxlQVBJLmdldFByb3BlcnR5KFwicmVhZE9ubHlcIikgPyAwIDogNFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0OiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLFxuXHRcdHVuaXQ/OiBzdHJpbmcsXG5cdFx0dW5pdFRleHQ/OiBzdHJpbmcsXG5cdFx0dGltZXpvbmVUZXh0Pzogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IG9UYWJsZUFQSTogRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+IHwgbnVsbCA9IHRhYmxlID8gKHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdF9nZXRUYWJsZUFQSSh0YWJsZTogVGFibGUpOiBUYWJsZUFQSSB7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkpIHtcblx0XHRcdHRhYmxlQVBJID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZS5nZXRJZCgpICsgXCI6OlRhYmxlXCIpIGFzIFRhYmxlQVBJO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVBUEk7XG5cdH0sXG5cblx0Z2V0Q29sdW1uc0ZvcjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFRhYmxlQ29sdW1uW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdHJldHVybiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRcdFx0dGFibGVBUEkuc2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyhmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHVwZGF0aW5nIGZldGNoZWQgcHJvcGVydGllczogJHtlcnIgYXMgc3RyaW5nfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkodGFibGUsIGVudGl0eVR5cGVQYXRoLCBtZXRhTW9kZWwsIGFwcENvbXBvbmVudCkudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRzdWJGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW11cblx0XHQpIHtcblx0XHRcdHRhYmxlQVBJLnNldENhY2hlZFByb3BlcnR5SW5mb3Moc3ViRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdFx0cmV0dXJuIHN1YkZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdH0pO1xuXHR9LFxuXHRzZXROb0RhdGFJbmZvcm1hdGlvbjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGNvbnN0IG5vRGF0YUFnZ3JlZ2F0aW9uID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiBub0RhdGFBZ2dyZWdhdGlvbiAhPSBcInN0cmluZ1wiICYmIChub0RhdGFBZ2dyZWdhdGlvbiBhcyBDb250cm9sKT8uaXNBKFwic2FwLm0uSWxsdXN0cmF0ZWRNZXNzYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlID0gbm9EYXRhQWdncmVnYXRpb24gYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRcdFx0Ly8gV2Ugb3ZlcnJpZGUgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0VGl0bGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24udGl0bGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXREZXNjcmlwdGlvbihpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblR5cGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uVHlwZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblNpemUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2Uoe1xuXHRcdFx0XHQuLi5pbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvblxuXHRcdFx0fSk7XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2U6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cblx0XHRjb25zdCBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3Mge1xuXHRcdFx0aWYgKHRhYmxlLmRhdGEoXCJoaWRkZW5GaWx0ZXJzXCIpIHx8IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmlsdGVyQXNzb2NpYXRpb24gPSB0YWJsZS5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBoYXNGaWx0ZXJPclNlYXJjaCA9IHRhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgdGFibGVGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aDtcblx0XHRpZiAoZmlsdGVyQXNzb2NpYXRpb24gJiYgIS9CYXNpY1NlYXJjaCQvLnRlc3QoZmlsdGVyQXNzb2NpYXRpb24pKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhIEZpbHRlckJhciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBUYWJsZSAoYmFzaWMgc2VhcmNoIG9uIHRvb2xCYXIgaXMgZXhjbHVkZWQpXG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0Ly8gY2hlY2sgaWYgdGFibGUgaGFzIGFueSBGaWx0ZXJiYXIgZmlsdGVycyBvciBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdC8vY2hlY2sgaWYgdGFibGUgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9EQVRBXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSkge1xuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID0gdGFibGVBUEkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGRhdGFSZXF1ZXN0ZWQgZXZlbnQgZm9yIHRoZSB0YWJsZSBiaW5kaW5nIHRvIHNldCB1cCB0YWJsZSBkZWZhdWx0cy5cblx0ICogQHBhcmFtIG9UYWJsZSBUaGUgTURDIHRhYmxlIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgZm9yIHRoZSB0YWJsZVxuXHQgKi9cblx0aGFuZGxlVGFibGVEYXRhUmVxdWVzdGVkOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlcXVlc3RlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRBdHRhY2hlZFwiKTtcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmICFiRGF0YVJlcXVlc3RlZEF0dGFjaGVkKSB7XG5cdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKCgpID0+IHtcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkVGltZW91dFNldFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRUaW1lb3V0U2V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHRvVGFibGVBUEkudGFibGVEZWZhdWx0c1Byb21pc2UgPSAob1RhYmxlQVBJLmdldFRhYmxlRGVmYXVsdHMob1RhYmxlKSA/PyBQcm9taXNlLnJlc29sdmUoe30pKSBhcyBQcm9taXNlPG9iamVjdD47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGVmYXVsdERhdGEgPSBhd2FpdCB0YWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZT8uY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGFibGVBUEkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSBvcHRpbWlzdGljIGJhdGNoIHByb21pc2UgZm9yIHRoZSBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZShuZXcgUHJvbWlzZUtlZXBlcjxib29sZWFuPigpKTtcblx0XHRcdHRoaXMuc2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwoY29udHJvbGxlciwgbW9kZWwsIHRhYmxlQVBJKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuYWJsZSB0aGUgb3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlmIGF2YWlsYWJsZS5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqL1xuXHRlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlID1cblx0XHRcdHRhYmxlICYmIFRhYmxlVXRpbHMuaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCh0YWJsZSwgY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcik7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0dGFibGVBUEkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblxuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IHRhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0dGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVUYWJsZURhdGFSZWNlaXZlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0cHJlSW5pdDogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiAoVGFibGVEZWxlZ2F0ZUJhc2UucHJlSW5pdCBhcyAodGFibGU6IFRhYmxlKSA9PiBQcm9taXNlPHZvaWQ+KS5hcHBseSh0aGlzLCBbdGFibGVdKS50aGVuKCgpID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgb24gdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFNldCB0aGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgZmFzdENyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChmYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgdW5rbm93biBhcyBDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkgYXMgUXVpY2tGaWx0ZXJTZWxlY3RvciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgPSBuZXcgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJKGJpbmRpbmdJbmZvKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFt0YWJsZSwgYmluZGluZ0luZm9dKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5faGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLnNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQodGFibGUsIGJpbmRpbmdJbmZvKTtcblxuXHRcdFx0dGFibGVBUEk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHtcblx0XHRcdFx0Y29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEksXG5cdFx0XHRcdHF1aWNrRmlsdGVyS2V5OiBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyW10gfCB1bmRlZmluZWQgPSBiaW5kaW5nSW5mby5zb3J0ZXI7XG5cdFx0Y29uc3QgbmV3U29ydGVyc1RvQmVBcHBsaWVkOiBTb3J0ZXJbXSA9IFtdO1xuXHRcdGlmIChzb3J0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3VwZGF0ZUF2YWlsYWJsZUNhcmRzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBjYXJkczogV3JhcHBlZENhcmRbXSA9IFtdO1xuXHRcdFx0YXdhaXQgdGFibGVBUEkuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyID0gbmV3IENvbGxhYm9yYXRpb25NYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSBhcHBDb21wb25lbnQuZ2V0SWQoKTtcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKClcblx0XHRcdFx0LmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCwgdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCkuZ2V0SWQoKSk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhlIGhvb2sgaW1wbGVtZW50ZWQgYnkgTURDIHRoYXQgd2UgY2FuIG92ZXJyaWRlLlxuXHQgKiBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUgcHJvcGVydGllcyB0byBiZSByZXF1ZXN0ZWQgaW4gdGhlIE1EQyB0YWJsZSAoTWFpbiBjYXNlIGlzIGZvciB0aGUgYW5hbHl0aWNhbCB0YWJsZSkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWUgdG8gYmUgcmVxdWVzdGVkLlxuXHQgKi9cblx0Z2V0SW5SZXN1bHRQcm9wZXJ0eUtleXM6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHRjb25zdCBhbGxLa2V5c1JlcXVlc3RlZCA9IHRoaXMuY2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkKHRhYmxlQVBJKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0Ly8gaWYgYSByb3dwcmVzcyBpcyBvdmVycmlkZGVuLCB3ZSAgc2hvdWxkIGVuYWJsZSB0aGUgbmF2aWdhdGlvbiBhdCB0aGUgbm9kZSBsZXZlbFxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc05vZGVMZXZlbE5hdmlnYWJsZVwiLCB0YWJsZUFQSS5vdmVycmlkZVJvd1ByZXNzID8gdHJ1ZSA6IGFsbEtrZXlzUmVxdWVzdGVkKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdClcblx0XHRcdFx0XHQvLyBmb3IgYW5hbHl0aWMgdGFibGVzIHdpdGggYWdncmVnYXRpb25PbkxlYWZMZXZlbCB3ZSBzaG91bGQgbm90IHJlcXVlc3QgdGhlIHNlbWFudGljS2V5IGV4cGVjdGVkIHdoZW4gYWxsIGtleXMgYXJlIHJlcXVlc3RlZCAtPiAgaXQgd2lsbCBwZXJtaXRzIHRvIG5hdmlnYXRlIGZyb20gYSBub2RlIGxldmVsIHdoZW4gc2VtYW50aWNLZXkgYXJlIGVuYWJsZWRcblx0XHRcdFx0XHQvLyByZXN0cmljdGlvbiBhcmUgYWxzbyBleGNsdWRlZCBhcyB3ZSBjYW5ub3QgZGVzdGluZ3Vpc2ggYmV0d2VlbiBhIG5vZGUgYW5kIGEgYWdncmVnYXRpb24gbGV2ZWxcblxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWxsIGtleXMoKSBleGNlcHRlZCBJc0FjdGl2ZUVudGl0eSkgYXJlIHJlcXVlc3RlZCBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgdGFibGUgQVBJXG5cdCAqIEByZXR1cm5zICBUcnVlIGlmIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkOiBmdW5jdGlvbiAodGFibGVBUEk6IFRhYmxlQVBJKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYWxsQ29sdW1ucyA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMgYXMgKFRhYmxlQ29sdW1uICYgeyBpc0tleTogYm9vbGVhbjsgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfSlbXTtcblx0XHRjb25zdCBrZXlQcm9wZXJ0eU5hbWVzID0gYWxsQ29sdW1uc1xuXHRcdFx0LmZpbHRlcigoYykgPT4gYy5pc0tleSAmJiBjLnJlbGF0aXZlUGF0aCAmJiBjLnJlbGF0aXZlUGF0aCAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0Lm1hcCgoYykgPT4gYy5yZWxhdGl2ZVBhdGgpO1xuXG5cdFx0Y29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRhYmxlXG5cdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHQubWFwKChjb2x1bW4pID0+IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSkpO1xuXG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2wuZXh0ZW5zaW9uPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uZm9yRWFjaCgoYWRkaXRpb25hbENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBhZGRpdGlvbmFsQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChhZGRpdGlvbmFsQ29sdW1uPy5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoYWRkaXRpb25hbENvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghY29sdW1uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbiBpdHNlbGZcblx0XHRcdHByb2Nlc3NDb2x1bW4oY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbnMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcz8uZm9yRWFjaCgocmVsYXRlZENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSByZWxhdGVkQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0NvbHVtbihyZWxhdGVkQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgYmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSShvVGFibGUpO1xuXHRcdGNvbnN0IHJvd0JpbmRpbmdJbmZvID0gdGFibGVBUEkuZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvKCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgdGFibGVDYW5CZUluSW5saW5lRWRpdCA9IGZhbHNlO1xuXHRcdGlmIChcblx0XHRcdGJpbmRpbmdDb250ZXh0ID09PSB1bmRlZmluZWQgJiZcblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcImlzRWRpdGFibGVcIikgPT09IGZhbHNlICYmXG5cdFx0XHRvVGFibGUuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKT8uZ2V0UHJvcGVydHkoXCIvaXNJbmxpbmVFZGl0RW5hYmxlZFwiKVxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChiaW5kaW5nQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldEJpbmRpbmcoKS5nZXRVcGRhdGVHcm91cElkKCkgPT0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGFibGVDYW5CZUluSW5saW5lRWRpdCkge1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm93QmluZGluZ0luZm87XG5cdH0sXG5cdF9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRPYmplY3QuYXNzaWduKG9CaW5kaW5nSW5mbywgdGhpcy5fY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlKG9UYWJsZSkpO1xuXHRcdC8qKlxuXHRcdCAqIEJpbmRpbmcgaW5mbyBtaWdodCBiZSBzdXNwZW5kZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBmaXJzdCBiaW5kUm93cyBpcyBjYWxsZWQ6XG5cdFx0ICogVG8gYXZvaWQgZHVwbGljYXRlIHJlcXVlc3RzIGJ1dCBzdGlsbCBoYXZlIGEgYmluZGluZyB0byBjcmVhdGUgbmV3IGVudHJpZXMuXHRcdFx0XHQgKlxuXHRcdCAqIEFmdGVyIHRoZSBpbml0aWFsIGJpbmRpbmcgc3RlcCwgZm9sbG93IHVwIGJpbmRpbmdzIHNob3VsZCBubyBsb25nZXIgYmUgc3VzcGVuZGVkLlxuXHRcdCAqL1xuXHRcdGlmIChvVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRvQmluZGluZ0luZm8uc3VzcGVuZGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIFRoZSBwcmV2aW91c2x5IGFkZGVkIGhhbmRsZXIgZm9yIHRoZSBldmVudCAnZGF0YVJlY2VpdmVkJyBpcyBub3QgYW55bW9yZSB0aGVyZVxuXHRcdC8vIHNpbmNlIHRoZSBiaW5kaW5nSW5mbyBpcyByZWNyZWF0ZWQgZnJvbSBzY3JhdGNoIHNvIHdlIG5lZWQgdG8gc2V0IHRoZSBmbGFnIHRvIGZhbHNlIGluIG9yZGVyXG5cdFx0Ly8gdG8gYWdhaW4gYWRkIHRoZSBoYW5kbGVyIG9uIHRoaXMgZXZlbnQgaWYgbmVlZGVkXG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCBvRmlsdGVyO1xuXHRcdGNvbnN0IG9GaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9UYWJsZSk7XG5cdFx0Ly8gUHJlcGFyZSBiaW5kaW5nIGluZm8gd2l0aCBmaWx0ZXIvc2VhcmNoIHBhcmFtZXRlcnNcblx0XHRpZiAob0ZpbHRlckluZm8uZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IG9GaWx0ZXJJbmZvLmZpbHRlcnMsIGFuZDogdHJ1ZSB9KTtcblx0XHR9XG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EYXRhU3RhdGVJbmRpY2F0b3IgPSBvVGFibGUuZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKCk7XG5cdFx0aWYgKG9EYXRhU3RhdGVJbmRpY2F0b3IgJiYgb0RhdGFTdGF0ZUluZGljYXRvci5pc0ZpbHRlcmluZygpKSB7XG5cdFx0XHQvLyBJbmNsdWRlIGZpbHRlcnMgb24gbWVzc2FnZVN0cmlwXG5cdFx0XHRpZiAoKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiAob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkuY29uY2F0KG9GaWx0ZXJJbmZvLmZpbHRlcnMpLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5hZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0fSxcblxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sIGZpbHRlcj86IEZpbHRlcikge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRhYmxlLmdldFBheWxvYWQoKSBhcyB7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuIH07XG5cblx0XHRpZiAocGF5bG9hZD8uZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyT25BY3RpdmUgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiLCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IHRydWUgfSk7XG5cdFx0XHRpZiAoYmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IFtmaWx0ZXJPbkFjdGl2ZSwgYmluZGluZ0luZm8uZmlsdGVyc10sIGFuZDogdHJ1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXJPbkFjdGl2ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCBKc0NvbnRyb2xUcmVlTW9kaWZpZXIsXG5cdFx0dGFibGVJZDogc3RyaW5nXG5cdCk6IFByb21pc2U8bnVsbCB8IENvbnRyb2wgfCBDb250cm9sW10gfCBFbGVtZW50PiB7XG5cdFx0Y29uc3Qgc2xvdENvbHVtbnNYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuXHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldFNsb3RDb2x1bW4odGFibGVJZCwgY29sdW1uSW5mbywgZmFsc2UpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0fSksXG5cdFx0XHRcInRleHQveG1sXCJcblx0XHQpO1xuXHRcdGlmICghc2xvdENvbHVtbnNYTUwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHNsb3RYTUwgPSBzbG90Q29sdW1uc1hNTC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNsb3RcIilbMF07XG5cblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXG5cdF9nZXRFeHBvcnRGb3JtYXQ6IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZykge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lKCk7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSgpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZIUmVsZXZhbnRGaWVsZHM6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc01ldGFkYXRhUGF0aDogc3RyaW5nLCBzQmluZGluZ1BhdGg/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0bGV0IGFGaWVsZHM6IHN0cmluZ1tdID0gW10sXG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhZGF0YVBhdGgpO1xuXG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEludm9rZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZCB1c2luZyB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgYWRkZWRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSB0aGUgZmxleGliaWxpdHkgQVBJXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgSW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBJbnN0YW5jZSBvZiB0aGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuXHQgKi9cblx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudCxcblx0XHRwcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdmlldz86IEZFVmlldyB9XG5cdCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRNZXRhTW9kZWwobVByb3BlcnR5QmFnKSxcblx0XHRcdG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdHNUYWJsZUlkID0gb01vZGlmaWVyLmdldElkKHRhYmxlKSxcblx0XHRcdGFDb2x1bW5zID0gKHRhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSA/IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSBhcyBUYWJsZSkgOiBudWxsLFxuXHRcdFx0dGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSBhcyBUYWJsZSk7XG5cdFx0aWYgKCFhQ29sdW1ucykge1xuXHRcdFx0Ly8gV2UgcmV0dXJuIG51bGwgaGVyZSBiZWNhdXNlIGV2ZXJ5dGhpbmcgc2hvdWxkIGFwcGx5IGF0IHJ1bnRpbWVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKCFjb2x1bW5JbmZvKSB7XG5cdFx0XHRMb2cuZXJyb3IoYCR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGZvdW5kIHdoaWxlIGFkZGluZyBjb2x1bW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0TG9nLndhcm5pbmcoYENvbHVtbiBmb3IgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgYWRkZWQgYmVjYXVzZSBpdCdzIGhpZGRlbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIHRydWUpO1xuXHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgdGFibGUsIGFDb2x1bW5zLCBjb2x1bW5JbmZvKTtcblx0XHRjb25zdCBzUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwibWV0YVBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBvVGFibGVDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpITtcblx0XHQvLyBJZiB2aWV3IGlzIG5vdCBwcm92aWRlZCB0cnkgdG8gZ2V0IGl0IGJ5IGFjY2Vzc2luZyB0byB0aGUgcGFyZW50YWwgaGllcmFyY2h5XG5cdFx0Ly8gSWYgaXQgZG9lc24ndCB3b3JrICh0YWJsZSBpbnRvIGFuIHVuYXR0YWNoZWQgT1Agc2VjdGlvbikgZ2V0IHRoZSB2aWV3IHZpYSB0aGUgQXBwQ29tcG9uZW50XG5cdFx0Y29uc3QgdmlldyA9XG5cdFx0XHRtUHJvcGVydHlCYWcudmlldyB8fFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSBhcyBVSTVFbGVtZW50KSB8fFxuXHRcdFx0KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgPyBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQoY29sdW1uSW5mbyBhcyBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LCB2aWV3LCBvTW9kaWZpZXIsIHNUYWJsZUlkKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkNvbXB1dGVkXCIpIHtcblx0XHRcdGNvbnN0IGVuYWJsZUFuYWx5dGljcyA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlIGFzIFRhYmxlKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3M7XG5cdFx0XHRyZXR1cm4gZ2V0Q29tcHV0ZWRDb2x1bW4oc1RhYmxlSWQsIGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgb1RhYmxlQ29udGV4dCwgZW5hYmxlQW5hbHl0aWNzKTtcblx0XHR9XG5cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0bGV0IHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKCFwcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlIHByb3BlcnR5SW5mb3MgYXJlIG5vdCBmZXRjaGVkIHlldCwgd2UgbmVlZCB0byBmZXRjaCB0aGVtXG5cdFx0XHQvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhYmxlIGlzIG5vdCBjcmVhdGVkIHlldFxuXHRcdFx0YXdhaXQgdGhpcy5mZXRjaFByb3BlcnRpZXModGFibGUgYXMgTURDVGFibGUpO1xuXHRcdFx0cHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gcHJvcGVydHlJbmZvcy5maW5kKGZ1bmN0aW9uIChwcm9wSW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdFx0cmV0dXJuIHByb3BJbmZvLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwcm9wZXJ0eUluZm8hLmFubm90YXRpb25QYXRoKSE7XG5cblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSBhc3luYyAoXG5cdFx0XHRvSW5Qcm9wZXJ0eUluZm86IHVua25vd24sXG5cdFx0XHRvVmlldzogRkVWaWV3XG5cdFx0KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT4gPT4ge1xuXHRcdFx0bGV0IGJEaXNwbGF5TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzVGFibGVUeXBlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZyB8IGJvb2xlYW4+KHRhYmxlLCBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwidGFibGVUeXBlXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwiY3JlYXRpb25Nb2RlXCIsIG9Nb2RpZmllcilcblx0XHRcdF0pLnRoZW4oYXN5bmMgKGFDdXN0b21EYXRhOiAoc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZClbXSkgPT4ge1xuXHRcdFx0XHRiRGlzcGxheU1vZGUgPSBhQ3VzdG9tRGF0YVswXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzVGFibGVUeXBlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzFdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c0NyZWF0aW9uTW9kZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsyXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFJlYWQgT25seSBhbmQgQ29sdW1uIEVkaXQgTW9kZSBjYW4gYm90aCBoYXZlIHRocmVlIHN0YXRlXG5cdFx0XHRcdC8vIFVuZGVmaW5lZCBtZWFucyB0aGF0IHRoZSBmcmFtZXdvcmsgZGVjaWRlcyB3aGF0IHRvIGRvXG5cdFx0XHRcdC8vIFRydWUgLyBEaXNwbGF5IG1lYW5zIGFsd2F5cyByZWFkIG9ubHlcblx0XHRcdFx0Ly8gRmFsc2UgLyBFZGl0YWJsZSBtZWFucyBlZGl0YWJsZSBidXQgd2hpbGUgc3RpbGwgcmVzcGVjdGluZyB0aGUgbG93IGxldmVsIHByaW5jaXBsZSAoaW1tdXRhYmxlIHByb3BlcnR5IHdpbGwgbm90IGJlIGVkaXRhYmxlKVxuXHRcdFx0XHRpZiAoYkRpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGJEaXNwbGF5TW9kZSAhPT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0XHRiRGlzcGxheU1vZGUgPSBiRGlzcGxheU1vZGUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0XHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5lbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0XHRcdFx0XHRyZWFkT25seTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlOiBzVGFibGVUeXBlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGlkOiBzVGFibGVJZCxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHByb3BlcnR5SW5mb05hbWUsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB7IG5hbWU6IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIH0sXG5cdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2NvbHVtbkluZm9cIilcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZm5UZW1wbGF0ZUZyYWdtZW50KHByb3BlcnR5SW5mbywgdmlldyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgdGhlIFRhYmxlJ3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuXHQgKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBUYWJsZXMgZmlsdGVyIHBlcnNvbmFsaXphdGlvbi5cblx0ICovXG5cdGdldEZpbHRlckRlbGVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdGFwaVZlcnNpb246IDJcblx0XHRcdH0sXG5cdFx0XHRGaWx0ZXJCYXJEZWxlZ2F0ZSxcblx0XHRcdHtcblx0XHRcdFx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKG9QYXJlbnRDb250cm9sOiBDb250cm9sLCBzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eUluZm9OYW1lLmluZGV4T2YoXCJQcm9wZXJ0eTo6XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBDb3JyZWN0IHRoZSBuYW1lIG9mIGNvbXBsZXggcHJvcGVydHkgaW5mbyByZWZlcmVuY2VzLlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5SW5mb05hbWUgPSBzUHJvcGVydHlJbmZvTmFtZS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRm9ybWF0IHRoZSB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyIC5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgRm9ybWF0dGVkIHRpdGxlIG9mIHRoZSBncm91cCBoZWFkZXIuXG5cdCAqL1xuXHRmb3JtYXRHcm91cEhlYWRlcih0YWJsZTogTURDVGFibGUsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gcHJvcGVydHlJbmZvcz8uZmluZCgob2JqKSA9PiB7XG5cdFx0XHRyZXR1cm4gb2JqLm5hbWUgPT09IHByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdC8qRm9yIGEgRGF0ZSwgRGF0ZVRpbWUsIEJvb2xlYW4gb3IgRGVjaW1hbCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGluIGV4dGVybmFsIGZvcm1hdCB1c2luZyBhIFVJNSB0eXBlIGZvciB0aGVcblx0ICAgICAgICBnaXZlbiBwcm9wZXJ0eSBwYXRoIHRoYXQgZm9ybWF0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSdzIEVETSB0eXBlIGFuZCBjb25zdHJhaW50cyovXG5cdFx0Y29uc3QgZGF0YUJhc2VUeXBlID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3BlcnR5SW5mbz8uZGF0YVR5cGUpLmJhc2VUeXBlO1xuXHRcdGNvbnN0IGV4dGVybmFsRm9ybWF0ID1cblx0XHRcdGRhdGFCYXNlVHlwZSA9PT0gXCJEYXRlVGltZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJEYXRlXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkJvb2xlYW5cIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiTnVtZXJpY1wiO1xuXHRcdGxldCB2YWx1ZTtcblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdFx0cmV0dXJuIGdldFJlc291cmNlTW9kZWwodGFibGUpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRVwiLCBbcHJvcGVydHlJbmZvPy5sYWJlbCwgdmFsdWVdKTtcblx0XHR9XG5cdFx0aWYgKHByb3BlcnR5SW5mbz8ubW9kZSkge1xuXHRcdFx0c3dpdGNoIChwcm9wZXJ0eUluZm8ubW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8/LnBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5wYXRoLCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrRkEsTUFBTUEsOEJBQThCLEdBQUcsK0JBQStCO0VBQ3RFLE1BQU1DLHFCQUFxQixHQUFHLGFBQWE7RUFDM0MsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxnQkFBZ0IsR0FBRyxpQkFBaUI7O0VBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLE9BU2VDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsRUFBRTtJQUNuREMsVUFBVSxFQUFFLENBQUM7SUFDYjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxtQ0FBbUMsRUFBRSxTQUFBQSxDQUNwQ0MsS0FBWSxFQUNaQyxZQUFvQyxFQUNwQ0MsYUFBdUMsRUFDdEM7TUFDRCxJQUFJRCxZQUFZLENBQUNFLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzNFLE1BQU1DLE1BQU0sR0FBR0wsS0FBSyxDQUFDTSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztVQUMvQyxPQUFPQSxHQUFHLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEtBQUtSLFlBQVksQ0FBQ0UsR0FBRztRQUNqRCxDQUFDLENBQUM7UUFDRixNQUFNTyxtQkFBbUIsR0FBR0wsTUFBTSxHQUFH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
|
|
1458
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiZGVsYXlGb3IiLCJkZWxheSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsIk9iamVjdCIsImFzc2lnbiIsIlRhYmxlRGVsZWdhdGVCYXNlIiwiYXBpVmVyc2lvbiIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwIiwidGFibGUiLCJwcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9zIiwia2V5IiwiaW5kZXhPZiIsImNvbHVtbiIsImdldENvbHVtbnMiLCJmaW5kIiwiY29sIiwiZ2V0UHJvcGVydHlLZXkiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiZGF0YSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnZlcnRlZE1ldGFEYXRhIiwiY29udmVydGVkVHlwZXMiLCJvRGF0YUZpZWxkIiwidGFyZ2V0T2JqZWN0Iiwib0ZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiYUZpZWxkV2lkdGgiLCJEYXRhIiwiZm9yRWFjaCIsIm9EYXRhIiwib0RhdGFGaWVsZFdpZHRoIiwiJFR5cGUiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJnZXRXaWR0aEZvckRhdGFGaWVsZCIsImxhYmVsV2lkdGgiLCJwcm9wZXJ0eVdpZHRoIiwiU2l6ZUhlbHBlciIsImdldEJ1dHRvbldpZHRoIiwiTGFiZWwiLCJ0b1N0cmluZyIsInB1c2giLCJuV2lkZXN0IiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJNYXRoIiwibWF4IiwidmlzdWFsU2V0dGluZ3MiLCJkZWVwRXh0ZW5kIiwid2lkdGhDYWxjdWxhdGlvbiIsInZlcnRpY2FsQXJyYW5nZW1lbnQiLCJtaW5XaWR0aCIsImNlaWwiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yQ29ubmVjdGVkRmllbGQiLCJtZXRhTW9kZWwiLCJkYXRhRmllbGQiLCJjb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJnZXRDb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IiLCJmaWVsZFdpZHRocyIsImdldENvbm5lY3RlZEZpZWxkc0RhdGEiLCJkYXRhRmllbGRXaWR0aCIsInNlcGFyYXRvcldpZHRoIiwiY29sdW1uV2lkdGgiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwIiwicHJvcGVydHkiLCJ0YWJsZUFQSSIsIl9nZXRUYWJsZUFQSSIsImdldE9iamVjdCIsImdhcCIsImdldFByb3BlcnR5IiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQiLCJ1bml0IiwidW5pdFRleHQiLCJ0aW1lem9uZVRleHQiLCJvVGFibGVBUEkiLCJ0ZXh0IiwiZ2V0UmVhZE9ubHkiLCJfY29tcHV0ZUxhYmVsIiwibGFiZWxNYXAiLCJsYWJlbCIsInByb3BlcnRpZXNXaXRoU2FtZUxhYmVsIiwiaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkiLCJzb21lIiwicHJvcCIsInBhdGgiLCJtb2RlIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJhZGRpdGlvbmFsTGFiZWxzIiwiZmlsdGVyYWJsZSIsImpvaW4iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwicHJvcGVydGllcyIsInAxM25Nb2RlIiwiZ2V0UDEzbk1vZGUiLCJzb3J0YWJsZSIsImdyb3VwYWJsZSIsInVuZGVmaW5lZCIsImNvbmNhdCIsIm5hbWUiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJkYXRhVHlwZSIsInZpc2libGUiLCJnZXRQYXJlbnQiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRJZCIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXMiLCJvVGFibGUiLCJvQ2FwYWJpbGl0aWVzIiwiWExTWCIsIm9Nb2RlbCIsIkRlbGVnYXRlVXRpbCIsImZldGNoTW9kZWwiLCJ0aGVuIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsImNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0ZpbHRlcmFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwicmVsYXRpdmVQYXRoIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImlzUGFydE9mQ3VzdG9tQ29sdW1uIiwiaXNDb25zdGFudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsImFwcENvbXBvbmVudCIsInNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NvbXBsZXhUeXBlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImJGaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJnZXRDdXN0b21EYXRhIiwiZ2V0TG9jYWxpemVkVGV4dCIsInRvb2x0aXAiLCJfZ2V0VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsImJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwic3RhcnRzV2l0aCIsIk1vZGVsSGVscGVyIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsIl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uSW5mbyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwiLCJfb1RhYmxlIiwiX29Db2x1bW5JbmZvIiwiYVZpc2libGVDb2x1bW5zIiwib0ludGVybmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNJbnRlcm5hbFBhdGgiLCJnZXRQYXRoIiwiaW5kZXgiLCJzZXRQcm9wZXJ0eSIsIl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJlbnRpdHlUeXBlUGF0aCIsImZldGNoZWRQcm9wZXJ0aWVzIiwiZGF0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwibm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwiZGVsYXlUaW1lIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9GaWx0ZXJSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9FbnRyaWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJsaXZlTW9kZSIsImdldE5vRGF0YU1lc3NhZ2VNb2RlIiwiY3VycmVudE5vRGF0YSIsImhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVxdWVzdGVkQXR0YWNoZWQiLCJhdHRhY2hEYXRhUmVxdWVzdGVkIiwiZ2V0SXNFZGl0YWJsZSIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsImhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkIiwiYkRhdGFSZWNlaXZlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWwiLCJjb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwiLCJlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlIiwiZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUiLCJpc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSIsImlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwiaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCIsIm9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsInByb21pc2UiLCJyZWJpbmQiLCJvQmluZGluZ0luZm8iLCJiSXNTdXNwZW5kZWQiLCJUYWJsZVJ1bnRpbWUiLCJjbGVhclNlbGVjdGlvbiIsImFwcGx5Iiwib25UYWJsZUJvdW5kIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiZmV0Y2hQcm9wZXJ0aWVzIiwicHJlSW5pdCIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJxdWlja0ZpbHRlciIsImNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIkNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00iLCJfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyIsIl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsIl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCIsImZpcmVFdmVudCIsImNvbGxlY3Rpb25CaW5kaW5nSW5mbyIsInF1aWNrRmlsdGVyS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJhdHRhY2hlZEV2ZW50cyIsImdldEF0dGFjaGVkRXZlbnRzIiwiY29udGV4dCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwic2V0QXR0YWNoRXZlbnRzIiwiZSIsInNvcnRlcnMiLCJzb3J0ZXIiLCJuZXdTb3J0ZXJzVG9CZUFwcGxpZWQiLCJ0YWJsZVByb3BlcnRpZXMiLCJ0YWJsZVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwidW5pdFNvcnRlckF2YWlsYWJsZSIsInNvcnQiLCJTb3J0ZXIiLCJnZXRGaWx0ZXJzIiwidXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQiLCJnZXRQYWdlQ29udHJvbGxlciIsInJlY29tbWVuZGF0aW9ucyIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwidGFibGVEZWYiLCJyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsImFubm90YXRpb24iLCJlbnRpdHlUeXBlTmFtZSIsInBhcmFtZXRlcnMiLCIkc2VsZWN0IiwiZ2V0VmlldyIsImNvbnZlcnRlclR5cGUiLCJjYXJkcyIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiZ2V0UXVlcnlPcHRpb25zRnJvbVBhcmFtZXRlcnMiLCIkc2VhcmNoIiwidXBkYXRlQmluZGluZyIsIiQkZ2V0S2VlcEFsaXZlQ29udGV4dCIsImNvbGxlY3Rpb25QYXRoIiwiaW50ZXJuYWxNb2RlbCIsImtlcHRBbGl2ZUxpc3RzIiwibmVlZE1hbnVhbFJlZnJlc2giLCJ2aWV3IiwibWFudWFsVXBkYXRlUHJvcGVydHlLZXkiLCJwZW5kaW5nTWFudWFsVXBkYXRlIiwibmV3U29ydGVycyIsInN0cmluZ2lmeSIsInZpZXdEYXRhIiwib2xkRmlsdGVycyIsInByZXZpb3VzU29ydGVycyIsImZpbHRlck5vdENoYW5nZWQiLCJkZWVwRXF1YWwiLCJMUk11bHRpVmlld0VuYWJsZWQiLCJ2aWV3cyIsImVuYWJsZUFuYWx5dGljcyIsInNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJzZXRHcm91cENvbmRpdGlvbnMiLCJzZXRUYWJsZUJpbmRpbmdJbmZvIiwic2V0RG93bmxvYWRVcmwiLCJyZXF1ZXN0UmVmcmVzaCIsImdldEdyb3VwSWQiLCJmaW5hbGx5Iiwic3RvcmVkRXZlbnRzIiwiX3JlZiIsImV2ZW50SWQiLCJjYWxsYmFjayIsImxpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlIiwicm93QmluZGluZ0luZm8iLCJnZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8iLCJiaW5kaW5nQ29udGV4dCIsInRhYmxlQ2FuQmVJbklubGluZUVkaXQiLCJnZXRCaW5kaW5nIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIklOTElORUVESVRfVVBEQVRFR1JPVVBJRCIsIiQkdXBkYXRlR3JvdXBJZCIsInN1c3BlbmRlZCIsIm9GaWx0ZXIiLCJvRmlsdGVySW5mbyIsIkZpbHRlciIsImFuZCIsImJpbmRpbmdQYXRoIiwib0RhdGFTdGF0ZUluZGljYXRvciIsImdldERhdGFTdGF0ZUluZGljYXRvciIsImlzRmlsdGVyaW5nIiwidXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkiLCJhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZmlsdGVySW5mbyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJwYXlsb2FkIiwiZ2V0UGF5bG9hZCIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJPbkFjdGl2ZSIsIm9wZXJhdG9yIiwidmFsdWUxIiwiX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50IiwibW9kaWZpZXIiLCJ0YWJsZUlkIiwic2xvdENvbHVtbnNYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJqc3giLCJyZW5kZXJBc1hNTCIsImdldFNsb3RDb2x1bW4iLCJzbG90WE1MIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJvVGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5vZGVOYW1lIiwicmVwbGFjZVdpdGgiLCJyZW1vdmUiLCJyZXN1bHRYTUwiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwibW9kZWxzIiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCIsInRhcmdldHMiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiRXhjZWxGb3JtYXQiLCJnZXRFeGNlbERhdGVmcm9tSlNEYXRlIiwiZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lIiwiZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSIsIl9nZXRWSFJlbGV2YW50RmllbGRzIiwic01ldGFkYXRhUGF0aCIsInNCaW5kaW5nUGF0aCIsImFGaWVsZHMiLCJvRGF0YUZpZWxkRGF0YSIsIiRraW5kIiwib1ZhbHVlIiwiaUluZGV4IiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4iLCJhQ29sdW1ucyIsImFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbiIsInNBZGRWaXNpYmxlQ29sdW1uTmFtZSIsInNWaXNpYmxlQ29sdW1uTmFtZSIsImJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQiLCJzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciIsImkiLCJqIiwicmVtb3ZlSXRlbSIsIm9Qcm9wZXJ0eUluZm9OYW1lIiwibVByb3BlcnR5QmFnIiwiZG9SZW1vdmVJdGVtIiwib01vZGlmaWVyIiwic0RhdGFQcm9wZXJ0eSIsImluc2VydEFnZ3JlZ2F0aW9uIiwiX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzIiwiX2dldE1ldGFNb2RlbCIsIl9nZXRHcm91cElkIiwic1JldHJpZXZlZEdyb3VwSWQiLCJfaW5zZXJ0QWdncmVnYXRpb24iLCJvVmFsdWVIZWxwIiwiYWRkSXRlbSIsInByb3BlcnR5SW5mb05hbWUiLCJzVGFibGVJZCIsIndhcm5pbmciLCJzUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJvVGFibGVDb250ZXh0IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJnZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwicHJvcEluZm8iLCJvUHJvcGVydHlDb250ZXh0IiwiZm5UZW1wbGF0ZUZyYWdtZW50Iiwib0luUHJvcGVydHlJbmZvIiwib1ZpZXciLCJiRGlzcGxheU1vZGUiLCJzVGFibGVUeXBlQ3VzdG9tRGF0YSIsInNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIiwiYWxsIiwiYUN1c3RvbURhdGEiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsInJlYWRPbmx5IiwidGFibGVUeXBlIiwiaWQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiY29sbGVjdGlvbiIsImNyZWF0aW9uTW9kZSIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwidGhpcyIsInRhYmxlQ29sbGVjdGlvbiIsImhhbmRsZXJQcm92aWRlciIsIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIiLCJjb2xsZWN0aW9uRW50aXR5IiwiY29tcHV0ZWRDb2x1bW5YTUwiLCJnZXRDb2x1bW5UZW1wbGF0ZSIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50IiwiZGVzdHJveSIsImdldEZpbHRlckRlbGVnYXRlIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJvUGFyZW50Q29udHJvbCIsInNQcm9wZXJ0eUluZm9OYW1lIiwicmVwbGFjZSIsImdldFR5cGVNYXAiLCJmb3JtYXRHcm91cEhlYWRlciIsIm9iaiIsImRhdGFCYXNlVHlwZSIsImV4dGVybmFsRm9ybWF0IiwiVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXRXaXRoQnJhY2tldHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29ubmVjdGVkRmllbGRzLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXBUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFeHRlbmRcIjtcbmltcG9ydCB7IGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgRmlsdGVyUmVzdHJpY3Rpb25zIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9maWx0ZXIvRmlsdGVyUmVzdHJpY3Rpb25zXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDb25uZWN0ZWRGaWVsZHNEYXRhLCBnZXRDb25uZWN0ZWRGaWVsZHNTZXBhcmF0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEV4Y2VsRm9ybWF0IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0V4Y2VsRm9ybWF0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHsgZ2V0Q29sdW1uVGVtcGxhdGUsIGdldENvbXB1dGVkQ29sdW1uLCBnZXRTbG90Q29sdW1uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lXCI7XG5pbXBvcnQgVGFibGVTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgSnNDb250cm9sVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbywgZGVmYXVsdCBhcyBUYWJsZSwgVmlzdWFsU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyB2NENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUXVpY2tGaWx0ZXJTZWxlY3RvciBmcm9tIFwiLi4vUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4uL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcbmNvbnN0IFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiA9IFwiL3NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIjtcbmNvbnN0IFNFQVJDSF9IQVNfQkVFTl9GSVJFRCA9IFwic2VhcmNoRmlyZWRcIjtcbmNvbnN0IENPTFVNTl9IQVNfQkVFTl9BRERFRCA9IFwiY29sdW1uQWRkZWRcIjtcbmNvbnN0IFBSRVZJT1VTX1NPUlRFUlMgPSBcInByZXZpb3VzU29ydGVyc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBkZWxheUZvcihkZWxheTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT4sXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgob0RhdGEuTGFiZWw/LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0RhdGFGaWVsZFdpZHRoISkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBvYmplY3QsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgQ29ubmVjdGVkRmllbGRzIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBDb25uZWN0ZWRGaWVsZHMgaXMgdGhlIHN1bSBvZiB0aGUgd2lkdGggb2YgdGhlIDIgcHJvcGVydGllcyBjb250YWluZWQgaW4gdGhlIENvbm5lY3RlZEZpZWxkc1xuXHQgKiBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsY3VsYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uLm1pbldpZHRoIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNREN0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIEN1cnJlbnQgcHJvcGVydHlJbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckNvbm5lY3RlZEZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0eUluZm9zOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW11cblx0KSB7XG5cdFx0aWYgKHByb3BlcnR5SW5mby5rZXkuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkNvbm5lY3RlZEZpZWxkczo6XCIpID09PSAwKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIENvbm5lY3RlZEZpZWxkcztcblx0XHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc1NlcGFyYXRvciA9IGdldENvbm5lY3RlZEZpZWxkc1NlcGFyYXRvcihjb25uZWN0ZWRGaWVsZHMpO1xuXHRcdFx0Y29uc3QgZmllbGRXaWR0aHM6IG51bWJlcltdID0gW107XG5cdFx0XHRnZXRDb25uZWN0ZWRGaWVsZHNEYXRhKGNvbm5lY3RlZEZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoZGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRkYXRhIGFzIERhdGFGaWVsZCxcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGRXaWR0aCkge1xuXHRcdFx0XHRcdGZpZWxkV2lkdGhzLnB1c2goZGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc2VwYXJhdG9yV2lkdGggPSBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKGNvbm5lY3RlZEZpZWxkc1NlcGFyYXRvcik7XG5cdFx0XHRmaWVsZFdpZHRocy5wdXNoKHNlcGFyYXRvcldpZHRoKTtcblx0XHRcdGNvbnN0IGNvbHVtbldpZHRoID0gZmllbGRXaWR0aHMucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gYWNjICsgdmFsdWU7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKGNvbHVtbldpZHRoKVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHA6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnR5OiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sXG5cdFx0dW5pdD86IHN0cmluZyxcblx0XHR1bml0VGV4dD86IHN0cmluZyxcblx0XHR0aW1lem9uZVRleHQ/OiBzdHJpbmdcblx0KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJOiBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4gfCBudWxsID0gdGFibGUgPyAodGhpcy5fZ2V0VGFibGVBUEkodGFibGUpIGFzIEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPikgOiBudWxsO1xuXHRcdC8vIHVwZGF0ZSBnYXAgZm9yIHByb3BlcnRpZXMgd2l0aCBzdHJpbmcgdW5pdFxuXHRcdGNvbnN0IHRleHQgPSB1bml0VGV4dCB8fCB0aW1lem9uZVRleHQ7XG5cdFx0aWYgKHRleHQpIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIFZpc3VhbFNldHRpbmdzLCB7XG5cdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRnYXA6IE1hdGguY2VpbChTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHRleHQpKVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHVuaXQpIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIFZpc3VhbFNldHRpbmdzLCB7XG5cdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHQvLyBGb3IgcHJvcGVydGllcyB3aXRoIHVuaXQsIGEgZ2FwIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHByb3Blcmx5IHJlbmRlciB0aGUgY29sdW1uIHdpZHRoIG9uIGVkaXQgbW9kZVxuXHRcdFx0XHRcdGdhcDogb1RhYmxlQVBJICYmIG9UYWJsZUFQSS5nZXRSZWFkT25seSgpID8gMCA6IDZcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JDb25uZWN0ZWRGaWVsZCh0YWJsZSwgcHJvcGVydHksIHByb3BlcnRpZXMpO1xuXHRcdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwKHRhYmxlLCBwcm9wZXJ0eSk7XG5cdFx0XHR0aGlzLl9jb21wdXRlTGFiZWwocHJvcGVydHksIGxhYmVsTWFwKTtcblx0XHR9KTtcblx0XHQvLyBBZGQgdGhlICRlZGl0U3RhdGUgcHJvcGVydHlcblx0XHRwcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0a2V5OiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdG5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXHRfZ2V0VGFibGVBUEkodGFibGU6IFRhYmxlKTogVGFibGVBUEkge1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIXRhYmxlQVBJKSB7XG5cdFx0XHR0YWJsZUFQSSA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGUuZ2V0SWQoKSArIFwiOjpUYWJsZVwiKSBhcyBUYWJsZUFQSTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlQVBJO1xuXHR9LFxuXHRnZXRDb2x1bW5zRm9yOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogVGFibGVDb2x1bW5bXSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0cmV0dXJuIHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBGaWx0ZXJpbmcgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBMaW5lSXRlbSBhbm5vdGF0aW9uIG5vciBvZiB0aGUgY3VzdG9tIGNvbHVtbnMgaXMgZm9yYmlkZGVuLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mb1xuXHQgKiBAcGFyYW0gY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZmlsdGVyaW5nIGlzIGFsbG93ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzRmlsdGVyYWJsZSA9IGlzUGF0aEZpbHRlcmFibGUoY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdCFjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHxcblx0XHRcdCgoY29sdW1uSW5mby5pc1BhcnRPZkxpbmVJdGVtID09PSB0cnVlIHx8IGNvbHVtbkluZm8uaXNQYXJ0T2ZDdXN0b21Db2x1bW4gPT09IHRydWUpICYmXG5cdFx0XHRcdCEoaXNDb25zdGFudChpc0ZpbHRlcmFibGUpICYmIGlzRmlsdGVyYWJsZS52YWx1ZSA9PT0gZmFsc2UpKVxuXHRcdCk7XG5cdH0sXG5cdF9mZXRjaFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKFxuXHRcdG1ldGFNb2RlbDogTWV0YU1vZGVsLFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB7XG5cdFx0Y29uc3Qgc0Fic29sdXRlTmF2aWdhdGlvblBhdGggPSBjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdFx0b0RhdGFGaWVsZCA9IG1ldGFNb2RlbC5nZXRPYmplY3Qoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpLFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSBhcyBDb250ZXh0LFxuXHRcdFx0aXNDb21wbGV4VHlwZSA9IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWU/LmluZGV4T2YoXCJFZG0uXCIpICE9PSAwLFxuXHRcdFx0YkZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob05hdmlnYXRpb25Db250ZXh0LCBvRGF0YUZpZWxkKSxcblx0XHRcdGJJc0FuYWx5dGljYWxUYWJsZSA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcImVuYWJsZUFuYWx5dGljc1wiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dG9vbHRpcCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby50b29sdGlwID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0eXBlQ29uZmlnID0gdGhpcy5fZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLCBpc0NvbXBsZXhUeXBlKSxcblx0XHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0bmFtZTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoLFxuXHRcdFx0XHRncm91cExhYmVsOiBjb2x1bW5JbmZvLmdyb3VwTGFiZWwsXG5cdFx0XHRcdGdyb3VwOiBjb2x1bW5JbmZvLmdyb3VwLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXAsXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczpcblx0XHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWc/LmJhc2VUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IHsgc3R5bGU6IFwibWVkaXVtL3Nob3J0XCIgfSAvKiBUaGlzIGNvbmRpdGlvbiBkb2Vzbid0IGhhdmUgYW55IGltcGFjdCwgdG8gYmUgcmV2aWV3ZWQgKi9cblx0XHRcdFx0XHRcdDogY29sdW1uSW5mby50eXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogY29sdW1uSW5mby50eXBlQ29uZmlnPy5jb25zdHJhaW50cyxcblx0XHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIgJiYgIWlzQ29tcGxleFR5cGUsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiB0aGlzLl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyhjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLCBjb2x1bW5JbmZvKSxcblx0XHRcdFx0dW5pdDogY29sdW1uSW5mby51bml0LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogY29sdW1uSW5mby5yZWxhdGl2ZVBhdGhcblx0XHRcdH07XG5cdFx0aWYgKHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5jbGlwYm9hcmRTZXR0aW5ncyA9IHsgdGVtcGxhdGU6IHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSB9O1xuXHRcdFx0Ly8gaWYgSSBzZXQgdGhpcyBjbGlwQm9hcmRTZXR0aW5ncyB0aGUgY29weSBwcm92aWRlciBleHRyYWN0IHRoZSBkYXRhIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUgaW4gdGhlIGh0bWwgcHJvcGVydHkgYW5kIGl0IGlzIHByb3Blcmx5IGNvcGllZCBpbiBleGNlbFxuXHRcdFx0Ly8gYnV0IHdoZW4gd2UgY29weSBlbHNld2hlcmUgd2Ugb25seSBnZXQgdGhlIHJhdyBkYXRhIGFuZCBub3QgdGhlIHRlbXBsYXRlZCBkYXRhXG5cdFx0fVxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSBjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdH1cblx0XHQvLyBNREMgZXhwZWN0cyAgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQodGFibGUsIHByb3BlcnR5SW5mbywgY29sdW1uSW5mby51bml0LCBjb2x1bW5JbmZvLnVuaXRUZXh0LCBjb2x1bW5JbmZvLnRpbWV6b25lVGV4dCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgY29uZmlnIGZvciB0aGUgZ2l2ZW4gY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIGlzQ29tcGxleFR5cGUgSW5kaWNhdGVzIGlmIHRoZSBkYXRhVHlwZSBpcyBjb21wbGV4LlxuXHQgKiBAcmV0dXJucyBUaGUgTURDIHR5cGUgY29uZmlnLlxuXHQgKi9cblx0X2dldFR5cGVDb25maWcoY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBpc0NvbXBsZXhUeXBlPzogYm9vbGVhbik6IFR5cGVDb25maWcge1xuXHRcdGxldCB0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIpOyAvLyBNREMgZXhwZWN0cyBhbHdheXMgYSBkYXRhVHlwZVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBpc1R5cGVGaWx0ZXJhYmxlKGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpKSB7XG5cdFx0XHR0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgIWlzQ29tcGxleFR5cGUpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0eXBlQ29uZmlnO1xuXHR9LFxuXHQvKipcblx0ICogU2V0IHRoZSB0ZXh0IGFycmFuZ2VtZW50IGluZm8gZm9yIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBUaGUgY3VycmVudCBwcm9wZXJ0eUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfc2V0VGV4dEFycmFuZ2VtZW50SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSkuZmluZChmdW5jdGlvbiAob0NvbCkge1xuXHRcdFx0cmV0dXJuIG9Db2wubmFtZSA9PT0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0XHR9KTtcblx0XHRpZiAoZGVzY3JpcHRpb25Db2x1bW4pIHtcblx0XHRcdHByb3BlcnR5SW5mby5tb2RlID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQhLm1vZGU7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPSAoZGVzY3JpcHRpb25Db2x1bW4gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbykucmVsYXRpdmVQYXRoO1xuXHRcdH1cblx0XHRwcm9wZXJ0eUluZm8udGV4dCA9IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50Py50ZXh0UHJvcGVydHk7XG5cdH0sXG5cdF91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyhwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbkluZm8uYWdncmVnYXRhYmxlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uYWdncmVnYXRhYmxlID0gY29sdW1uSW5mby5hZ2dyZWdhdGFibGU7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmV4dGVuc2lvbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IGNvbHVtbkluZm8uZXh0ZW5zaW9uO1xuXHRcdH1cblx0fSxcblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblx0X2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdGxldCBsYWJlbDtcblx0XHRpZiAoY29sdW1uSW5mby5oZWFkZXIpIHtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlci5iaW5kaW5nKSB7XG5cdFx0XHRcdGxhYmVsID0gY29sdW1uSW5mby5oZWFkZXIuYmluZGluZy5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5uYW1lO1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvcikgfHxcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdF91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsOiBmdW5jdGlvbiAoX29UYWJsZTogVGFibGUsIF9vQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIF9vQ29sdW1uSW5mby5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2ZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRsZXQgZmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdFx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlUeXBlUGF0aCkpO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdFx0ZGF0YU1vZGVsIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuXHRcdCkuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3IodGFibGUpKVxuXHRcdFx0LnRoZW4oKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGNvbHVtbnMpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCh0YWJsZSwgY29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGNvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoUHJvcGVydHlJbmZvKG1ldGFNb2RlbCwgY29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8gJiYgIW5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKChwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBEZWxlZ2F0ZVV0aWwuaXNNdWx0aVZhbHVlKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkNvbXB1dGVkXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNsb3RcIjpcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7Y29sdW1uSW5mby50eXBlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGUsIGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdGlmIChhcHBDb21wb25lbnQuZGVsYXlUaW1lID4gMCkge1xuXHRcdFx0Ly8gRmlyc3QgY2FsbCBsZXQncyBhZGQgYSBzbWFsbCBkZWxheSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGJsb2NrIHRoZSBpbml0aWFsIHZpZXcgY3JlYXRpb25cblx0XHRcdGF3YWl0IGRlbGF5Rm9yKGFwcENvbXBvbmVudC5kZWxheVRpbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXHRzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0ZpbHRlclJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblx0XHRjb25zdCBmaWx0ZXJBc3NvY2lhdGlvbiA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGhhc0ZpbHRlck9yU2VhcmNoID0gdGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCB0YWJsZUZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoO1xuXHRcdGlmIChmaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChmaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlKSB7XG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRmlsdGVyUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPSB0YWJsZUFQSS5nZXROb0RhdGFNZXNzYWdlTW9kZSgpO1xuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBkYXRhUmVxdWVzdGVkIGV2ZW50IGZvciB0aGUgdGFibGUgYmluZGluZyB0byBzZXQgdXAgdGFibGUgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSBvVGFibGUgVGhlIE1EQyB0YWJsZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGZvciB0aGUgdGFibGVcblx0ICovXG5cdGhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkQXR0YWNoZWRcIik7XG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZXF1ZXN0ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZCgoKSA9PiB7XG5cdFx0XHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRUaW1lb3V0U2V0XCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChvVGFibGVBUEkgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRcdG9UYWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZSA9IChvVGFibGVBUEkuZ2V0VGFibGVEZWZhdWx0cyhvVGFibGUpID8/IFByb21pc2UucmVzb2x2ZSh7fSkpIGFzIFByb21pc2U8b2JqZWN0Pjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGVmYXVsdERhdGEgPSBhd2FpdCB0YWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZT8uY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGFibGVBUEkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogRW5hYmxlIHRoZSBvcHRpbWlzdGljIGJhdGNoIG1vZGUgaWYgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICovXG5cdGVuYWJsZU9wdGltaXN0aWNCYXRjaE1vZGU6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUgPVxuXHRcdFx0dGFibGUgJiYgVGFibGVVdGlscy5pc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoKHRhYmxlLCBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHR0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpPy5yZXNvbHZlKCFmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHJlYmluZDogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKG9UYWJsZSk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0VGFibGVSdW50aW1lLmNsZWFyU2VsZWN0aW9uKG9UYWJsZSk7XG5cdFx0XHRUYWJsZURlbGVnYXRlQmFzZS5yZWJpbmQuYXBwbHkodGhpcywgW29UYWJsZSwgb0JpbmRpbmdJbmZvXSk7XG5cdFx0XHRUYWJsZVV0aWxzLm9uVGFibGVCb3VuZChvVGFibGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0LnRoZW4oKHRhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlVGFibGVEYXRhUmVxdWVzdGVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cdHByZUluaXQ6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gKFRhYmxlRGVsZWdhdGVCYXNlLnByZUluaXQgYXMgKHRhYmxlOiBUYWJsZSkgPT4gUHJvbWlzZTx2b2lkPikuYXBwbHkodGhpcywgW3RhYmxlXSkudGhlbigoKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIG9uIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBTZXQgdGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdGZhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIHVua25vd24gYXMgQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSBhcyBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSA9IG5ldyBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkoYmluZGluZ0luZm8pO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuc2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UodGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGFibGVBUEk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHtcblx0XHRcdFx0Y29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEksXG5cdFx0XHRcdHF1aWNrRmlsdGVyS2V5OiBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCA9IGJpbmRpbmdJbmZvLnNvcnRlcjtcblx0XHRjb25zdCBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ6IFNvcnRlcltdID0gW107XG5cdFx0aWYgKHNvcnRlcnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0XHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5wYXRoID09PSBzb3J0ZXIuZ2V0UGF0aCgpKTtcblx0XHRcdFx0aWYgKHRhYmxlUHJvcGVydHk/LnVuaXQpIHtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5rZXkgPT09IHRhYmxlUHJvcGVydHk/LnVuaXQpO1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRTb3J0ZXJBdmFpbGFibGUgPSB1bml0UHJvcGVydHk/LnBhdGggJiYgc29ydGVycy5zb21lKChzb3J0KSA9PiBzb3J0LmdldFBhdGgoKSA9PT0gdW5pdFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdGlmICghdW5pdFNvcnRlckF2YWlsYWJsZSAmJiB1bml0UHJvcGVydHk/LnNvcnRhYmxlICE9PSBmYWxzZSAmJiB1bml0UHJvcGVydHk/LnBhdGgpIHtcblx0XHRcdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKG5ldyBTb3J0ZXIodW5pdFByb3BlcnR5LnBhdGgsIGZhbHNlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKHNvcnRlcik7XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgPSBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ7XG5cdFx0fVxuXHR9LFxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYmluZGluZ0luZm8ucGF0aCArIFwiL1wiO1xuXHRcdGNvbnN0IGZpbHRlcnMgPSBiaW5kaW5nSW5mby5maWx0ZXJzPy5nZXRGaWx0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0VGFibGVVdGlscy51cGRhdGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRChtZXRhTW9kZWwsIGZpbHRlcnMgYXMgdW5rbm93biBhcyBDb25kaXRpb25PYmplY3RbXSwgZW50aXR5VHlwZVBhdGgpO1xuXHRcdH1cblx0fSxcblx0X2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF91cGRhdGVBdmFpbGFibGVDYXJkczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdGNvbnN0IGFsbEtrZXlzUmVxdWVzdGVkID0gdGhpcy5jaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQodGFibGVBUEkpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHQvLyBpZiBhIHJvd3ByZXNzIGlzIG92ZXJyaWRkZW4sIHdlICBzaG91bGQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uIGF0IHRoZSBub2RlIGxldmVsXG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzTm9kZUxldmVsTmF2aWdhYmxlXCIsIHRhYmxlQVBJLm92ZXJyaWRlUm93UHJlc3MgPyB0cnVlIDogYWxsS2tleXNSZXF1ZXN0ZWQpO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0T2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0KVxuXHRcdFx0XHRcdC8vIGZvciBhbmFseXRpYyB0YWJsZXMgd2l0aCBhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIHdlIHNob3VsZCBub3QgcmVxdWVzdCB0aGUgc2VtYW50aWNLZXkgZXhwZWN0ZWQgd2hlbiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkIC0+ICBpdCB3aWxsIHBlcm1pdHMgdG8gbmF2aWdhdGUgZnJvbSBhIG5vZGUgbGV2ZWwgd2hlbiBzZW1hbnRpY0tleSBhcmUgZW5hYmxlZFxuXHRcdFx0XHRcdC8vIHJlc3RyaWN0aW9uIGFyZSBhbHNvIGV4Y2x1ZGVkIGFzIHdlIGNhbm5vdCBkZXN0aW5ndWlzaCBiZXR3ZWVuIGEgbm9kZSBhbmQgYSBhZ2dyZWdhdGlvbiBsZXZlbFxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblx0XHRjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGFibGVcblx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdC5tYXAoKGNvbHVtbikgPT4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKSk7XG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1ucyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5mb3JFYWNoKChyZWxhdGVkQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IHJlbGF0ZWRDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKHJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdFx0XHRwcm9jZXNzQ29sdW1uKHJlbGF0ZWRDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0Ly8gaWYgdGhlIHJvd0JpbmRpbmdJbmZvIGhhcyBhICQkZ2V0S2VlcEFsaXZlQ29udGV4dCBwYXJhbWV0ZXIgd2UgbmVlZCB0byBjaGVjayBpdCBpcyB0aGUgb25seSBUYWJsZSB3aXRoIHN1Y2ggYVxuXHRcdFx0Ly8gcGFyYW1ldGVyIGZvciB0aGUgY29sbGVjdGlvbk1ldGFQYXRoXG5cdFx0XHRpZiAoYmluZGluZ0luZm8ucGFyYW1ldGVycz8uJCRnZXRLZWVwQWxpdmVDb250ZXh0ID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPih0YWJsZSwgXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSA/PyBcIlwiO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdGNvbnN0IGtlcHRBbGl2ZUxpc3RzID0gaW50ZXJuYWxNb2RlbD8uZ2V0T2JqZWN0KFwiL2tlcHRBbGl2ZUxpc3RzXCIpID8/IHt9O1xuXHRcdFx0XHRpZiAoIWtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSkge1xuXHRcdFx0XHRcdGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIva2VwdEFsaXZlTGlzdHNcIiwga2VwdEFsaXZlTGlzdHMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSAhPT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkZ2V0S2VlcEFsaXZlQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJOb3RDaGFuZ2VkID1cblx0XHRcdFx0XHQoKGJpbmRpbmdJbmZvLmZpbHRlcnMgPT09IG51bGwgJiYgb2xkRmlsdGVycy5sZW5ndGggPT09IDApIHx8IC8vIG9uIGFuYWx5dGljYWwgdGFibGVzLCB0aGUgZmlsdGVycyBhcmUgc2V0IHRvIG51bGwgd2hlbiBubyBmaWx0ZXJzXG5cdFx0XHRcdFx0XHRkZWVwRXF1YWwoYmluZGluZ0luZm8uZmlsdGVycywgb2xkRmlsdGVyc1swXSkpICYmXG5cdFx0XHRcdFx0bmV3U29ydGVycyA9PT0gcHJldmlvdXNTb3J0ZXJzICYmXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCA9PT0gYmluZGluZy5nZXRQYXRoKCkgJiYgLy8gVGhlIHBhdGggY2FuIGJlIGNoYW5nZWQgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRcdFx0XHR0aGlzLmdldFNlYXJjaFF1ZXJ5KGJpbmRpbmcpID09PSBiaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJHNlYXJjaDtcblx0XHRcdFx0Y29uc3QgTFJNdWx0aVZpZXdFbmFibGVkID0gISF2aWV3RGF0YS52aWV3cztcblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblx0XHRcdHRhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHRcdFx0aWYgKG5lZWRNYW51YWxSZWZyZXNoICYmIHRhYmxlLmdldEZpbHRlcigpICYmIGJpbmRpbmcpIHtcblx0XHRcdFx0YmluZGluZ1xuXHRcdFx0XHRcdC5yZXF1ZXN0UmVmcmVzaChiaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgdGhlIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUywgbmV3U29ydGVycyk7XG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblx0X2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZTogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKG9UYWJsZSk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAodGFibGVDYW5CZUluSW5saW5lRWRpdCkge1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRDtcblx0XHR9XG5cdFx0cmV0dXJuIHJvd0JpbmRpbmdJbmZvO1xuXHR9LFxuXHRfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdGxldCBvRmlsdGVyO1xuXHRcdGNvbnN0IG9GaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9UYWJsZSk7XG5cdFx0Ly8gUHJlcGFyZSBiaW5kaW5nIGluZm8gd2l0aCBmaWx0ZXIvc2VhcmNoIHBhcmFtZXRlcnNcblx0XHRpZiAob0ZpbHRlckluZm8uZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IG9GaWx0ZXJJbmZvLmZpbHRlcnMsIGFuZDogdHJ1ZSB9KTtcblx0XHR9XG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoO1xuXHRcdH1cblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb1RhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpO1xuXHRcdGlmIChvRGF0YVN0YXRlSW5kaWNhdG9yICYmIG9EYXRhU3RhdGVJbmRpY2F0b3IuaXNGaWx0ZXJpbmcoKSkge1xuXHRcdFx0Ly8gSW5jbHVkZSBmaWx0ZXJzIG9uIG1lc3NhZ2VTdHJpcFxuXHRcdFx0aWYgKChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdH1cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKFxuXHRcdGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvLFxuXHRcdGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sXG5cdFx0ZmlsdGVyPzogRmlsdGVyXG5cdCkge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0YWJsZS5nZXRQYXlsb2FkKCkgYXMgeyBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzPzogYm9vbGVhbiB9O1xuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IEZFVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdC8vIFdlIHJldHVybiBudWxsIGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIHNob3VsZCBhcHBseSBhdCBydW50aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KGNvbHVtbkluZm8gYXMgQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiwgdmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUgYXMgVGFibGUpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGxldCBwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eUluZm9zIGFyZSBub3QgZmV0Y2hlZCB5ZXQsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlbVxuXHRcdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWJsZSBpcyBub3QgY3JlYXRlZCB5ZXRcblx0XHRcdGF3YWl0IHRoaXMuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlIGFzIE1EQ1RhYmxlKTtcblx0XHRcdHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3MuZmluZChmdW5jdGlvbiAocHJvcEluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdHJldHVybiBwcm9wSW5mby5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSBhc3luYyAoXG5cdFx0XHRvSW5Qcm9wZXJ0eUluZm86IHVua25vd24sXG5cdFx0XHRvVmlldzogRkVWaWV3XG5cdFx0KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT4gPT4ge1xuXHRcdFx0bGV0IGJEaXNwbGF5TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzVGFibGVUeXBlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmcgfCBib29sZWFuPih0YWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcInRhYmxlVHlwZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcImNyZWF0aW9uTW9kZVwiLCBvTW9kaWZpZXIpXG5cdFx0XHRdKS50aGVuKGFzeW5jIChhQ3VzdG9tRGF0YTogKHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpW10pID0+IHtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYUN1c3RvbURhdGFbMF0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0aWYgKGJEaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiRGlzcGxheU1vZGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRcdFx0XHRcdHJlYWRPbmx5OiBiRGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGU6IHNUYWJsZVR5cGVDdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0aWQ6IHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aDogcHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISksXG5cdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHsgbmFtZTogc0NyZWF0aW9uTW9kZUN1c3RvbURhdGEgfSxcblx0XHRcdFx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvUHJvcGVydHlDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvY29sdW1uSW5mb1wiKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXHQvKipcblx0ICogUHJvdmlkZSB0aGUgVGFibGUncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBmb3IgdGhlIFRhYmxlcyBmaWx0ZXIgcGVyc29uYWxpemF0aW9uLlxuXHQgKi9cblx0Z2V0RmlsdGVyRGVsZWdhdGU6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMlxuXHRcdFx0fSxcblx0XHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdFx0e1xuXHRcdFx0XHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAob1BhcmVudENvbnRyb2w6IENvbnRyb2wsIHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5SW5mb05hbWUuaW5kZXhPZihcIlByb3BlcnR5OjpcIikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIENvcnJlY3QgdGhlIG5hbWUgb2YgY29tcGxleCBwcm9wZXJ0eSBpbmZvIHJlZmVyZW5jZXMuXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSA9IHNQcm9wZXJ0eUluZm9OYW1lLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbShvUGFyZW50Q29udHJvbCBhcyBGaWx0ZXJCYXIsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3M/LmZpbmQoKG9iaikgPT4ge1xuXHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBwcm9wZXJ0eTtcblx0XHR9KTtcblx0XHQvKkZvciBhIERhdGUsIERhdGVUaW1lLCBCb29sZWFuIG9yIERlY2ltYWwgcHJvcGVydHksIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiBleHRlcm5hbCBmb3JtYXQgdXNpbmcgYSBVSTUgdHlwZSBmb3IgdGhlXG5cdCAgICAgICAgZ2l2ZW4gcHJvcGVydHkgcGF0aCB0aGF0IGZvcm1hdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkncyBFRE0gdHlwZSBhbmQgY29uc3RyYWludHMqL1xuXHRcdGNvbnN0IGRhdGFCYXNlVHlwZSA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eUluZm8/LmRhdGFUeXBlKS5iYXNlVHlwZTtcblx0XHRjb25zdCBleHRlcm5hbEZvcm1hdCA9XG5cdFx0XHRkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJCb29sZWFuXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIk51bWVyaWNcIjtcblx0XHRsZXQgdmFsdWU7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdFx0fVxuXHRcdGlmIChwcm9wZXJ0eUluZm8/Lm1vZGUpIHtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlJbmZvLm1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8/LnBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5wYXRoLCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjtFQUUxQyxlQUFlQyxRQUFRQSxDQUFDQyxLQUFhLEVBQWlCO0lBQ3JELE9BQU8sSUFBSUMs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WUFBWSxDQUFDNkwsbUJBQW1CLEdBQUdrSyxPQUFPLENBQUN6UixXQUFXLENBQUN0RSxZQUFZLENBQUM2TCxtQkFBbUIsRUFBRXlaLGNBQWMsQ0FBQyxHQUFHLElBQUk7WUFDdkg7VUFDRCxLQUFLLGtCQUFrQjtZQUN0QjFpQixLQUFLLEdBQUcyaUIsY0FBYyxDQUFDQyxrQkFBa0IsQ0FDeEN4bEIsWUFBWSxDQUFDNkwsbUJBQW1CLEdBQUdrSyxPQUFPLENBQUN6UixXQUFXLENBQUN0RSxZQUFZLENBQUM2TCxtQkFBbUIsRUFBRXlaLGNBQWMsQ0FBQyxHQUFHLElBQUksRUFDL0d0bEIsWUFBWSxDQUFDNEwsYUFBYSxHQUFHbUssT0FBTyxDQUFDelIsV0FBVyxDQUFDdEUsWUFBWSxDQUFDNEwsYUFBYSxFQUFFMFosY0FBYyxDQUFDLEdBQUcsSUFDaEcsQ0FBQztZQUNEO1VBQ0QsS0FBSyxrQkFBa0I7WUFDdEIxaUIsS0FBSyxHQUFHMmlCLGNBQWMsQ0FBQ0Msa0JBQWtCLENBQ3hDeGxCLFlBQVksQ0FBQzRMLGFBQWEsR0FBR21LLE9BQU8sQ0FBQ3pSLFdBQVcsQ0FBQ3RFLFlBQVksQ0FBQzRMLGFBQWEsRUFBRTBaLGNBQWMsQ0FBQyxHQUFHLElBQUksRUFDbkd0bEIsWUFBWSxDQUFDNkwsbUJBQW1CLEdBQUdrSyxPQUFPLENBQUN6UixXQUFXLENBQUN0RSxZQUFZLENBQUM2TCxtQkFBbUIsRUFBRXlaLGNBQWMsQ0FBQyxHQUFHLElBQzVHLENBQUM7WUFDRDtVQUNEO1lBQ0M7UUFDRjtNQUNELENBQUMsTUFBTTtRQUNOMWlCLEtBQUssR0FBRzVDLFlBQVksRUFBRXFGLElBQUksR0FBRzBRLE9BQU8sQ0FBQ3pSLFdBQVcsQ0FBQ3RFLFlBQVksQ0FBQ3FGLElBQUksRUFBRWlnQixjQUFjLENBQUMsR0FBRyxJQUFJO01BQzNGO01BQ0EsSUFBSTFpQixLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ25DQSxLQUFLLEdBQUdtTixnQkFBZ0IsQ0FBQ2dCLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDalIsS0FBSyxDQUFDLENBQUMsQ0FBQ3NRLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztNQUN2RztNQUNBLE9BQU9OLGdCQUFnQixDQUFDaFEsS0FBSyxDQUFDLENBQUNzUSxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQ3JRLFlBQVksRUFBRWdGLEtBQUssRUFBRXBDLEtBQUssQ0FBQyxDQUFDO0lBQ25HO0VBQ0QsQ0FBQyxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|