@sapui5/sap.fe.macros 1.138.0 → 1.140.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 +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -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/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, _jsx, _Fragment, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ModelHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, _jsx, _Fragment, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -208,10 +208,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
208
208
|
*/;
|
|
209
209
|
_proto.createField = async function createField(parameter, parameterContext) {
|
|
210
210
|
let display = "Value";
|
|
211
|
+
let additionalValue;
|
|
211
212
|
try {
|
|
212
213
|
display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), {
|
|
213
214
|
context: parameterContext
|
|
214
215
|
});
|
|
216
|
+
if (hasValueHelp(parameter)) {
|
|
217
|
+
additionalValue = await this.getAdditionalValue({
|
|
218
|
+
context: parameterContext
|
|
219
|
+
});
|
|
220
|
+
}
|
|
215
221
|
} catch (err) {
|
|
216
222
|
Log.warning(`Parameter dialog field: display format couldn't be calculated for parameter '${parameter.name}': ${err}`);
|
|
217
223
|
}
|
|
@@ -238,7 +244,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
238
244
|
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
239
245
|
dependents: this.createParameterDialogValueHelp(parameter, parameterContext),
|
|
240
246
|
visible: compileExpression(ifElse(parameter.name === "ResultIsActiveEntity", false, not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))),
|
|
241
|
-
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])]
|
|
247
|
+
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
248
|
+
additionalValue: additionalValue
|
|
242
249
|
});
|
|
243
250
|
}
|
|
244
251
|
|
|
@@ -266,7 +273,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
266
273
|
typeahead: _jsx(Popover, {
|
|
267
274
|
children: _jsx(MTable, {
|
|
268
275
|
id: generate([this.actionName, parameter.name, "Popover", "qualifier"]),
|
|
269
|
-
caseSensitive: this.action.isBound ? useCaseSensitiveFilterRequests(getInvolvedDataModelObjects(parameterContext), convertTypes(this.metaModel).entityContainer.annotations.Capabilities?.FilterFunctions ?? []) :
|
|
276
|
+
caseSensitive: this.action.isBound ? useCaseSensitiveFilterRequests(getInvolvedDataModelObjects(parameterContext), convertTypes(this.metaModel).entityContainer.annotations.Capabilities?.FilterFunctions ?? []) : ModelHelper.isFilteringCaseSensitive(this.metaModel),
|
|
270
277
|
useAsValueHelp: !!parameter.annotations.Common?.ValueListWithFixedValues
|
|
271
278
|
})
|
|
272
279
|
}),
|
|
@@ -1018,10 +1025,42 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1018
1025
|
}
|
|
1019
1026
|
this.dialog?.destroy();
|
|
1020
1027
|
this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
/**
|
|
1031
|
+
* Gets the type of the property used for text annotation in the ValueHelp for the action parameter and provides the formatted binding.
|
|
1032
|
+
* @param oInterface The parameter
|
|
1033
|
+
* @returns The form element control.
|
|
1034
|
+
*/;
|
|
1035
|
+
_proto.getAdditionalValue = async function getAdditionalValue(oInterface) {
|
|
1036
|
+
let textContext;
|
|
1037
|
+
const contextPath = oInterface.context.getPath();
|
|
1038
|
+
const localDataProperty = oInterface.context.getObject()?.$Name;
|
|
1039
|
+
const valueListByQualifier = await this.metaModel.requestValueListInfo(contextPath, true);
|
|
1040
|
+
|
|
1041
|
+
// Look for LocalDataProperty in ValueListParameterOut or ValueListParameterInOut where this is the parameter name
|
|
1042
|
+
// We only consider TextAnnotations for this action parameter
|
|
1043
|
+
const valueListParameter = valueListByQualifier[""].Parameters.find(parameter => parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" || parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterOut" && parameter.LocalDataProperty?.$PropertyPath === localDataProperty);
|
|
1044
|
+
if (valueListParameter && valueListParameter.ValueListProperty) {
|
|
1045
|
+
const textProperty = valueListParameter.ValueListProperty;
|
|
1046
|
+
// Now we have the name of the property that is the annotated text
|
|
1047
|
+
const propertyPath = `/${valueListByQualifier[""].CollectionPath}/${textProperty}`;
|
|
1048
|
+
const propAnnotations = this.metaModel.getObject(`${propertyPath}@`);
|
|
1049
|
+
if (propAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"]) {
|
|
1050
|
+
const textProp = propAnnotations["@com.sap.vocabularies.Common.v1.Text"];
|
|
1051
|
+
const textPath = `/${valueListByQualifier[""].CollectionPath}/${textProp.$Path}`;
|
|
1052
|
+
textContext = this.metaModel.createBindingContext(textPath);
|
|
1053
|
+
}
|
|
1054
|
+
if (textContext) {
|
|
1055
|
+
return AnnotationHelper.format(textContext.getObject(), {
|
|
1056
|
+
context: textContext
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1021
1060
|
};
|
|
1022
1061
|
return ActionParameterDialog;
|
|
1023
1062
|
}();
|
|
1024
1063
|
_exports = ActionParameterDialog;
|
|
1025
1064
|
return _exports;
|
|
1026
1065
|
}, false);
|
|
1027
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiRmllbGQiLCJwYXlsb2FkIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInZhbHVlIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlSGVscCIsInByb3BlcnR5UGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwidmFsaWRhdGVJbnB1dCIsInJlcXVpcmVzVmFsaWRhdGlvbiIsInR5cGVhaGVhZCIsIlBvcG92ZXIiLCJNVGFibGUiLCJjYXNlU2Vuc2l0aXZlIiwidXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzIiwiZW50aXR5Q29udGFpbmVyIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImNsb3NlIiwib3BlbkRpYWxvZyIsIkNvbW1vblV0aWxzIiwic2V0VXNlckRlZmF1bHRzIiwic2V0TW9kZWxzIiwiYWRkRGVwZW5kZW50Iiwic2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyIsIm9wZW4iLCJzZXRNb2RlbCIsImJpbmRFbGVtZW50IiwiX2V2ZW50Iiwid2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMiLCJpc09wZW4iLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJiaW5kaW5nUGFyYW1ldGVyIiwib3BlcmF0aW9uQmluZGluZyIsInBhcmFtZXRlck1vZGVsRGF0YSIsInBhcmFtTmFtZSIsImRlZmF1bHRWYWx1ZSIsIlBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwicGF0aEZvckNvbnRleHQiLCJyZXBsYWNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwicmVxdWVzdFByb3BlcnR5Iiwibm9Qb3NzaWJsZVZhbHVlIiwibGF0ZVByb3BlcnR5RXJyb3IiLCJnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsIkZQTUhlbHBlciIsImxvYWRNb2R1bGVBbmRDYWxsTWV0aG9kIiwiZ2V0UHJlRGVmaW5lZFZhbHVlcyIsImJvdW5kRnVuY3Rpb25OYW1lIiwiRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwicmVxdWVzdENvbnRleHRPYmplY3QiLCJmdW5jdGlvblBhcmFtcyIsImJvdW5kRnVuY3Rpb24iLCJPcGVyYXRpb24iLCJnZXRPcGVyYXRpb25Gcm9tTmFtZSIsIk9EYXRhT3BlcmF0aW9uIiwiZW5oYW5jZSRzZWxlY3QiLCJncm91cElkIiwiZXhlY3V0ZSIsImlzRnVsZmlsbGVkIiwiYm91bmRDb250ZXh0IiwicmVxdWVzdE9iamVjdCIsImNvbnRleHRWYWx1ZXMiLCJwcm9taXNlcyIsImRlZmF1bHRWYWx1ZXMiLCJmdW5jdGlvblZhbHVlcyIsIm1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMiLCJmaXJzdFZpc2libGVQYXJhbWV0ZXIiLCJnZXRWaXNpYmxlIiwiZmlyc3RGaWVsZCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsIm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkIiwiaXNNdWx0aVZhbHVlIiwic2V0UGFyYW1ldGVyIiwiaSIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9wZXJhdGlvblBhcmFtZXRlckRpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21wbGV4VHlwZSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCB0eXBlIEFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZCwgRmllbGRHcm91cFR5cGUsIFJlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHR0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVySW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBPRGF0YU9wZXJhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9PRGF0YU9wZXJhdGlvblwiO1xuaW1wb3J0IE9wZXJhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9PcGVyYXRpb25cIjtcbmltcG9ydCBhY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L29wZXJhdGlvbnMvYWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaGFzRmllbGRHcm91cFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Z1bGZpbGxlZCwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uLCBpc0Rpc2FibGVkRXhwcmVzc2lvbiwgaXNSZWFkT25seUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscCwgaXNNdWx0aUxpbmVUZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgcmVxdWlyZXNWYWxpZGF0aW9uLCB1c2VDYXNlU2Vuc2l0aXZlRmlsdGVyUmVxdWVzdHMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVIZWxwVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IERpYWxvZyRCZWZvcmVPcGVuRXZlbnQgfSBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvdWkvY29yZS9UaXRsZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBTaW1wbGVGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vU2ltcGxlRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZCRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCBWSERpYWxvZyBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvRGlhbG9nXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvUG9wb3ZlclwiO1xuaW1wb3J0IE1UYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kXCI7XG5pbXBvcnQgeyBkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZCwgc2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nLCBzaG93VHlwZU1pc21hdGNoRGlhbG9nIH0gZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvVXBsb2FkXCI7XG5cbnR5cGUgUGFyYW1ldGVyRGVmYXVsdFZhbHVlID0geyBwYXJhbU5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd247IGxhdGVQcm9wZXJ0eUVycm9yPzogYm9vbGVhbjsgbm9Qb3NzaWJsZVZhbHVlPzogYm9vbGVhbiB9O1xuXG50eXBlIEVsZW1lbnRHcm91cCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogQWN0aW9uUGFyYW1ldGVyW10gfTtcbnR5cGUgRWxlbWVudEdyb3VwQ29udmVydGVkID0geyBmYWNldFRpdGxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkOyBkYXRhOiBEaWFsb2dDb250ZW50VHlwZXNbXSB9O1xuXG50eXBlIEZvcm1FbGVtZW50VHlwZSA9IFtMYWJlbCwgRmllbGQgfCBNdWx0aVZhbHVlRmllbGRdO1xuXG50eXBlIERpYWxvZ0NvbnRlbnRUeXBlcyA9IHtcblx0Zm9ybUVsZW1lbnRzOiBGb3JtRWxlbWVudFR5cGU7XG5cdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvblBhcmFtZXRlckRpYWxvZyB7XG5cdHByaXZhdGUgcGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U6IFByb21pc2U8UmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4+O1xuXG5cdHByaXZhdGUgcGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUhOiAocmVzb2x2ZVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPikgPT4gdm9pZDtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZWplY3QhOiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG5cblx0Ly8gdGhlIGRpYWxvZyBpcyBjb25zaWRlcmVkIGFzIGNsb3NlZCBhZnRlciB0aGUgYWZ0ZXJDbG9zZSBldmVudCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0Ly8gdGhpcyBpcyBhc3luY2hyb25vdXMsIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGlhbG9nIHN0YXRlIHNpbmNlIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGlzIHN5bmNocm9ub3VzXG5cdC8vIGFuZCB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlIGRpYWxvZyBpcyBvcGVuIG9yIGNsb3NlZFxuXHRwcml2YXRlIGlzRGlhbG9nT3BlbiA9IGZhbHNlO1xuXG5cdHByaXZhdGUgZGlhbG9nOiBEaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSByZWFkb25seSBhY3Rpb25OYW1lOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBidXR0b25Mb2NrID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uUGFyYW1ldGVySW5mb3M6IChBY3Rpb25QYXJhbWV0ZXJJbmZvICYgeyBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciB9KVtdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJNb2RlbDogSlNPTk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0JGRpc3BsYXlNb2RlOiB7fVxuXHR9KTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBhY3Rpb246IEFjdGlvbixcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHtcblx0XHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdFx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRwYXJhbWV0ZXJzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdGlzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0bW9kZWw6IE9EYXRhTW9kZWw7XG5cdFx0XHR2aWV3PzogRkVWaWV3O1xuXHRcdFx0ZXZlbnRzPzoge1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ09wZW5lZD86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkPzogKCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlclZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB8IHVuZGVmaW5lZCxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpIHtcblx0XHR0aGlzLmFjdGlvbk5hbWUgPSBhY3Rpb25IZWxwZXIuZ2V0QWN0aW9uTmFtZSh0aGlzLmFjdGlvbik7XG5cdFx0dGhpcy5tZXRhTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5yZXNvdXJjZU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLnZpZXcgPyBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy52aWV3KSA6IGdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBlZGl0IG1vZGUgcHJvcGVydHkgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248RmllbGRFZGl0TW9kZT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb25zID0gcGFyYW1ldGVyLmFubm90YXRpb25zLFxuXHRcdFx0ZmllbGRDb250cm9sID0gYW5ub3RhdGlvbnMuQ29tbW9uPy5GaWVsZENvbnRyb2wsXG5cdFx0XHRpbW11dGFibGUgPSAoYW5ub3RhdGlvbnMuQ29yZSBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZSk/LkltbXV0YWJsZT8udmFsdWVPZigpLFxuXHRcdFx0Y29tcHV0ZWQgPSAoYW5ub3RhdGlvbnMuQ29yZSBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZSk/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5SZWFkT25seSk7XG5cdFx0fSBlbHNlIGlmIChmaWVsZENvbnRyb2wpIHtcblx0XHRcdHJldHVybiBpZkVsc2UoXG5cdFx0XHRcdGlzUmVhZE9ubHlFeHByZXNzaW9uKHBhcmFtZXRlciksXG5cdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihwYXJhbWV0ZXIpLCBGaWVsZEVkaXRNb2RlLkRpc2FibGVkLCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZvcm0gZWxlbWVudCBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlRm9ybUVsZW1lbnQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPEZvcm1FbGVtZW50VHlwZT4ge1xuXHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0PyBgJHt0aGlzLm1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpLm5hbWVzcGFjZX0uJHtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbi5uYW1lXG5cdFx0XHQgIH1gXG5cdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lfWA7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHthY3Rpb25NZXRhUGF0aH0vJHtwYXJhbWV0ZXIubmFtZX1gKSE7XG5cdFx0bGV0IGZpZWxkO1xuXHRcdGxldCBsYWJlbCA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsXG5cdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdDogcGFyYW1ldGVyLm5hbWU7XG5cdFx0bGV0IHN0cmVhbVBhcmFtZXRlcjtcblx0XHRpZiAocGFyYW1ldGVyLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0ZmllbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyLCBtZXRhQ29udGV4dCk7XG5cdFx0fSBlbHNlIGlmICghcGFyYW1ldGVyLnR5cGUuc3RhcnRzV2l0aChcIkVkbS5cIikgJiYgdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRzdHJlYW1QYXJhbWV0ZXIgPSB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik7XG5cdFx0XHQvLyBjYWxjdWxhdGUgbGFiZWwgZnJvbSB0aGUgc3RyZWFtIHByb3BlcnR5IHdpdGhpbiB0aGUgQ29tcGxleFR5cGVcblx0XHRcdGxhYmVsID0gc3RyZWFtUGFyYW1ldGVyPy5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoc3RyZWFtUGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbi5MYWJlbC50b1N0cmluZygpKVxuXHRcdFx0XHQ6IChzdHJlYW1QYXJhbWV0ZXI/Lm5hbWUgYXMgc3RyaW5nKTtcblx0XHRcdGZpZWxkID0gdGhpcy5jcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0PExhYmVsIGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBzdHJlYW1QYXJhbWV0ZXI/Lm5hbWUsIFwiTGFiZWxcIl0pfSB0ZXh0PXtsYWJlbH0gLz5cblx0XHRcdFx0e2ZpZWxkfVxuXHRcdFx0PC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBtdWx0aSBmaWVsZCBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgbXVsdGkgdmFsdWUgZmllbGQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlTXVsdGlGaWVsZChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8TXVsdGlWYWx1ZUZpZWxkPiB7XG5cdFx0bGV0IGRpc3BsYXkgPSBcIlZhbHVlXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGRpc3BsYXkgPSBhd2FpdCBGaWVsZEhlbHBlci5nZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQocGFyYW1ldGVyQ29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgbXVsdGlmaWVsZDogZGlzcGxheSBmb3JtYXQgY291bGRuJ3QgYmUgY2FsY3VsYXRlZCBmb3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSc6ICR7ZXJyfWApO1xuXHRcdH1cblx0XHRjb25zdCBwbGFjZUhvbGRlciA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGxhY2Vob2xkZXIgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXJFeHByZXNzaW9uID0gcGxhY2VIb2xkZXIgPyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGxhY2VIb2xkZXIpKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwYXJhbWV0ZXJUeXBlID0gRURNX1RZUEVfTUFQUElORz8uW3BhcmFtZXRlci50eXBlXT8udHlwZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE11bHRpVmFsdWVGaWVsZFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJFeHByZXNzaW9ufVxuXHRcdFx0XHRpdGVtcz17eyBwYXRoOiBgbXZmdmlldz4vJHtwYXJhbWV0ZXIubmFtZX1gIH19XG5cdFx0XHRcdGRlbGVnYXRlPXt7IG5hbWU6IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvTXVsdGlWYWx1ZVBhcmFtZXRlckRlbGVnYXRlXCIgfX1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17cGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWV9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdHZhbHVlSGVscD17aGFzVmFsdWVIZWxwKHBhcmFtZXRlcikgPyBnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17YHtwYXRoOiAnbXZmdmlldz5LZXknLCB0eXBlOicke3BhcmFtZXRlclR5cGV9J31gfSBkZXNjcmlwdGlvbj1cInttdmZ2aWV3PkRlc2N9XCIgLz5cblx0XHRcdDwvTXVsdGlWYWx1ZUZpZWxkPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIEZpbGVVcGxvYWRlciBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBGaWxlVXBsb2FkZXIge1xuXHRcdGxldCBmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXM7XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKFxuXHRcdFx0XHR0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzIGFzIHVua25vd24gYXMgc3RyaW5nW11cblx0XHRcdCkubWFwKCh0eXBlKSA9PiBgJyR7dHlwZX0nYCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDtcblx0XHR9XG5cdFx0Y29uc3QgaGFuZGxlVHlwZU1pc3NtYXRjaCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBmaWxlVXBsb2FkZXIuZ2V0TWltZVR5cGUoKTtcblx0XHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB2ZXJpZnkgY2hlY2sgZm9yIHN0cmVhbVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5tYXhMZW5ndGgpO1xuXHRcdGNvbnN0IGhhbmRsZUZpbGVTaXplRXhjZWVkID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQ/LmdldFNvdXJjZSgpO1xuXHRcdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKGZpbGVVcGxvYWRlciwgZmlsZVVwbG9hZGVyLmdldE1heGltdW1GaWxlU2l6ZSgpLnRvRml4ZWQoMykpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25VcGxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgPT09IDAgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSBhcyBudW1iZXIpID49IDQwMCkge1xuXHRcdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHQoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VSYXdcIikgYXMgc3RyaW5nKSB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VcIikgYXMgc3RyaW5nKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0bmFtZT1cIkZFVjRGaWxlVXBsb2FkXCJcblx0XHRcdFx0YnV0dG9uT25seT1cImZhbHNlXCJcblx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0dHlwZU1pc3NtYXRjaD17aGFuZGxlVHlwZU1pc3NtYXRjaH1cblx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtoYW5kbGVGaWxlU2l6ZUV4Y2VlZH1cblx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dH1cblx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIGZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmllbGRcblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsIHBheWxvYWQ6IHsgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogdHJ1ZSB9IH19XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHZhbHVlPXtBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSl9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e2lzTXVsdGlMaW5lVGV4dChwYXJhbWV0ZXIpfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZhbHVlSGVscD17aGFzVmFsdWVIZWxwKHBhcmFtZXRlcikgPyBnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRkZXBlbmRlbnRzPXt0aGlzLmNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQpfVxuXHRcdFx0XHR2aXNpYmxlPXtjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXIubmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBhcmFtZXRlci5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHRkZWxlZ2F0ZT17e1xuXHRcdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0PyBgJHtnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSl9LyR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0ICB9LyR7cGFyYW1ldGVyLm5hbWV9YFxuXHRcdFx0XHRcdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lLnN1YnN0cmluZyh0aGlzLmFjdGlvbi5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke3BhcmFtZXRlci5uYW1lfWAsXG5cdFx0XHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fX1cblx0XHRcdFx0dmFsaWRhdGVJbnB1dD17cmVxdWlyZXNWYWxpZGF0aW9uKHBhcmFtZXRlcil9XG5cdFx0XHRcdHR5cGVhaGVhZD17XG5cdFx0XHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdFx0XHQ8TVRhYmxlXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJQb3BvdmVyXCIsIFwicXVhbGlmaWVyXCJdKX1cblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZT17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0PyB1c2VDYXNlU2Vuc2l0aXZlRmlsdGVyUmVxdWVzdHMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkuZW50aXR5Q29udGFpbmVyLmFubm90YXRpb25zLkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Py5GaWx0ZXJGdW5jdGlvbnMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkgPz8gW11cblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBmYWxzZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHVzZUFzVmFsdWVIZWxwPXshIXBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHR9XG5cdFx0XHRcdGRpYWxvZz17dGhpcy5jcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcil9XG5cdFx0XHQ+PC9WYWx1ZUhlbHA+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBWYWx1ZUhlbHAgZGlhbG9nIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIEEgZGlhbG9nIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgVkgsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFZIRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiA8VkhEaWFsb2cgLz47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZpZWxkIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgdWk1IGV2ZW50XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWVsZENoYW5nZShldmVudDogTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgRmllbGQkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmllbGRQcm9taXNlID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRTb3VyY2UoKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWVsZCk7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBmaWVsZFByb21pc2U7XG5cdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHRyeSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0gYXdhaXQgZmllbGRQcm9taXNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRkZWxldGUgcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSB0cnVlO1xuXHRcdFx0QWN0aW9uUnVudGltZS5fYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBwYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBTQVBVSTUgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudC5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGV2ZW50OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmlsZXMgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWxlc1wiKTtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHQvLyBjb3JyZWN0aW9uIG5lZWRlZCBmb3IgbXVsdGlwbGUgZmlsZSB1cGxvYWRlcnNcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWxlVXBsb2FkZXIpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbyB8fCAhZmlsZXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSB7fTtcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8ubmFtZSBhcyBrZXlvZiB0eXBlb2YgcGFyYW1ldGVySW5mby52YWx1ZV0gPVxuXHRcdFx0XHRhd2FpdCB0aGlzLmdldEJhc2U2NEZpbGUoZmlsZXMpO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVsodGhpcy5nZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyKSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPikucGF0aF0gPVxuXHRcdFx0XHQoZmlsZXNbMF0gYXMgRmlsZSkudHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXIpIGFzIHN0cmluZ10gPSAoZmlsZXNbMF0gYXMgRmlsZSkubmFtZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFBhdGggYXMgYSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pLnBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBNaW1lIHR5cGUgd2l0aCB0aGUgYXNzb2NpYXRlZCBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uTWVkaWFUeXBlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgU3RyZWFtIHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29tcGxleCB0eXBlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBFZG0uU3RyZWFtIHByb3BlcnR5LlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHBhcmFtZXRlci50eXBlUmVmZXJlbmNlIGFzIENvbXBsZXhUeXBlKS5wcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyZWFtXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gZmlsZXMgVGhlIGZpbGUgc2VsZWN0ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBmaWxlIGNvbnRlbnQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEJhc2U2NEZpbGUoZmlsZXM6IG9iamVjdFtdKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRyZWFkZXIub25sb2FkID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXJlYWRlci5yZXN1bHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZSgocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KFwiLFwiKVsxXSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoKGZpbGVzIGFzIHVua25vd24gYXMgRmlsZUxpc3QpLml0ZW0oMCkhKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBjb250cm9sSWQgPSBnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSk7XG5cdFx0Ly8gYWxzbyByZW1vdmUgbWVzc2FnZXMgYXNzaWduZWQgdG8gaW5uZXIgY29udHJvbHMsIGJ1dCBhdm9pZCByZW1vdmluZyBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHBhcmFtZXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGlkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5zcGxpdChcIi1cIikuaW5jbHVkZXMoaWQpKVxuXHRcdCk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKHJlbGV2YW50TWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEZvcm1FbGVtZW50cyBhbG9uZyB3aXRoIHRoZSBhcnJheSBvZiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBGb3JtRWxlbWVudHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEZvcm1FbGVtZW50cyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8RGlhbG9nQ29udGVudFR5cGVzPiB7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgdGhpcy5jcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRmb3JtRWxlbWVudHM6IGZvcm1FbGVtZW50cyxcblx0XHRcdHBhcmFtZXRlcjogcGFyYW1ldGVyXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXREaWFsb2coKTogRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVEaWFsb2coKTogUHJvbWlzZTxEaWFsb2c+IHtcblx0XHRsZXQgZGlhbG9nQ29udGVudHM6IEZvcm1FbGVtZW50VHlwZVtdID0gW107XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnM6IERpYWxvZ0NvbnRlbnRUeXBlc1tdID0gW107XG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IHRoaXMuYWN0aW9uLmlzQm91bmQgPyB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzLnNsaWNlKDEpIDogdGhpcy5hY3Rpb24ucGFyYW1ldGVycztcblxuXHRcdC8vIElmIE9wZXJhdGlvbmFsUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkIGZvciB0aGlzIGFjdGlvbiwgdGhleSBhcmUgdXNlZCB0byBncm91cCB0aGUgYWN0aW9uIHBhcmFtZXRlcnNcblx0XHQvLyB3aXRoIHRpdGxlc1xuXHRcdGlmICh0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucz8uVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cykge1xuXHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVyR3JvdXBzOiBFbGVtZW50R3JvdXBbXSA9IFtdO1xuXHRcdFx0dGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cz8uZm9yRWFjaChmdW5jdGlvbiAoZmFjZXQ6IFJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGxldCBmYWNldFRpdGxlO1xuXHRcdFx0XHRpZiAoZmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdFx0ZmFjZXRUaXRsZSA9IGZhY2V0LkxhYmVsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoYXNGaWVsZEdyb3VwVGFyZ2V0KGZhY2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBmYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdFx0XHRcdFx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRncm91cGVkQWN0aW9uUGFyYW1ldGVycy5wdXNoKChncm91cCBhcyBEYXRhRmllbGQpLlZhbHVlLiR0YXJnZXQgYXMgQWN0aW9uUGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJHcm91cHMucHVzaCh7XG5cdFx0XHRcdFx0XHRmYWNldFRpdGxlOiBmYWNldFRpdGxlIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRkYXRhOiBncm91cGVkQWN0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gR2V0IHRoZSBmaWVsZHMgZm9yIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRjb25zdCBnZXRHcm91cEZvcm0gPSBhc3luYyAoZ3JvdXA6IEVsZW1lbnRHcm91cCk6IFByb21pc2U8RWxlbWVudEdyb3VwQ29udmVydGVkPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKGdyb3VwLmRhdGEubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdFx0cmV0dXJuIHsgZmFjZXRUaXRsZTogZ3JvdXAuZmFjZXRUaXRsZSwgZGF0YTogZm9ybUVsZW1lbnRzIH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmb3JtRGF0YSA9IGFjdGlvblBhcmFtZXRlckdyb3Vwcy5tYXAoYXN5bmMgKHBhcmFtZXRlckdyb3VwKSA9PiBnZXRHcm91cEZvcm0ocGFyYW1ldGVyR3JvdXApKTtcblx0XHRcdGNvbnN0IG9wRmFjZXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZm9ybURhdGEpO1xuXG5cdFx0XHQvLyBBZGQgdGhlIHRpdGxlIGNvbnRyb2wgdG8gZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdG9wRmFjZXRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0ZGlhbG9nQ29udGVudHMucHVzaCg8VGl0bGUgdGV4dD17ZGlhbG9nQ29udGVudC5mYWNldFRpdGxlfSAvPik7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmRhdGEubWFwKChlbGVtZW50KSA9PiBkaWFsb2dDb250ZW50cy5wdXNoKGVsZW1lbnQuZm9ybUVsZW1lbnRzKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAob3BGYWNldCkge1xuXHRcdFx0XHRvcEZhY2V0LmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkXG5cdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWN0aW9uUGFyYW1ldGVycy5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0ZGlhbG9nQ29udGVudHMgPSBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLm1hcCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5mb3JtRWxlbWVudHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLnJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgZGVmZXJyZWQgY3JlYXRlIHdlIGhhdmUgbm8gdmlldywgc28gd2UgbmVlZCB0byBnZXQgdGhlIHJlc291cmNlIG1vZGVsIGZyb20gdGhlIGFwcCBjb21wb25lbnRcblxuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcCA9IHRoaXMuZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpO1xuXG5cdFx0Y29uc3QgZW5kQnV0dG9uID0gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJDYW5jZWxcIl0pfVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiKX1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcykoKTtcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRjb25zdCBkaWFsb2cgPSAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFRpdGxlVGV4dCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpfVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZV0pfVxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyPXt0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcyl9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0cmVzaXphYmxlPXt0cnVlfVxuXHRcdFx0XHRhZnRlckNsb3NlPXt0aGlzLmFmdGVyQ2xvc2UuYmluZCh0aGlzKX1cblx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdGFmdGVyT3Blbj17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJPcGVuKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGluaXRpYWxGb2N1cz17ZW5kQnV0dG9ufSAvLyBUaGUgaW5pdGlhbCBmb2N1cyBpcyBzZXQgcHJvZ3JhbW1hdGljYWxseSBpbiBhZnRlck9wZW4sIHRvIGF2b2lkIG9wZW5pbmcgdGhlIFZIIGRpYWxvZ1xuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGJlZ2luQnV0dG9uOiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05fQ09OVElOVUVcIilcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5nZXRCZWdpbkJ1dHRvbkxhYmVsKHRoaXMucGFyYW1ldGVycy5sYWJlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BcHBseS5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJFbXBoYXNpemVkXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbmRCdXR0b246IGVuZEJ1dHRvbixcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlICh1bmtub3duIHByb3BlcnR5IGJpbmRpbmcpXG5cdFx0XHRcdFx0XHQvLyBjb2x1bW5zTSBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGVyZSBhcmUgdGl0bGVzIGluIHRoZSBjb250ZW50LlxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0e21lc3NhZ2VTdHJpcCAmJiA8TWVzc2FnZVN0cmlwIHNob3dJY29uPVwidHJ1ZVwiIHRleHQ9e21lc3NhZ2VTdHJpcH0+PC9NZXNzYWdlU3RyaXA+fVxuXHRcdFx0XHRcdFx0XHQ8U2ltcGxlRm9ybSBjb2x1bW5zTT17XCIyXCJ9IGVkaXRhYmxlPVwidHJ1ZVwiIGxhYmVsU3Bhbkw9e1wiMTJcIn0gbGFiZWxTcGFuTT17XCIxMlwifSBiaW5kaW5nPXtcIiRQYXJhbWV0ZXJcIn0+XG5cdFx0XHRcdFx0XHRcdFx0e3sgY29udGVudDogZGlhbG9nQ29udGVudHMgfX1cblx0XHRcdFx0XHRcdFx0PC9TaW1wbGVGb3JtPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KTtcblx0XHR0aGlzLmRpYWxvZyA9IGRpYWxvZztcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIGZvciB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldEJlZ2luQnV0dG9uTGFiZWwoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfQ09NTU9OX0RJQUxPR19PS1wiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRpdGxlVGV4dChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9USVRMRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NRVNTQUdFX1RFWFRcIjtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgYW4gb3ZlcnJpZGRlbiB0ZXh0XG5cdCAqIEBwYXJhbSBkZWZhdWx0S2V5IFRoZSBkZWZhdWx0IGtleSBmb3IgdGhlIHRleHRcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgb3IgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldE92ZXJyaWRkZW5UZXh0KGtleTogc3RyaW5nLCBkZWZhdWx0S2V5OiBzdHJpbmcsIGFjdGlvbkxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKGFjdGlvbkxhYmVsKSB7XG5cdFx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uTGFiZWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChkZWZhdWx0S2V5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlc3MgZXZlbnQgb2YgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BcHBseSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50cy4gVGhlIEJ1c3lMb2NrZXIgaXMgbm90IGZhc3QgZW5vdWdoLiAoQkNQOiAyMzcwMTMwMjEwKVxuXHRcdGlmICh0aGlzLmJ1dHRvbkxvY2sgfHwgIXRoaXMuZGlhbG9nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nO1xuXG5cdFx0Y29uc3QgcGFyYW1ldGVyQ29udGV4dCA9IChkaWFsb2cuZ2V0T2JqZWN0QmluZGluZygpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmcgfCB1bmRlZmluZWQpPy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cblx0XHQvLyBsb2NrIHRoZSBidXR0b24gdG8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHNcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSB0cnVlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhkaWFsb2cpO1xuXG5cdFx0Ly8gdmFsaWRhdGUgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzLiBJdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBhcyBhIGZpcnN0IG9wZXJhdGlvbiBhcyB0aGVyZSBpcyBhXG5cdFx0Ly8gd2FpdCBkb25lIGZvciB0aGUgdmFsdWUgY2hhbmdlcyB0byBjb21wbGV0ZSB1cGRhdGluZyB0aGUgbW9kZWwuIEV2ZW4gaW4gY2FzZXMgd2hlcmUgdmFsaWRhdGlvbiBpc1xuXHRcdC8vIG5vdCBjb25maWd1cmVkIHRoaXMgcHJvbWlzZSBuZWVkcyB0byBiZSByZXNvbHZlZCB0byByZWFkIGZyb20gdGhlIG1vZGVsIHRvIHJldHVybiB1c2VyIGVudGVyZWQgdmFsdWVzLlxuXHRcdGlmICghKGF3YWl0IEFjdGlvblJ1bnRpbWUudmFsaWRhdGVQcm9wZXJ0aWVzKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MsIHRoaXMucmVzb3VyY2VNb2RlbCkpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhkaWFsb2cpO1xuXHRcdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV3VmFsdWVzRGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdC4uLnRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvcykgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5wYXJhbWV0ZXI7XG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9iamVjdC52YWx1ZXMoKGRpYWxvZy5nZXRNb2RlbChcIm12ZnZpZXdcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShgLyR7cGFyYW1ldGVyLm5hbWV9YCkgPz8ge30pLm1hcChcblx0XHRcdFx0XHRcdChwYXJhbVZhbHVlKSA9PiAocGFyYW1WYWx1ZSBhcyB7IEtleT86IFByaW1pdGl2ZVR5cGUgfSk/LktleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0XHRcdC8vIEZpbGUgVXBsb2FkZXJcblx0XHRcdFx0XHR2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gcGFyYW1ldGVyQ29udGV4dD8uZ2V0UHJvcGVydHkocGFyYW1ldGVyLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7IFtwYXJhbWV0ZXIubmFtZV06IHZhbHVlIH07XG5cdFx0XHR9KVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0Y29uc3QgaXNOZXdWYWx1ZSA9IE9iamVjdC52YWx1ZXMobmV3VmFsdWVzRGljdGlvbmFyeSkuc29tZSgodmFsdWUpID0+ICEhdmFsdWUpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZShuZXdWYWx1ZXNEaWN0aW9uYXJ5KTtcblxuXHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIGlzTmV3VmFsdWUpO1xuXHRcdC8vIER1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgZGlhbG9nIHRvIHN0YXJ0IGEgbmV3IGl0ZXJhdGlvbi5cblx0ICpcblx0ICovXG5cdHB1YmxpYyByZXNldFN0YXRlKCk6IHZvaWQge1xuXHRcdHRoaXMudW5sb2NrRGlhbG9nKCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0dGhpcy51cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgdG8gb25lIHdpdGggcHJpb3JpdHkgbWVzc2FnZS5cblx0ICpcblx0ICogT24gaW5pdGlhbCBhY3Rpb24gZXhlY3V0aW9uLCB3ZSBtaWdodCBoYXZlIGJvdW5kIG1lc3NhZ2VzIHdpdGggYW55IHNlbGVjdGVkIGNvbnRleHRzIGFzIHRhcmdldCBhcGFydCBmcm9tIHRoZSBkaWFsb2cncyBpbml0aWFsIGNvbnRleHQuXG5cdCAqIFdlIGNoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIGRpYWxvZyBmb3IgdGhlIHBhcmFtZXRlciBmaWVsZHMnIHRvIGdldCB0aGUgdmFsaWQgdmFsdWUgc3RhdGUgZnJvbSB0aGUgcHJpb3JpdHkgYm91bmQgbWVzc2FnZS5cblx0ICovXG5cdHVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPCAyKSB7XG5cdFx0XHQvLyBXZSB3b3VsZCBuZWVkIHRvIHN3aXRjaCB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgb25seSB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgY29udGV4dHMgZm9yIGV4ZWN1dGluZyB0aGUgYWN0aW9uLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCB3YXJuaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsIGluZm9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBlcnJvbmVvdXNDdHggPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBjb250ZXh0LmdldE1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMuc29tZSgobXNnKSA9PiB7XG5cdFx0XHRcdC8vIFdlIGhvbGQgZmlyc3QgY29udGV4dCB3aXRoIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlcy5cblx0XHRcdFx0d2FybmluZ0NvbnRleHQgPSAhd2FybmluZ0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuV2FybmluZyA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGluZm9Db250ZXh0ID0gIWluZm9Db250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gRXJyb3IgaXMgZm91bmQhISEgV2Ugc2hhbGwgZXhpdC5cblx0XHRcdFx0cmV0dXJuIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgY29udGV4dFRvVXNlID0gZXJyb25lb3VzQ3R4ID8/IHdhcm5pbmdDb250ZXh0ID8/IGluZm9Db250ZXh0O1xuXG5cdFx0aWYgKGNvbnRleHRUb1VzZSkge1xuXHRcdFx0dGhpcy5kaWFsb2c/LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHRUb1VzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGJ1c3kgc3RhdGUgb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgdW5sb2NrRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZyAmJiBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZGlhbG9nKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5kaWFsb2cpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgY2FuY2VsIGFjdGlvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBvbkNhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QoRkVMaWJyYXJ5LkNvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdHRoaXMuY2xvc2VEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGRpYWxvZy5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cpIHtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkPy4oKTtcblx0XHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGFjdGlvbiByZXN1bHQuXG5cdCAqL1xuXHRhc3luYyBvcGVuRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIG9uIG9wZW5pbmcgdGhlIGRpYWxvZ1wiKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciksXG5cdFx0XHR0aGlzLnBhcmFtZXRlck1vZGVsLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRNb2RlbHModGhpcy5kaWFsb2cpO1xuXHRcdHRoaXMucGFyYW1ldGVycy52aWV3Py5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHRcdGF3YWl0IHRoaXMuc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5kaWFsb2cub3BlbigpO1xuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBvd25lciBvZiB0aGUgZGlhbG9nXG5cdCAqL1xuXHRwcml2YXRlIHNldE1vZGVscyhkaWFsb2c6IERpYWxvZyk6IHZvaWQge1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy5wYXJhbWV0ZXJzLm1vZGVsKTtcblx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0cGF0aDogYCR7dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IFwiXCIgOiBcIi9cIn0ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWBcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0fVxuXHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0ZGlhbG9nLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoe30pLCBcIm12ZnZpZXdcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIF9ldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBiZWZvcmVPcGVuKF9ldmVudDogRGlhbG9nJEJlZm9yZU9wZW5FdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMgdG8gYmUgc2V0LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgd2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaWFsb2dPcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoXG5cdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8UGFyYW1ldGVyRGVmYXVsdFZhbHVlPiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRjb25zdCBwYXJhbWV0ZXJNb2RlbERhdGEgPSB0aGlzLnBhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIubmFtZTtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRpZiAoZGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDAgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhGb3JDb250ZXh0OiBzdHJpbmcgPVxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciAmJiBkZWZhdWx0VmFsdWUucGF0aC5zdGFydHNXaXRoKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2ApXG5cdFx0XHRcdFx0XHRcdD8gZGVmYXVsdFZhbHVlLnBhdGgucmVwbGFjZShgJHtiaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKVxuXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHRWYWx1ZS5wYXRoO1xuXHRcdFx0XHRcdGxldCBwYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoLCBvcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKCkpO1xuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gYXdhaXQgb3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCkucmVxdWVzdFByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBjb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UHJvcGVydHkocGF0aEZvckNvbnRleHQpICE9PSBwYXJhbVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbVZhbHVlIH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgcGFyYW1OYW1lLCB0aGlzLmFjdGlvbi5uYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lLCB2YWx1ZTogZGVmYXVsdFZhbHVlLnZhbHVlT2YoKSB9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbWV0ZXJNb2RlbERhdGFbcGFyYW1OYW1lXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIXRoaXMucGFyYW1ldGVycy52aWV3IHx8ICF0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIHx8ICFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdC5zdWJzdHJpbmcoMCwgdGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHQpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1xuXHRcdCkgYXMgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBUaGUgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGRpYWxvZyBUaGUgZGlhbG9nXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIGNvbnRhaW5pbmcgYWxsIHByZWRlZmluZWQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZyxcblx0XHRkaWFsb2c6IERpYWxvZ1xuXHQpOiBQcm9taXNlPHtcblx0XHRjb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRkZWZhdWx0VmFsdWVzOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWVbXTtcblx0XHRmdW5jdGlvblZhbHVlczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fT4ge1xuXHRcdGNvbnN0IGJvdW5kRnVuY3Rpb25OYW1lID0gdGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24/LnZhbHVlT2YoKTtcblx0XHRsZXQgcmVxdWVzdENvbnRleHRPYmplY3Q6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHRsZXQgZnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblx0XHRpZiAodGhpcy5hY3Rpb24uaXNCb3VuZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBib3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gT3BlcmF0aW9uLmdldE9wZXJhdGlvbkZyb21OYW1lKGJvdW5kRnVuY3Rpb25OYW1lLCBtb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdFx0aWYgKGJvdW5kRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRmdW5jdGlvblBhcmFtcyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoYXN5bmMgKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBPRGF0YU9wZXJhdGlvbihcblx0XHRcdFx0XHRcdFx0Ym91bmRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogbW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IFtjb250ZXh0XVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQ6IFwiZnVuY3Rpb25Hcm91cFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkuZXhlY3V0ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoaXNGdWxmaWxsZWQpWzBdPy52YWx1ZS5ib3VuZENvbnRleHQ7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXF1ZXN0Q29udGV4dE9iamVjdCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRleHRWYWx1ZXMgPSBhd2FpdCByZXF1ZXN0Q29udGV4dE9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKGFzeW5jIChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIsIGJpbmRpbmdQYXJhbWV0ZXIsIGRpYWxvZylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdFByb21pc2UuYWxsKGZ1bmN0aW9uUGFyYW1zKSxcblx0XHRcdFx0dGhpcy5nZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKClcblx0XHRcdF0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlcyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogcHJvbWlzZXNbMF0sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1sxXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczogcHJvbWlzZXNbMl1cblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIHRoZSBmdW5jdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgYXMgdGhleSBhcmVuJ3QgaGVscGZ1bCBmb3IgYSB1c2VyXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlczoge30sXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXM6IFtdLFxuXHRcdFx0XHRmdW5jdGlvblZhbHVlczogW10sXG5cdFx0XHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQgd2l0aG91dCBvcGVuaW5nIHRoZSBWSCBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIGFmdGVyT3BlbigpOiB2b2lkIHtcblx0XHRjb25zdCBmaXJzdFZpc2libGVQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAoZmlyc3RWaXNpYmxlUGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaXJzdEZpZWxkID0gZmlyc3RWaXNpYmxlUGFyYW1ldGVyPy5maWVsZDtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpcnN0RmllbGQ/LmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRmaXJzdEZpZWxkPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ09wZW5lZD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluZm8uXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZW50cyBUaGUgZGlhbG9nIGNvbnRlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50czogRGlhbG9nQ29udGVudFR5cGVzW10pOiB2b2lkIHtcblx0XHQvL1JlZ2lzdGVyIHRoZSBmaWVsZFxuXHRcdGRpYWxvZ0NvbnRlbnRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGRpYWxvZ0NvbnRlbnQ/LnBhcmFtZXRlcjtcblx0XHRcdGNvbnN0IGZpZWxkID0gZGlhbG9nQ29udGVudD8uZm9ybUVsZW1lbnRzPy5bMV07XG5cdFx0XHR0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLnB1c2goe1xuXHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdGZpZWxkLFxuXHRcdFx0XHRpc011bHRpVmFsdWU6IHBhcmFtZXRlci5pc0NvbGxlY3Rpb24sXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMoZGlhbG9nOiBEaWFsb2cpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnNbMF0ubmFtZSA6IFwiXCI7XG5cdFx0Y29uc3QgeyBjb250ZXh0VmFsdWVzLCBkZWZhdWx0VmFsdWVzLCBmdW5jdGlvblZhbHVlcywgbWFuaWZlc3RGdW5jdGlvblZhbHVlcyB9ID0gYXdhaXQgdGhpcy5nZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdFx0YmluZGluZ1BhcmFtZXRlcixcblx0XHRcdGRpYWxvZ1xuXHRcdCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblxuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyKSB7XG5cdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyLCBjb250ZXh0VmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0aWYgKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyLm5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZTtcblx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gdGhpcy5wYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gcGFyYW1ldGVyTmFtZSk/LnZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMuaGFzT3duUHJvcGVydHkocGFyYW1ldGVyTmFtZSkpIHtcblx0XHRcdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzW3BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0VmFsdWVzW2ldICYmIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zLkNvbW1vbj8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uICYmICFkZWZhdWx0VmFsdWVzW2ldLm5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHNldE9mRnVuY3Rpb25WYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oXG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gZnVuY3Rpb25WYWx1ZXNbaW5kZXhdLmdldE9iamVjdChwYXJhbWV0ZXJOYW1lKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZXRPZkZ1bmN0aW9uVmFsdWVzLnNpemUgPT09IDEgJiYgc2V0T2ZGdW5jdGlvblZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIEFycmF5LmZyb20oc2V0T2ZGdW5jdGlvblZhbHVlcylbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdGlmIChkZWZhdWx0VmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5sYXRlUHJvcGVydHlFcnJvcikpIHtcblx0XHRcdGNvbnN0IHJlZnJlc2ggPSB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIik7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiKSwge1xuXHRcdFx0XHRhY3Rpb25zOiBbcmVmcmVzaCwgTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiByZWZyZXNoLFxuXHRcdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSByZWZyZXNoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLnBhcmFtZXRlcnMudmlldz8uZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0XHRcdFx0KGV4dGVuc2lvbkFQSSBhcyBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIHwgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjI1ZW1cIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIGRlc3Ryb3kgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdGZvciAoY29uc3QgZnVuY3Rpb25Db250ZXh0IG9mIGZ1bmN0aW9uVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gZnVuY3Rpb25Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgY2xvc2Ugb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJDbG9zZSgpOiB2b2lkIHtcblx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0Zm9yIChjb25zdCBpIGluIHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MpIHtcblx0XHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIpO1xuXHRcdH1cblx0XHR0aGlzLmRpYWxvZz8uZGVzdHJveSgpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBoZXJlLCBub3QgaW4gdGhlIHByZXNzIGV2ZW50cyBmaW5hbGx5IGNsYXVzZS4gSW4gY2FzZSB0aGUgVUkgaXMgc2x1Z2dpc2gsIGJlZ2luIGJ1dHRvbiBjb3VsZCBiZSBwcmVzc2VkIGFnYWluLlxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTRGcUJBLHFCQUFxQjtJQTRCekMsU0FBQUEsc0JBQ2tCQyxNQUFjLEVBQ2RDLFVBYWhCLEVBQ2dCQyxlQUFzRCxFQUN0REMsYUFBaUMsRUFDakNDLGNBQThCLEVBQzlDO01BeENGO01BQ0E7TUFDQTtNQUFBLEtBQ1FDLFlBQVksR0FBRyxLQUFLO01BQUEsS0FNcEJDLFVBQVUsR0FBRyxLQUFLO01BQUEsS0FJVEMsb0JBQW9CLEdBQTZELEVBQUU7TUFBQSxLQUVuRkMsY0FBYyxHQUFjLElBQUlDLFNBQVMsQ0FBQztRQUMxREMsWUFBWSxFQUFFLENBQUM7TUFDaEIsQ0FBQyxDQUFDO01BQUEsS0FLZ0JWLE1BQWMsR0FBZEEsTUFBYztNQUFBLEtBQ2RDLFVBYWhCLEdBYmdCQSxVQWFoQjtNQUFBLEtBQ2dCQyxlQUFzRCxHQUF0REEsZUFBc0Q7TUFBQSxLQUN0REMsYUFBaUMsR0FBakNBLGFBQWlDO01BQUEsS0FDakNDLGNBQThCLEdBQTlCQSxjQUE4QjtNQUUvQyxJQUFJLENBQUNPLFVBQVUsR0FBR0MsWUFBWSxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDYixNQUFNLENBQUM7TUFDekQsSUFBSSxDQUFDYyxTQUFTLEdBQUcsSUFBSSxDQUFDYixVQUFVLENBQUNjLEtBQUssQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDckQsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSSxDQUFDaEIsVUFBVSxDQUFDaUIsSUFBSSxHQUFHQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNsQixVQUFVLENBQUNpQixJQUFJLENBQUMsR0FBR0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDbUIsWUFBWSxDQUFDO01BQ25JLElBQUksQ0FBQ0MsdUJBQXVCLEdBQUcsSUFBSUMsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQy9ELElBQUksQ0FBQ0MsdUJBQXVCLEdBQUdGLE9BQU87UUFDdEMsSUFBSSxDQUFDRyxzQkFBc0IsR0FBR0YsTUFBTTtNQUNyQyxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBSkNHLFFBQUEsR0FBQTVCLHFCQUFBO0lBQUEsSUFBQTZCLE1BQUEsR0FBQTdCLHFCQUFBLENBQUE4QixTQUFBO0lBQUFELE1BQUEsQ0FLUUUsb0JBQW9CLEdBQTVCLFNBQVFBLG9CQUFvQkEsQ0FBQ0MsU0FBMEIsRUFBMkM7TUFDakcsTUFBTUMsV0FBVyxHQUFHRCxTQUFTLENBQUNDLFdBQVc7UUFDeENDLFlBQVksR0FBR0QsV0FBVyxDQUFDRSxNQUFNLEVBQUVDLFlBQVk7UUFDL0NDLFNBQVMsR0FBSUosV0FBVyxDQUFDSyxJQUFJLEVBQTBDQyxTQUFTLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO1FBQzNGQyxRQUFRLEdBQUlSLFdBQVcsQ0FBQ0ssSUFBSSxFQUEwQ0ksUUFBUSxFQUFFRixPQUFPLENBQUMsQ0FBQztNQUUxRixJQUFJSCxTQUFTLElBQUlJLFFBQVEsRUFBRTtRQUMxQixPQUFPRSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDO01BQ3hDLENBQUMsTUFBTSxJQUFJWCxZQUFZLEVBQUU7UUFDeEIsT0FBT1ksTUFBTSxDQUNaQyxvQkFBb0IsQ0FBQ2YsU0FBUyxDQUFDLEVBQy9CWSxhQUFhLENBQUNDLFFBQVEsRUFDdEJDLE1BQU0sQ0FBQ0Usb0JBQW9CLENBQUNoQixTQUFTLENBQUMsRUFBRVksYUFBYSxDQUFDSyxRQUFRLEVBQUVMLGFBQWEsQ0FBQ00sUUFBUSxDQUN2RixDQUFDO01BQ0Y7TUFDQSxPQUFPUCxRQUFRLENBQUNDLGFBQWEsQ0FBQ00sUUFBUSxDQUFDO0lBQ3hDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckIsTUFBQSxDQUtjc0IsaUJBQWlCLEdBQS9CLGVBQWNBLGlCQUFpQkEsQ0FBQ25CLFNBQTBCLEVBQTRCO01BQ3JGLE1BQU1vQixjQUFjLEdBQUcsSUFBSSxDQUFDbkQsTUFBTSxDQUFDb0QsT0FBTyxHQUN2QyxHQUFHLElBQUksQ0FBQ3RDLFNBQVMsQ0FBQ3VDLFdBQVcsQ0FBQyxJQUFJLENBQUNwRCxVQUFVLENBQUNxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSUMsWUFBWSxDQUFDLElBQUksQ0FBQzFDLFNBQVMsQ0FBQyxDQUFDMkMsU0FBUyxJQUM5RyxJQUFJLENBQUN6RCxNQUFNLENBQUMwRCxJQUFJLEVBQ2QsR0FDRixJQUFJLElBQUksQ0FBQzFELE1BQU0sQ0FBQzBELElBQUksRUFBRTtNQUN6QixNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDN0MsU0FBUyxDQUFDOEMsb0JBQW9CLENBQUMsR0FBR1QsY0FBYyxJQUFJcEIsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLENBQUU7TUFDL0YsSUFBSUcsS0FBSztNQUNULElBQUlDLEtBQUssR0FBRy9CLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDRSxNQUFNLEVBQUU2QixLQUFLLEdBQzVDLElBQUksQ0FBQzlDLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ2pDLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDRSxNQUFNLENBQUM2QixLQUFLLENBQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FDekVsQyxTQUFTLENBQUMyQixJQUFJO01BQ2pCLElBQUlRLGVBQWU7TUFDbkIsSUFBSW5DLFNBQVMsQ0FBQ29DLFlBQVksRUFBRTtRQUMzQk4sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDTyxnQkFBZ0IsQ0FBQ3JDLFNBQVMsRUFBRTRCLFdBQVcsQ0FBQztNQUM1RCxDQUFDLE1BQU0sSUFBSSxDQUFDNUIsU0FBUyxDQUFDc0MsSUFBSSxDQUFDQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFO1FBQ25GbUMsZUFBZSxHQUFHLElBQUksQ0FBQ0ssaUJBQWlCLENBQUN4QyxTQUFTLENBQUM7UUFDbkQ7UUFDQStCLEtBQUssR0FBR0ksZUFBZSxFQUFFbEMsV0FBVyxDQUFDRSxNQUFNLEVBQUU2QixLQUFLLEdBQy9DLElBQUksQ0FBQzlDLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ0UsZUFBZSxDQUFDbEMsV0FBVyxDQUFDRSxNQUFNLENBQUM2QixLQUFLLENBQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FDOUVDLGVBQWUsRUFBRVIsSUFBZTtRQUNwQ0csS0FBSyxHQUFHLElBQUksQ0FBQ1csa0JBQWtCLENBQUN6QyxTQUFTLENBQUM7TUFDM0MsQ0FBQyxNQUFNO1FBQ044QixLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNZLFdBQVcsQ0FBQzFDLFNBQVMsRUFBRTRCLFdBQVcsQ0FBQztNQUN2RDtNQUNBLE9BQ0NlLEtBQUEsQ0FBQUMsU0FBQTtRQUFBQyxRQUFBLEdBQ0NDLElBQUEsQ0FBQ2QsS0FBSztVQUFDZSxFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksRUFBRVEsZUFBZSxFQUFFUixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUU7VUFBQ3NCLElBQUksRUFBRWxCO1FBQU0sQ0FBRSxDQUFDLEVBQzdGRCxLQUFLO01BQUEsQ0FDTCxDQUFDO0lBRUw7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQWpDLE1BQUEsQ0FNY3dDLGdCQUFnQixHQUE5QixlQUFjQSxnQkFBZ0JBLENBQUNyQyxTQUEwQixFQUFFa0QsZ0JBQXlCLEVBQTRCO01BQy9HLElBQUlDLE9BQU8sR0FBRyxPQUFPO01BQ3JCLElBQUk7UUFDSEEsT0FBTyxHQUFHLE1BQU1DLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUNILGdCQUFnQixDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFO1VBQUVDLE9BQU8sRUFBRUw7UUFBaUIsQ0FBQyxDQUFDO01BQ2xILENBQUMsQ0FBQyxPQUFPTSxHQUFZLEVBQUU7UUFDdEJDLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHFGQUFxRjFELFNBQVMsQ0FBQzJCLElBQUksTUFBTTZCLEdBQUcsRUFBRSxDQUFDO01BQzVIO01BQ0EsTUFBTUcsV0FBVyxHQUFHM0QsU0FBUyxDQUFDQyxXQUFXLENBQUMyRCxFQUFFLEVBQUVDLFdBQWlFO01BQy9HLE1BQU1DLHFCQUFxQixHQUFHSCxXQUFXLEdBQUdJLGlCQUFpQixDQUFDQywyQkFBMkIsQ0FBQ0wsV0FBVyxDQUFDLENBQUMsR0FBR00sU0FBUztNQUNuSCxNQUFNQyxhQUFhLEdBQUdDLGdCQUFnQixHQUFHbkUsU0FBUyxDQUFDc0MsSUFBSSxDQUFDLEVBQUVBLElBQUk7TUFDOUQsT0FDQ1EsSUFBQSxDQUFDc0IsZUFBZTtRQUNmckIsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLENBQUMsQ0FBRTtRQUN2QzBDLFdBQVcsRUFBRVAscUJBQXNCO1FBQ25DUSxLQUFLLEVBQUU7VUFBRUMsSUFBSSxFQUFFLFlBQVl2RSxTQUFTLENBQUMyQixJQUFJO1FBQUcsQ0FBRTtRQUM5QzZDLFFBQVEsRUFBRTtVQUFFN0MsSUFBSSxFQUFFO1FBQW1ELENBQUU7UUFDdkV3QixPQUFPLEVBQUVBLE9BQVE7UUFDakJzQixRQUFRLEVBQUUsSUFBSSxDQUFDMUUsb0JBQW9CLENBQUNDLFNBQVMsQ0FBRTtRQUMvQzBFLEtBQUssRUFBQyxNQUFNO1FBQ1pDLGFBQWEsRUFBRTNFLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFZ0IsYUFBYSxFQUFFcEUsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFLO1FBQzNFcUUsUUFBUSxFQUFFZCxpQkFBaUIsQ0FBQ2UsbUNBQW1DLENBQUM5RSxTQUFTLEVBQUUsSUFBSSxDQUFDL0IsTUFBTSxFQUFFd0QsWUFBWSxDQUFDLElBQUksQ0FBQzFDLFNBQVMsQ0FBQyxDQUFDLENBQUU7UUFDdkhnRyxTQUFTLEVBQUVDLFlBQVksQ0FBQ2hGLFNBQVMsQ0FBQyxHQUFHZ0QsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFb0IsU0FBUyxDQUFDMkIsSUFBSSxDQUFDLENBQUMsR0FBR3NDLFNBQVU7UUFDN0ZnQixNQUFNLEVBQUUsTUFBT0MsQ0FBQyxJQUFvQixJQUFJLENBQUNDLGlCQUFpQixDQUFDRCxDQUFDLEVBQUVsRixTQUFTLENBQUU7UUFDekVvRixPQUFPLEVBQUVyQixpQkFBaUIsQ0FBQ3NCLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDdEIsMkJBQTJCLENBQUNoRSxTQUFTLENBQUNDLFdBQVcsRUFBRTJELEVBQUUsRUFBRTJCLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUU7UUFDN0dDLGNBQWMsRUFBRSxDQUFDeEMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFaEQsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUU7UUFDOUQ4RCxVQUFVLEVBQUUsSUFBSSxDQUFDQyw4QkFBOEIsQ0FBQzFGLFNBQVMsRUFBRWtELGdCQUFnQixDQUFFO1FBQUFMLFFBQUEsRUFFN0VDLElBQUEsQ0FBQzZDLG1CQUFtQjtVQUF3REMsV0FBVyxFQUFDO1FBQWdCLEdBQTlFLCtCQUErQjFCLGFBQWEsSUFBb0M7TUFBQyxDQUMzRixDQUFDO0lBRXBCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckUsTUFBQSxDQUtRNEMsa0JBQWtCLEdBQTFCLFNBQVFBLGtCQUFrQkEsQ0FBQ3pDLFNBQTBCLEVBQWdCO01BQ3BFLElBQUk2Rix3QkFBd0I7TUFDNUIsSUFBSSxJQUFJLENBQUNyRCxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRXdGLG9CQUFvQixFQUFFO1FBQzlFLE1BQU1DLGFBQWEsR0FBR0MsS0FBSyxDQUFDQyxJQUFJLENBQy9CLElBQUksQ0FBQ3pELGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUVDLFdBQVcsQ0FBQ0ssSUFBSSxFQUFFd0Ysb0JBQ3RELENBQUMsQ0FBQ0ksR0FBRyxDQUFFNUQsSUFBSSxJQUFLLElBQUlBLElBQUksR0FBRyxDQUFDO1FBQzVCdUQsd0JBQXdCLEdBQUcsdUJBQXVCRSxhQUFhLENBQUNJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztNQUMvRTtNQUNBLE1BQU1DLG1CQUFtQixHQUFHLFNBQUFBLENBQVVDLEtBQXNDLEVBQVE7UUFDbkYsTUFBTUMsWUFBWSxHQUFHRCxLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU1DLFNBQVMsR0FBR0gsS0FBSyxDQUFDSSxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ2hELE1BQU1WLGFBQWEsR0FBR08sWUFBWSxDQUFDSSxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJRixTQUFTLEVBQUU7VUFDZEcsc0JBQXNCLENBQUNMLFlBQVksRUFBRUUsU0FBUyxFQUFFVCxhQUFhLENBQUM7UUFDL0Q7TUFDRCxDQUFDO01BQ0Q7TUFDQSxNQUFNYSxlQUFlLEdBQUd4RCxXQUFXLENBQUN5RCxtQkFBbUIsQ0FBQyxJQUFJLENBQUNyRSxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFOEcsU0FBUyxDQUFDO01BQ3JHLE1BQU1DLG9CQUFvQixHQUFHLFNBQUFBLENBQVVWLEtBQXVDLEVBQVE7UUFDckYsTUFBTUMsWUFBWSxHQUFHRCxLQUFLLEVBQUVFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDUyx3QkFBd0IsQ0FBQ1YsWUFBWSxFQUFFQSxZQUFZLENBQUNXLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JGLENBQUM7TUFDRCxNQUFNQyxnQkFBZ0IsR0FBRyxTQUFBQSxDQUFVZCxLQUF1QyxFQUFRO1FBQ2pGLElBQUlBLEtBQUssQ0FBQ0ksWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBS0osS0FBSyxDQUFDSSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQWUsR0FBRyxFQUFFO1VBQzFGVyw2QkFBNkIsQ0FDNUJmLEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFDaEJGLEtBQUssQ0FBQ0ksWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFnQkosS0FBSyxDQUFDSSxZQUFZLENBQUMsVUFBVSxDQUNoRixDQUFDO1FBQ0Y7TUFDRCxDQUFDO01BQ0QsT0FDQzNELElBQUEsQ0FBQ3VFLFlBQVk7UUFDWjFGLElBQUksRUFBQyxnQkFBZ0I7UUFDckIyRixVQUFVLEVBQUMsT0FBTztRQUNsQkMsUUFBUSxFQUFDLE1BQU07UUFDZkMsUUFBUSxFQUFDLE9BQU87UUFDaEJDLE9BQU8sRUFBQywwREFBMEQ7UUFDbEVDLElBQUksRUFBQyxtQkFBbUI7UUFDeEJDLEtBQUssRUFBQyxhQUFhO1FBQ25CQyxPQUFPLEVBQUMsTUFBTTtRQUNkQyxZQUFZLEVBQUMsT0FBTztRQUNwQkMsbUJBQW1CLEVBQUMsTUFBTTtRQUMxQkMsY0FBYyxFQUFDLE9BQU87UUFDdEJDLFFBQVEsRUFBRW5DLHdCQUF5QjtRQUNuQ29DLGFBQWEsRUFBRTdCLG1CQUFvQjtRQUNuQzhCLGVBQWUsRUFBRXRCLGVBQWdCO1FBQ2pDdUIsY0FBYyxFQUFFcEIsb0JBQXFCO1FBQ3JDcUIsaUJBQWlCLEVBQUVDLDZCQUE2QixDQUFDQyxHQUFJO1FBQ3JEQyxjQUFjLEVBQUVwQixnQkFBaUI7UUFDakNsQyxNQUFNLEVBQUUsTUFBT0MsQ0FBQyxJQUFvQixJQUFJLENBQUNzRCx3QkFBd0IsQ0FBQ3RELENBQUMsRUFBRWxGLFNBQVM7TUFBRSxDQUNoRixDQUFDO0lBRUo7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQUgsTUFBQSxDQU1jNkMsV0FBVyxHQUF6QixlQUFjQSxXQUFXQSxDQUFDMUMsU0FBMEIsRUFBRWtELGdCQUF5QixFQUFrQjtNQUNoRyxJQUFJQyxPQUFPLEdBQUcsT0FBTztNQUNyQixJQUFJO1FBQ0hBLE9BQU8sR0FBRyxNQUFNQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDSCxnQkFBZ0IsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsRUFBRTtVQUFFQyxPQUFPLEVBQUVMO1FBQWlCLENBQUMsQ0FBQztNQUNsSCxDQUFDLENBQUMsT0FBT00sR0FBWSxFQUFFO1FBQ3RCQyxHQUFHLENBQUNDLE9BQU8sQ0FBQyxnRkFBZ0YxRCxTQUFTLENBQUMyQixJQUFJLE1BQU02QixHQUFHLEVBQUUsQ0FBQztNQUN2SDtNQUNBLE1BQU1HLFdBQVcsR0FBRzNELFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFQyxXQUFpRTtNQUMvRyxNQUFNQyxxQkFBcUIsR0FBR0gsV0FBVyxHQUFHSSxpQkFBaUIsQ0FBQ0MsMkJBQTJCLENBQUNMLFdBQVcsQ0FBQyxDQUFDLEdBQUdNLFNBQVM7TUFDbkgsT0FDQ25CLElBQUEsQ0FBQzJGLEtBQUs7UUFDTGpFLFFBQVEsRUFBRTtVQUFFN0MsSUFBSSxFQUFFLHVDQUF1QztVQUFFK0csT0FBTyxFQUFFO1lBQUVDLHlCQUF5QixFQUFFO1VBQUs7UUFBRSxDQUFFO1FBQzFHNUYsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLENBQUMsQ0FBRTtRQUN2Q2lILEtBQUssRUFBRUMsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQzVGLGdCQUFnQixDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFO1VBQUVDLE9BQU8sRUFBRUw7UUFBaUIsQ0FBQyxDQUFFO1FBQzVGbUIsV0FBVyxFQUFFUCxxQkFBc0I7UUFDbkNYLE9BQU8sRUFBRUEsT0FBUTtRQUNqQnNCLFFBQVEsRUFBRSxJQUFJLENBQUMxRSxvQkFBb0IsQ0FBQ0MsU0FBUyxDQUFFO1FBQy9DMEUsS0FBSyxFQUFDLE1BQU07UUFDWkMsYUFBYSxFQUFFb0UsZUFBZSxDQUFDL0ksU0FBUyxDQUFFO1FBQzFDNkUsUUFBUSxFQUFFZCxpQkFBaUIsQ0FBQ2UsbUNBQW1DLENBQUM5RSxTQUFTLEVBQUUsSUFBSSxDQUFDL0IsTUFBTSxFQUFFd0QsWUFBWSxDQUFDLElBQUksQ0FBQzFDLFNBQVMsQ0FBQyxDQUFDLENBQUU7UUFDdkhrRyxNQUFNLEVBQUUsTUFBT0MsQ0FBQyxJQUFvQixJQUFJLENBQUNDLGlCQUFpQixDQUFDRCxDQUFDLEVBQUVsRixTQUFTLENBQUU7UUFDekUrRSxTQUFTLEVBQUVDLFlBQVksQ0FBQ2hGLFNBQVMsQ0FBQyxHQUFHZ0QsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFb0IsU0FBUyxDQUFDMkIsSUFBSSxDQUFDLENBQUMsR0FBR3NDLFNBQVU7UUFDN0Z3QixVQUFVLEVBQUUsSUFBSSxDQUFDQyw4QkFBOEIsQ0FBQzFGLFNBQVMsRUFBRWtELGdCQUFnQixDQUFFO1FBQzdFa0MsT0FBTyxFQUFFckIsaUJBQWlCLENBQ3pCakQsTUFBTSxDQUNMZCxTQUFTLENBQUMyQixJQUFJLEtBQUssc0JBQXNCLEVBQ3pDLEtBQUssRUFDTDBELEdBQUcsQ0FBQ0MsS0FBSyxDQUFDdEIsMkJBQTJCLENBQUNoRSxTQUFTLENBQUNDLFdBQVcsRUFBRTJELEVBQUUsRUFBRTJCLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUNoRixDQUNELENBQUU7UUFDRkMsY0FBYyxFQUFFLENBQUN4QyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFBRSxDQUM5RCxDQUFDO0lBRUo7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTlCLE1BQUEsQ0FNUTZGLDhCQUE4QixHQUF0QyxTQUFRQSw4QkFBOEJBLENBQUMxRixTQUEwQixFQUFFa0QsZ0JBQXlCLEVBQXlCO01BQ3BILElBQUksQ0FBQzhCLFlBQVksQ0FBQ2hGLFNBQVMsQ0FBQyxFQUFFO1FBQzdCLE9BQU9pRSxTQUFTO01BQ2pCO01BQ0EsT0FDQ25CLElBQUEsQ0FBQ2tHLFNBQVM7UUFDVGpHLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFb0IsU0FBUyxDQUFDMkIsSUFBSSxDQUFDLENBQUU7UUFDaEQ2QyxRQUFRLEVBQUU7VUFDVDdDLElBQUksRUFBRSwyQ0FBMkM7VUFDakQrRyxPQUFPLEVBQUU7WUFDUk8sWUFBWSxFQUFFLElBQUksQ0FBQ2hMLE1BQU0sQ0FBQ29ELE9BQU8sR0FDOUIsR0FBRzZILHVCQUF1QixDQUFDQywyQkFBMkIsQ0FBa0JqRyxnQkFBZ0IsQ0FBQyxDQUFDLElBQzFGLElBQUksQ0FBQ3RFLFVBQVUsSUFDWG9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxHQUNwQixJQUFJLElBQUksQ0FBQzFELE1BQU0sQ0FBQzBELElBQUksQ0FBQ3lILFNBQVMsQ0FBQyxJQUFJLENBQUNuTCxNQUFNLENBQUMwRCxJQUFJLENBQUMwSCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUlySixTQUFTLENBQUMyQixJQUFJLEVBQUU7WUFDNUYySCxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2RDLGtCQUFrQixFQUFFO1VBQ3JCO1FBQ0QsQ0FBRTtRQUNGQyxhQUFhLEVBQUVDLGtCQUFrQixDQUFDekosU0FBUyxDQUFFO1FBQzdDMEosU0FBUyxFQUNSNUcsSUFBQSxDQUFDNkcsT0FBTztVQUFBOUcsUUFBQSxFQUNQQyxJQUFBLENBQUM4RyxNQUFNO1lBQ043RyxFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3BFLFVBQVUsRUFBRW9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUU7WUFDeEVrSSxhQUFhLEVBQ1osSUFBSSxDQUFDNUwsTUFBTSxDQUFDb0QsT0FBTyxHQUNoQnlJLDhCQUE4QixDQUM5QlgsMkJBQTJCLENBQWtCakcsZ0JBQWdCLENBQUMsRUFDN0R6QixZQUFZLENBQUMsSUFBSSxDQUFDMUMsU0FBUyxDQUFDLENBQUNnTCxlQUFlLENBQUM5SixXQUFXLENBQUMrSixZQUFZLEVBQ25FQyxlQUFlLElBQTRCLEVBQzlDLENBQUMsR0FDRCxLQUNIO1lBQ0RDLGNBQWMsRUFBRSxDQUFDLENBQUNsSyxTQUFTLENBQUNDLFdBQVcsQ0FBQ0UsTUFBTSxFQUFFZ0s7VUFBeUIsQ0FDekU7UUFBQyxDQUNNLENBQ1Q7UUFDREMsTUFBTSxFQUFFLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNySyxTQUFTO01BQUUsQ0FDakMsQ0FBQztJQUVmOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSCxNQUFBLENBS1F3SyxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFDckssU0FBMEIsRUFBd0I7TUFDN0UsSUFBSUEsU0FBUyxDQUFDQyxXQUFXLENBQUNFLE1BQU0sRUFBRWdLLHdCQUF3QixFQUFFM0osT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDL0UsT0FBT3NDLElBQUEsQ0FBQ3dILFFBQVEsSUFBRSxDQUFDO01BQ3BCLENBQUMsTUFBTTtRQUNOLE9BQU9yRyxTQUFTO01BQ2pCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXBFLE1BQUEsQ0FNY3NGLGlCQUFpQixHQUEvQixlQUFjQSxpQkFBaUJBLENBQUNrQixLQUFzRCxFQUFFckcsU0FBMEIsRUFBaUI7TUFDbEksTUFBTXVLLFlBQVksR0FBSWxFLEtBQUssQ0FBdUJJLFlBQVksQ0FBQyxTQUFTLENBQUM7TUFDekUsTUFBTTNFLEtBQUssR0FBSXVFLEtBQUssQ0FBdUJFLFNBQVMsQ0FBQyxDQUE0QjtNQUNqRixNQUFNaUUsYUFBYSxHQUFHLElBQUksQ0FBQ2hNLG9CQUFvQixDQUFDaU0sSUFBSSxDQUFFQyxtQkFBbUIsSUFBS0EsbUJBQW1CLENBQUM1SSxLQUFLLEtBQUtBLEtBQUssQ0FBQztNQUNsSCxJQUFJLENBQUMwSSxhQUFhLEVBQUU7UUFDbkI7TUFDRDtNQUNBQSxhQUFhLENBQUNHLGlCQUFpQixHQUFHSixZQUFZO01BQzlDO01BQ0EsSUFBSSxDQUFDSywwQkFBMEIsQ0FBQzVLLFNBQVMsQ0FBQztNQUMxQyxJQUFJO1FBQ0h3SyxhQUFhLENBQUM1QixLQUFLLEdBQUcsTUFBTTJCLFlBQVk7UUFDeEMsSUFBSSxDQUFDck0sVUFBVSxDQUFDMk0sZ0JBQWdCLENBQUNMLGFBQWEsQ0FBQ3hLLFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxHQUFHNkksYUFBYSxDQUFDNUIsS0FBSztRQUNwRjRCLGFBQWEsQ0FBQ00sUUFBUSxHQUFHLEtBQUs7TUFDL0IsQ0FBQyxDQUFDLE9BQU9DLEtBQUssRUFBRTtRQUNmLE9BQU9QLGFBQWEsQ0FBQzVCLEtBQUs7UUFDMUI0QixhQUFhLENBQUNNLFFBQVEsR0FBRyxJQUFJO1FBQzdCRSxhQUFhLENBQUNDLDZCQUE2QixDQUFDLENBQzNDO1VBQ0NQLG1CQUFtQixFQUFFRixhQUFhO1VBQ2xDVSxPQUFPLEVBQUdILEtBQUssQ0FBeUJHO1FBQ3pDLENBQUMsQ0FDRCxDQUFDO01BQ0g7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBckwsTUFBQSxDQU1jMkksd0JBQXdCLEdBQXRDLGVBQWNBLHdCQUF3QkEsQ0FBQ25DLEtBQStCLEVBQUVyRyxTQUEwQixFQUFpQjtNQUNsSCxNQUFNbUwsS0FBSyxHQUFHOUUsS0FBSyxDQUFDSSxZQUFZLENBQUMsT0FBTyxDQUFDO01BQ3pDLE1BQU1ILFlBQVksR0FBR0QsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztNQUN0QztNQUNBLE1BQU1pRSxhQUFhLEdBQUcsSUFBSSxDQUFDaE0sb0JBQW9CLENBQUNpTSxJQUFJLENBQUVDLG1CQUFtQixJQUFLQSxtQkFBbUIsQ0FBQzVJLEtBQUssS0FBS3dFLFlBQVksQ0FBQztNQUN6SCxJQUFJLENBQUNrRSxhQUFhLElBQUksQ0FBQ1csS0FBSyxFQUFFO1FBQzdCO01BQ0Q7TUFDQSxJQUFJLENBQUNQLDBCQUEwQixDQUFDNUssU0FBUyxDQUFDO01BQzFDd0ssYUFBYSxDQUFDNUIsS0FBSyxHQUFHLENBQUMsQ0FBQztNQUN4QixJQUFJLElBQUksQ0FBQ3BHLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUU7UUFDdEN3SyxhQUFhLENBQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDcEcsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRTJCLElBQUksQ0FBcUMsR0FDL0YsTUFBTSxJQUFJLENBQUN5SixhQUFhLENBQUNELEtBQUssQ0FBQztRQUNoQ1gsYUFBYSxDQUFDNUIsS0FBSyxDQUFFLElBQUksQ0FBQ3lDLGVBQWUsQ0FBQ3JMLFNBQVMsQ0FBQyxDQUFtQ3VFLElBQUksQ0FBQyxHQUMxRjRHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVTdJLElBQUksSUFBSSwwQkFBMEI7UUFDdERrSSxhQUFhLENBQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDMEMsZUFBZSxDQUFDdEwsU0FBUyxDQUFDLENBQVcsR0FBSW1MLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVXhKLElBQUk7UUFDeEY2SSxhQUFhLENBQUNNLFFBQVEsR0FBRyxLQUFLO1FBQzlCLElBQUksQ0FBQzVNLFVBQVUsQ0FBQzJNLGdCQUFnQixDQUFDTCxhQUFhLENBQUN4SyxTQUFTLENBQUMyQixJQUFJLENBQUMsR0FBRzZJLGFBQWEsQ0FBQzVCLEtBQUs7TUFDckY7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9JLE1BQUEsQ0FLUXlMLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQ3RMLFNBQTBCLEVBQXNCO01BQ3ZFLE9BQU8sQ0FBQyxJQUFJLENBQUN3QyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRWlMLGtCQUFrQixFQUFFQyxRQUFRLEVBQXNDakgsSUFBSTtJQUNwSTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFFLE1BQUEsQ0FLUXdMLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQ3JMLFNBQTBCLEVBQWdEO01BQ2pHLE9BQU9nRSwyQkFBMkIsQ0FBQyxJQUFJLENBQUN4QixpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRW1MLFNBQVMsQ0FBQztJQUNuRzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTVMLE1BQUEsQ0FLUTJDLGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQUN4QyxTQUEwQixFQUF3QjtNQUMzRSxPQUFRQSxTQUFTLENBQUMwTCxhQUFhLENBQWlCQyxVQUFVLEVBQUVsQixJQUFJLENBQUVtQixRQUFRLElBQUtBLFFBQVEsQ0FBQ3RKLElBQUksS0FBSyxZQUFZLENBQUM7SUFDL0c7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF6QyxNQUFBLENBS2N1TCxhQUFhLEdBQTNCLGVBQWNBLGFBQWFBLENBQUNELEtBQWUsRUFBbUI7TUFDN0QsT0FBTyxJQUFJNUwsT0FBTyxDQUFFQyxPQUFPLElBQUs7UUFDL0IsTUFBTXFNLE1BQU0sR0FBRyxJQUFJQyxVQUFVLENBQUMsQ0FBQztRQUMvQkQsTUFBTSxDQUFDRSxNQUFNLEdBQUcsTUFBWTtVQUMzQixJQUFJLENBQUNGLE1BQU0sQ0FBQ0csTUFBTSxFQUFFO1lBQ25CO1VBQ0Q7VUFDQXhNLE9BQU8sQ0FBRXFNLE1BQU0sQ0FBQ0csTUFBTSxDQUFZQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNESixNQUFNLENBQUNLLGFBQWEsQ0FBRWYsS0FBSyxDQUF5QmdCLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQztNQUM5RCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF0TSxNQUFBLENBSVErSywwQkFBMEIsR0FBbEMsU0FBUUEsMEJBQTBCQSxDQUFDNUssU0FBMEIsRUFBUTtNQUNwRSxNQUFNb00sUUFBUSxHQUFHQyxTQUFTLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ3RELE1BQU1DLFNBQVMsR0FBR3hKLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxDQUFDO01BQ3BEO01BQ0EsTUFBTThLLGdCQUFnQixHQUFHTCxRQUFRLENBQUNNLE1BQU0sQ0FBRUMsR0FBWSxJQUNyREEsR0FBRyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUU5SixFQUFVLElBQUt5SixTQUFTLENBQUNQLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ2EsUUFBUSxDQUFDL0osRUFBRSxDQUFDLENBQzNFLENBQUM7TUFDRHNKLFNBQVMsQ0FBQ1UsY0FBYyxDQUFDTixnQkFBZ0IsQ0FBQztJQUMzQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTVNLE1BQUEsQ0FLY21OLGVBQWUsR0FBN0IsZUFBY0EsZUFBZUEsQ0FBQ2hOLFNBQTBCLEVBQStCO01BQ3RGLE1BQU1pTixZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUM5TCxpQkFBaUIsQ0FBQ25CLFNBQVMsQ0FBQztNQUM1RCxPQUFPO1FBQ05pTixZQUFZLEVBQUVBLFlBQVk7UUFDMUJqTixTQUFTLEVBQUVBO01BQ1osQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUgsTUFBQSxDQUlBcU4sU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBdUI7TUFDL0IsT0FBTyxJQUFJLENBQUM5QyxNQUFNO0lBQ25COztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXZLLE1BQUEsQ0FJTXNOLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FBQSxFQUFvQjtNQUNyQyxJQUFJQyxjQUFpQyxHQUFHLEVBQUU7TUFDMUMsSUFBSUMsNEJBQWtELEdBQUcsRUFBRTtNQUMzRCxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNyUCxNQUFNLENBQUNvRCxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsTUFBTSxDQUFDQyxVQUFVLENBQUNxUCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDdFAsTUFBTSxDQUFDQyxVQUFVOztNQUV2RztNQUNBO01BQ0EsSUFBSSxJQUFJLENBQUNELE1BQU0sQ0FBQ2dDLFdBQVcsRUFBRTJELEVBQUUsRUFBRTRKLHdCQUF3QixFQUFFO1FBQzFELE1BQU1DLHFCQUFxQyxHQUFHLEVBQUU7UUFDaEQsSUFBSSxDQUFDeFAsTUFBTSxDQUFDZ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFNEosd0JBQXdCLEVBQUVFLE9BQU8sQ0FBQyxVQUFVQyxLQUFxQixFQUFFO1VBQzlGLElBQUlDLFVBQVU7VUFDZCxJQUFJRCxLQUFLLENBQUNFLEtBQUssZ0RBQXFDLEVBQUU7WUFDckRELFVBQVUsR0FBR0QsS0FBSyxDQUFDM0wsS0FBSztVQUN6QjtVQUNBLElBQUk4TCxtQkFBbUIsQ0FBQ0gsS0FBSyxDQUFDLEVBQUU7WUFDL0IsTUFBTUksVUFBVSxHQUFHSixLQUFLLEVBQUVLLE1BQU0sRUFBRUMsT0FBeUI7WUFDM0QsTUFBTUMsdUJBQTBDLEdBQUcsRUFBRTtZQUVyREgsVUFBVSxDQUFDSSxJQUFJLENBQUNULE9BQU8sQ0FBQyxVQUFVVSxLQUFjLEVBQUU7Y0FDakRGLHVCQUF1QixDQUFDRyxJQUFJLENBQUVELEtBQUssQ0FBZUUsS0FBSyxDQUFDTCxPQUEwQixDQUFDO1lBQ3BGLENBQUMsQ0FBQztZQUNGUixxQkFBcUIsQ0FBQ1ksSUFBSSxDQUFDO2NBQzFCVCxVQUFVLEVBQUVBLFVBQXlEO2NBQ3JFVyxJQUFJLEVBQUVMO1lBQ1AsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDLENBQUM7O1FBRUY7UUFDQSxNQUFNTSxZQUFZLEdBQUcsTUFBT0osS0FBbUIsSUFBcUM7VUFDbkYsTUFBTW5CLFlBQVksR0FBRyxNQUFNMU4sT0FBTyxDQUFDa1AsR0FBRyxDQUFDTCxLQUFLLENBQUNHLElBQUksQ0FBQ3JJLEdBQUcsQ0FBQyxJQUFJLENBQUM4RyxlQUFlLENBQUMwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUN2RixPQUFPO1lBQUVkLFVBQVUsRUFBRVEsS0FBSyxDQUFDUixVQUFVO1lBQUVXLElBQUksRUFBRXRCO1VBQWEsQ0FBQztRQUM1RCxDQUFDO1FBRUQsTUFBTTBCLFFBQVEsR0FBR2xCLHFCQUFxQixDQUFDdkgsR0FBRyxDQUFDLE1BQU8wSSxjQUFjLElBQUtKLFlBQVksQ0FBQ0ksY0FBYyxDQUFDLENBQUM7UUFDbEcsTUFBTUMsUUFBUSxHQUFHLE1BQU10UCxPQUFPLENBQUNrUCxHQUFHLENBQUNFLFFBQVEsQ0FBQzs7UUFFNUM7UUFDQUUsUUFBUSxDQUFDbkIsT0FBTyxDQUFFb0IsYUFBYSxJQUFLO1VBQ25DMUIsY0FBYyxDQUFDaUIsSUFBSSxDQUFDdkwsSUFBQSxDQUFDaU0sS0FBSztZQUFDOUwsSUFBSSxFQUFFNkwsYUFBYSxDQUFDbEI7VUFBVyxDQUFFLENBQUMsQ0FBQztVQUM5RCxPQUFPa0IsYUFBYSxDQUFDUCxJQUFJLENBQUNySSxHQUFHLENBQUU4SSxPQUFPLElBQUs1QixjQUFjLENBQUNpQixJQUFJLENBQUNXLE9BQU8sQ0FBQy9CLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQztRQUVGNEIsUUFBUSxDQUFDbkIsT0FBTyxDQUFDLFVBQVV1QixPQUFPLEVBQUU7VUFDbkNBLE9BQU8sQ0FBQ1YsSUFBSSxDQUFDYixPQUFPLENBQUMsVUFBVXNCLE9BQU8sRUFBRTtZQUN2QzNCLDRCQUE0QixDQUFDZ0IsSUFBSSxDQUFDVyxPQUFPLENBQUM7VUFDM0MsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ047UUFDQTNCLDRCQUE0QixHQUFHLE1BQU05TixPQUFPLENBQUNrUCxHQUFHLENBQUNuQixnQkFBZ0IsQ0FBQ3BILEdBQUcsQ0FBQyxJQUFJLENBQUM4RyxlQUFlLENBQUMwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2R3RCLGNBQWMsR0FBR0MsNEJBQTRCLENBQUNuSCxHQUFHLENBQUU0SSxhQUFhLElBQUs7VUFDcEUsT0FBT0EsYUFBYSxDQUFDN0IsWUFBWTtRQUNsQyxDQUFDLENBQUM7TUFDSDtNQUVBLElBQUksQ0FBQ2lDLDJCQUEyQixDQUFDN0IsNEJBQTRCLENBQUM7O01BRTlEOztNQUVBLE1BQU04QixZQUFZLEdBQUcsSUFBSSxDQUFDQywrQkFBK0IsQ0FBQyxDQUFDO01BRTNELE1BQU1DLFNBQVMsR0FDZHZNLElBQUEsQ0FBQ3dNLE1BQU07UUFDTnZNLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNwRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFFO1FBQ2xFcUUsSUFBSSxFQUFFLElBQUksQ0FBQy9ELGFBQWEsQ0FBQytDLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBRTtRQUM1RXNOLEtBQUssRUFBRUEsQ0FBQSxLQUFZO1VBQ2xCLElBQUksQ0FBQ0MsUUFBUSxDQUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQjtNQUFFLENBQ0YsQ0FDRDtNQUNELE1BQU10RSxNQUFNLEdBQ1h0SCxJQUFBLENBQUMyTSxNQUFNO1FBQ05DLEtBQUssRUFBRSxJQUFJLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUN6UixVQUFVLENBQUM2RCxLQUFLLENBQUU7UUFDaERnQixFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDcEUsVUFBVSxDQUFDLENBQUU7UUFDOUNnUixhQUFhLEVBQUUsSUFBSSxDQUFDSixRQUFRLENBQUNkLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDeENtQixTQUFTLEVBQUUsSUFBSztRQUNoQkMsU0FBUyxFQUFFLElBQUs7UUFDaEJDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDdkNzQixVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVLENBQUN0QixJQUFJLENBQUMsSUFBSSxDQUFFO1FBQ3ZDdUIsU0FBUyxFQUFFQSxDQUFBLEtBQVk7VUFDdEIsSUFBSSxDQUFDQSxTQUFTLENBQUMsQ0FBQztRQUNqQixDQUFFO1FBQ0ZDLFlBQVksRUFBRWIsU0FBVSxDQUFDO1FBQUE7UUFBQXhNLFFBQUEsRUFFeEI7VUFDQXNOLFdBQVcsRUFDVnJOLElBQUEsQ0FBQ3dNLE1BQU07WUFDTnZNLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNwRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFFO1lBQzlEcUUsSUFBSSxFQUNILElBQUksQ0FBQy9FLFVBQVUsQ0FBQ2tTLGNBQWMsS0FBSyxJQUFJLEdBQ3BDLElBQUksQ0FBQ2xSLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQywwREFBMEQsQ0FBQyxHQUN0RixJQUFJLENBQUNvTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUNuUyxVQUFVLENBQUM2RCxLQUFLLENBQ2pEO1lBQ0R3TixLQUFLLEVBQUVBLENBQUEsS0FBWTtjQUNsQixJQUFJLENBQUNlLE9BQU8sQ0FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUU7WUFDRnBNLElBQUksRUFBQztVQUFZLENBQ2pCLENBQ0Q7VUFDRCtNLFNBQVMsRUFBRUEsU0FBUztVQUNwQmtCLE9BQU87VUFDTjtVQUNBO1VBQ0E7VUFDQTVOLEtBQUEsQ0FBQUMsU0FBQTtZQUFBQyxRQUFBLEdBQ0VzTSxZQUFZLElBQUlyTSxJQUFBLENBQUMwTixZQUFZO2NBQUNDLFFBQVEsRUFBQyxNQUFNO2NBQUN4TixJQUFJLEVBQUVrTTtZQUFhLENBQWUsQ0FBQyxFQUNsRnJNLElBQUEsQ0FBQzROLFVBQVU7Y0FBQ0MsUUFBUSxFQUFFLEdBQUk7Y0FBQ0MsUUFBUSxFQUFDLE1BQU07Y0FBQ0MsVUFBVSxFQUFFLElBQUs7Y0FBQ0MsVUFBVSxFQUFFLElBQUs7Y0FBQ0MsT0FBTyxFQUFFLFlBQWE7Y0FBQWxPLFFBQUEsRUFDbkc7Z0JBQUUwTixPQUFPLEVBQUVuRDtjQUFlO1lBQUMsQ0FDakIsQ0FBQztVQUFBLENBQ1o7UUFFSjtNQUFDLENBQ00sQ0FDUjtNQUNELElBQUksQ0FBQ2hELE1BQU0sR0FBR0EsTUFBTTtNQUNwQixPQUFPQSxNQUFNO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF2SyxNQUFBLENBS1F3USxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFDVyxXQUErQixFQUFVO01BQ3BFLE1BQU1DLEdBQUcsR0FBRyxxQ0FBcUM7TUFDakQsTUFBTUMsVUFBVSxHQUFHLG9CQUFvQjtNQUN2QyxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNGLEdBQUcsRUFBRUMsVUFBVSxFQUFFRixXQUFXLENBQUM7SUFDNUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFuUixNQUFBLENBS1E4UCxZQUFZLEdBQXBCLFNBQVFBLFlBQVlBLENBQUNxQixXQUErQixFQUFVO01BQzdELE1BQU1DLEdBQUcsR0FBRyxzQ0FBc0M7TUFDbEQsTUFBTUMsVUFBVSxHQUFHLDRDQUE0QztNQUMvRCxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNGLEdBQUcsRUFBRUMsVUFBVSxFQUFFRixXQUFXLENBQUM7SUFDNUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBblIsTUFBQSxDQUlRdVAsK0JBQStCLEdBQXZDLFNBQVFBLCtCQUErQkEsQ0FBQSxFQUF1QjtNQUM3RCxNQUFNNkIsR0FBRyxHQUFHLHNDQUFzQztNQUNsRCxJQUFJRyxlQUFlLEdBQUcsSUFBSSxDQUFDeFMsVUFBVTtNQUNyQ3dTLGVBQWUsR0FBR0EsZUFBZSxDQUFDbkYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDb0YsR0FBRyxDQUFDLENBQUMsSUFBSUQsZUFBZTtNQUNyRSxNQUFNRSxpQkFBaUIsR0FBR0YsZUFBZSxJQUFJLElBQUksQ0FBQ2hULGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQ0EsYUFBYSxJQUFJZ1QsZUFBZSxFQUFFLEdBQUcsRUFBRTtNQUNqSCxJQUFJLElBQUksQ0FBQ2xTLGFBQWEsQ0FBQ3FTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsSUFBSUssaUJBQWlCLEVBQUUsQ0FBQyxFQUFFO1FBQy9FLE9BQU8sSUFBSSxDQUFDcFMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDZ1AsR0FBRyxFQUFFaE4sU0FBUyxFQUFFcU4saUJBQWlCLENBQUM7TUFDckUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDcFMsYUFBYSxDQUFDcVMsd0JBQXdCLENBQUMsR0FBR04sR0FBRyxJQUFJLElBQUksQ0FBQzdTLGFBQWEsRUFBRSxDQUFDLEVBQUU7UUFDdkYsT0FBTyxJQUFJLENBQUNjLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ2dQLEdBQUcsRUFBRWhOLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQzdGLGFBQWEsRUFBRSxDQUFDO01BQzNFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ2MsYUFBYSxDQUFDcVMsd0JBQXdCLENBQUMsR0FBR04sR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNqRSxPQUFPLElBQUksQ0FBQy9SLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ2dQLEdBQUcsQ0FBQztNQUN2QztNQUNBLE9BQU9oTixTQUFTO0lBQ2pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXBFLE1BQUEsQ0FPUXNSLGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQUNGLEdBQVcsRUFBRUMsVUFBa0IsRUFBRUYsV0FBb0IsRUFBVTtNQUN4RixJQUFJSSxlQUFlLEdBQUcsSUFBSSxDQUFDeFMsVUFBVTtNQUNyQ3dTLGVBQWUsR0FBR0EsZUFBZSxDQUFDbkYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDb0YsR0FBRyxDQUFDLENBQUMsSUFBSUQsZUFBZTtNQUNyRSxNQUFNRSxpQkFBaUIsR0FBR0YsZUFBZSxJQUFJLElBQUksQ0FBQ2hULGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQ0EsYUFBYSxJQUFJZ1QsZUFBZSxFQUFFLEdBQUcsRUFBRTtNQUNqSCxJQUFJSixXQUFXLEVBQUU7UUFDaEIsSUFBSSxJQUFJLENBQUM5UixhQUFhLENBQUNxUyx3QkFBd0IsQ0FBQyxHQUFHTixHQUFHLElBQUlLLGlCQUFpQixFQUFFLENBQUMsRUFBRTtVQUMvRSxPQUFPLElBQUksQ0FBQ3BTLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ2dQLEdBQUcsRUFBRWhOLFNBQVMsRUFBRXFOLGlCQUFpQixDQUFDO1FBQ3JFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3BTLGFBQWEsQ0FBQ3FTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsSUFBSSxJQUFJLENBQUM3UyxhQUFhLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZGLE9BQU8sSUFBSSxDQUFDYyxhQUFhLENBQUMrQyxPQUFPLENBQUNnUCxHQUFHLEVBQUVoTixTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM3RixhQUFhLEVBQUUsQ0FBQztRQUMzRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNjLGFBQWEsQ0FBQ3FTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsRUFBRSxDQUFDLEVBQUU7VUFDakUsT0FBTyxJQUFJLENBQUMvUixhQUFhLENBQUMrQyxPQUFPLENBQUNnUCxHQUFHLENBQUM7UUFDdkMsQ0FBQyxNQUFNO1VBQ04sT0FBT0QsV0FBVztRQUNuQjtNQUNELENBQUMsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDOVIsYUFBYSxDQUFDK0MsT0FBTyxDQUFDaVAsVUFBVSxDQUFDO01BQzlDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBclIsTUFBQSxDQUljeVEsT0FBTyxHQUFyQixlQUFjQSxPQUFPQSxDQUFBLEVBQWtCO01BQ3RDO01BQ0EsSUFBSSxJQUFJLENBQUMvUixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUM2TCxNQUFNLEVBQUU7UUFDcEM7TUFDRDtNQUNBLE1BQU1BLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07TUFFMUIsTUFBTWxILGdCQUFnQixHQUFJa0gsTUFBTSxDQUFDb0gsZ0JBQWdCLENBQUMsQ0FBQyxFQUFzQ0MsbUJBQW1CLENBQUMsQ0FBQzs7TUFFOUc7TUFDQSxJQUFJLENBQUNsVCxVQUFVLEdBQUcsSUFBSTtNQUN0Qm1ULFVBQVUsQ0FBQ0MsSUFBSSxDQUFDdkgsTUFBTSxDQUFDOztNQUV2QjtNQUNBO01BQ0E7TUFDQSxJQUFJLEVBQUUsTUFBTVksYUFBYSxDQUFDNEcsa0JBQWtCLENBQUMsSUFBSSxDQUFDcFQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDVSxhQUFhLENBQUMsQ0FBQyxFQUFFO1FBQzdGd1MsVUFBVSxDQUFDRyxNQUFNLENBQUN6SCxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDN0wsVUFBVSxHQUFHLEtBQUs7UUFDdkI7TUFDRDtNQUVBLE1BQU11VCxtQkFBbUIsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsSUFBSSxDQUFDeFQsb0JBQW9CLENBQUMwSCxHQUFHLENBQUUxSCxvQkFBb0IsSUFBSztRQUMxRCxNQUFNd0IsU0FBUyxHQUFHeEIsb0JBQW9CLENBQUN3QixTQUFTO1FBQ2hELElBQUk0SSxLQUFLO1FBQ1QsSUFBSTVJLFNBQVMsQ0FBQ29DLFlBQVksRUFBRTtVQUMzQndHLEtBQUssR0FBR21KLE1BQU0sQ0FBQ0UsTUFBTSxDQUFFN0gsTUFBTSxDQUFDOEgsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFlQyxXQUFXLENBQUMsSUFBSW5TLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3VFLEdBQUcsQ0FDMUdrTSxVQUFVLElBQU1BLFVBQVUsRUFBOEJDLEdBQzFELENBQUM7UUFDRixDQUFDLE1BQU0sSUFBSSxDQUFDclMsU0FBUyxDQUFDc0MsSUFBSSxDQUFDQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFO1VBQ25GO1VBQ0E0SSxLQUFLLEdBQUdwSyxvQkFBb0IsQ0FBQ29LLEtBQUs7UUFDbkMsQ0FBQyxNQUFNO1VBQ05BLEtBQUssR0FBRzFGLGdCQUFnQixFQUFFaVAsV0FBVyxDQUFDblMsU0FBUyxDQUFDMkIsSUFBSSxDQUFDO1FBQ3REO1FBQ0EsT0FBTztVQUFFLENBQUMzQixTQUFTLENBQUMyQixJQUFJLEdBQUdpSDtRQUFNLENBQUM7TUFDbkMsQ0FBQyxDQUNGLENBQWtDO01BQ2xDLE1BQU0wSixVQUFVLEdBQUdQLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDSCxtQkFBbUIsQ0FBQyxDQUFDakYsSUFBSSxDQUFFakUsS0FBSyxJQUFLLENBQUMsQ0FBQ0EsS0FBSyxDQUFDO01BRTlFLElBQUksQ0FBQ2xKLHVCQUF1QixDQUFDb1MsbUJBQW1CLENBQUM7TUFFakQsSUFBSSxDQUFDNVQsVUFBVSxDQUFDbUIsWUFBWSxDQUFDNlMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDSyxXQUFXLENBQUNDLGdCQUFnQixDQUFDQyxnQkFBZ0IsRUFBRUgsVUFBVSxDQUFDO01BQ3RHO01BQ0E7TUFDQSxJQUFJLENBQUNqVSxjQUFjLENBQUNxVSx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdTLE1BQUEsQ0FJTzhTLFVBQVUsR0FBakIsU0FBT0EsVUFBVUEsQ0FBQSxFQUFTO01BQ3pCLElBQUksQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDclUsVUFBVSxHQUFHLEtBQUs7TUFDdkIsSUFBSSxDQUFDc1Usa0NBQWtDLENBQUMsQ0FBQztNQUN6QyxJQUFJLENBQUN2VCx1QkFBdUIsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDL0QsSUFBSSxDQUFDQyx1QkFBdUIsR0FBR0YsT0FBTztRQUN0QyxJQUFJLENBQUNHLHNCQUFzQixHQUFHRixNQUFNO01BQ3JDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFJLE1BQUEsQ0FNQWdULGtDQUFrQyxHQUFsQyxTQUFBQSxrQ0FBa0NBLENBQUEsRUFBUztNQUMxQyxJQUFJLElBQUksQ0FBQzNVLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ3VSLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEM7UUFDQTtNQUNEO01BRUEsSUFBSUMsY0FBMEMsRUFBRUMsV0FBdUM7TUFDdkYsTUFBTUMsWUFBWSxHQUFHLElBQUksQ0FBQy9VLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ2tKLElBQUksQ0FBRWxILE9BQU8sSUFBSztRQUMvRCxNQUFNNkksUUFBUSxHQUFHN0ksT0FBTyxDQUFDMlAsV0FBVyxDQUFDLENBQUM7UUFDdEMsT0FBTzlHLFFBQVEsQ0FBQ1MsSUFBSSxDQUFFRixHQUFHLElBQUs7VUFDN0I7VUFDQW9HLGNBQWMsR0FBRyxDQUFDQSxjQUFjLElBQUlwRyxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNDLE9BQU8sR0FBRzlQLE9BQU8sR0FBR1UsU0FBUztVQUMvRitPLFdBQVcsR0FBRyxDQUFDQSxXQUFXLElBQUlyRyxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNFLFdBQVcsR0FBRy9QLE9BQU8sR0FBR1UsU0FBUztVQUM3RjtVQUNBLE9BQU8wSSxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNHLEtBQUs7UUFDM0MsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO01BQ0YsTUFBTUMsWUFBWSxHQUFHUCxZQUFZLElBQUlGLGNBQWMsSUFBSUMsV0FBVztNQUVsRSxJQUFJUSxZQUFZLEVBQUU7UUFDakIsSUFBSSxDQUFDcEosTUFBTSxFQUFFcUosaUJBQWlCLENBQUNELFlBQVksQ0FBQztNQUM3QztJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUEzVCxNQUFBLENBR1ErUyxZQUFZLEdBQXBCLFNBQVFBLFlBQVlBLENBQUEsRUFBUztNQUM1QixJQUFJLElBQUksQ0FBQ3hJLE1BQU0sSUFBSXNILFVBQVUsQ0FBQ2dDLFFBQVEsQ0FBQyxJQUFJLENBQUN0SixNQUFNLENBQUMsRUFBRTtRQUNwRHNILFVBQVUsQ0FBQ0csTUFBTSxDQUFDLElBQUksQ0FBQ3pILE1BQU0sQ0FBQztNQUMvQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUF2SyxNQUFBLENBR1EyUCxRQUFRLEdBQWhCLFNBQVFBLFFBQVFBLENBQUEsRUFBUztNQUN4QixJQUFJLENBQUM3UCxzQkFBc0IsQ0FBQ2dVLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxrQkFBa0IsQ0FBQztNQUNuRSxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ25COztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFqVSxNQUFBLENBR09pVSxXQUFXLEdBQWxCLFNBQU9BLFdBQVdBLENBQUEsRUFBUztNQUMxQixJQUFJLElBQUksQ0FBQzFKLE1BQU0sRUFBRTtRQUNoQixJQUFJLENBQUNsTSxVQUFVLENBQUM2VixNQUFNLEVBQUVDLHVCQUF1QixHQUFHLENBQUM7UUFDbkQsSUFBSSxDQUFDNUosTUFBTSxDQUFDNkosS0FBSyxDQUFDLENBQUM7TUFDcEI7TUFDQSxJQUFJLENBQUMzVixZQUFZLEdBQUcsS0FBSztJQUMxQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF1QixNQUFBLENBSU1xVSxVQUFVLEdBQWhCLGVBQU1BLFVBQVVBLENBQUEsRUFBa0I7TUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQzlKLE1BQU0sRUFBRTtRQUNqQixNQUFNLElBQUltSixLQUFLLENBQUMsNkJBQTZCLENBQUM7TUFDL0M7TUFDQSxNQUFNWSxXQUFXLENBQUNDLGVBQWUsQ0FDaEMsSUFBSSxDQUFDbFcsVUFBVSxDQUFDbUIsWUFBWSxFQUM1QixJQUFJLENBQUNiLG9CQUFvQixDQUFDMEgsR0FBRyxDQUFFd0UsbUJBQW1CLElBQUtBLG1CQUFtQixDQUFDMUssU0FBUyxDQUFDLEVBQ3JGLElBQUksQ0FBQ3ZCLGNBQWMsRUFDbkIsSUFDRCxDQUFDO01BQ0QsSUFBSSxDQUFDNFYsU0FBUyxDQUFDLElBQUksQ0FBQ2pLLE1BQU0sQ0FBQztNQUMzQixJQUFJLENBQUNsTSxVQUFVLENBQUNpQixJQUFJLEVBQUVtVixZQUFZLENBQUMsSUFBSSxDQUFDbEssTUFBTSxDQUFDO01BQy9DLE1BQU0sSUFBSSxDQUFDbUsseUJBQXlCLENBQUMsSUFBSSxDQUFDbkssTUFBTSxDQUFDO01BQ2pELElBQUksQ0FBQ0EsTUFBTSxDQUFDb0ssSUFBSSxDQUFDLENBQUM7TUFDbEIsSUFBSSxDQUFDbFcsWUFBWSxHQUFHLElBQUk7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdUIsTUFBQSxDQUlRd1UsU0FBUyxHQUFqQixTQUFRQSxTQUFTQSxDQUFDakssTUFBYyxFQUFRO01BQ3ZDQSxNQUFNLENBQUNxSyxRQUFRLENBQUMsSUFBSSxDQUFDaFcsY0FBYyxFQUFFLGFBQWEsQ0FBQztNQUNuRDJMLE1BQU0sQ0FBQ3NLLFdBQVcsQ0FBQztRQUNsQm5RLElBQUksRUFBRSxHQUFHO1FBQ1R2RixLQUFLLEVBQUU7TUFDUixDQUFDLENBQUM7TUFDRm9MLE1BQU0sQ0FBQ3FLLFFBQVEsQ0FBQyxJQUFJLENBQUN2VyxVQUFVLENBQUNjLEtBQUssQ0FBQztNQUN0Q29MLE1BQU0sQ0FBQ3NLLFdBQVcsQ0FBQztRQUNsQm5RLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ3JHLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ3VSLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQ2xVLFVBQVU7TUFDdEUsQ0FBQyxDQUFDO01BRUYsSUFBSSxJQUFJLENBQUNWLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ3VSLE1BQU0sRUFBRTtRQUNwQzFJLE1BQU0sQ0FBQ3FKLGlCQUFpQixDQUFDLElBQUksQ0FBQ3ZWLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEQ7TUFDQTtNQUNBNkksTUFBTSxDQUFDcUssUUFBUSxDQUFDLElBQUkvVixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDOUM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbUIsTUFBQSxDQUlRbVEsVUFBVSxHQUFsQixTQUFRQSxVQUFVQSxDQUFDMkUsTUFBOEIsRUFBUTtNQUN4RCxJQUFJLENBQUN0VyxjQUFjLENBQUNxVSx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdTLE1BQUEsQ0FJYStVLHVCQUF1QixHQUFwQyxlQUFhQSx1QkFBdUJBLENBQUEsRUFBMkM7TUFDOUUsT0FBTyxJQUFJLENBQUN0Vix1QkFBdUI7SUFDcEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBTyxNQUFBLENBSU9nVixNQUFNLEdBQWIsU0FBT0EsTUFBTUEsQ0FBQSxFQUFZO01BQ3hCLE9BQU8sSUFBSSxDQUFDdlcsWUFBWTtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUF1QixNQUFBLENBT2NpVix3QkFBd0IsR0FBdEMsZUFBY0Esd0JBQXdCQSxDQUNyQzlVLFNBQTBCLEVBQzFCK1UsZ0JBQXdCLEVBQ3hCM0ssTUFBYyxFQUNtQjtNQUNqQyxNQUFNNEssZ0JBQWdCLEdBQUc1SyxNQUFNLENBQUNvSCxnQkFBZ0IsQ0FBQyxDQUF3QjtNQUN6RSxNQUFNeUQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDeFcsY0FBYyxDQUFDOE4sT0FBTyxDQUFDLENBQUM7TUFDeEQsTUFBTTJJLFNBQVMsR0FBR2xWLFNBQVMsQ0FBQzJCLElBQUk7TUFDaEMsTUFBTXdULFlBQVksR0FBR25WLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFd1IscUJBQXFCO01BQ3BFO01BQ0EsSUFBSUQsWUFBWSxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDalgsVUFBVSxDQUFDcUQsUUFBUSxDQUFDdVIsTUFBTSxHQUFHLENBQUMsSUFBSXVDLDBCQUEwQixDQUFDRixZQUFZLENBQUMsRUFBRTtVQUNwRixJQUFJO1lBQ0gsTUFBTUcsY0FBc0IsR0FDM0JQLGdCQUFnQixJQUFJSSxZQUFZLENBQUM1USxJQUFJLENBQUNoQyxVQUFVLENBQUMsR0FBR3dTLGdCQUFnQixHQUFHLENBQUMsR0FDckVJLFlBQVksQ0FBQzVRLElBQUksQ0FBQ2dSLE9BQU8sQ0FBQyxHQUFHUixnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUNyREksWUFBWSxDQUFDNVEsSUFBSTtZQUNyQixJQUFJNk4sVUFBVSxHQUFHLE1BQU0rQixXQUFXLENBQUNxQix3QkFBd0IsQ0FBQ0wsWUFBWSxDQUFDNVEsSUFBSSxFQUFFeVEsZ0JBQWdCLENBQUM5QyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUlFLFVBQVUsS0FBSyxJQUFJLEVBQUU7Y0FDeEJBLFVBQVUsR0FBRyxNQUFNNEMsZ0JBQWdCLENBQUN2RCxtQkFBbUIsQ0FBQyxDQUFDLENBQUNnRSxlQUFlLENBQUNOLFlBQVksQ0FBQzVRLElBQUksQ0FBQztZQUM3RjtZQUNBLElBQUksSUFBSSxDQUFDckcsVUFBVSxDQUFDcUQsUUFBUSxDQUFDdVIsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUN4Qzs7Y0FFQSxJQUFJLElBQUksQ0FBQzVVLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ3NMLElBQUksQ0FBRXRKLE9BQU8sSUFBS0EsT0FBTyxDQUFDNE8sV0FBVyxDQUFDbUQsY0FBYyxDQUFDLEtBQUtsRCxVQUFVLENBQUMsRUFBRTtnQkFDbkc7Z0JBQ0EsT0FBTztrQkFDTjhDLFNBQVM7a0JBQ1R0TSxLQUFLLEVBQUUzRSxTQUFTO2tCQUNoQnlSLGVBQWUsRUFBRTtnQkFDbEIsQ0FBQztjQUNGO1lBQ0Q7WUFDQSxPQUFPO2NBQUVSLFNBQVM7Y0FBRXRNLEtBQUssRUFBRXdKO1lBQVcsQ0FBQztVQUN4QyxDQUFDLENBQUMsT0FBT3JILEtBQUssRUFBRTtZQUNmdEgsR0FBRyxDQUFDc0gsS0FBSyxDQUFDLDhDQUE4QyxFQUFFbUssU0FBUyxFQUFFLElBQUksQ0FBQ2pYLE1BQU0sQ0FBQzBELElBQUksQ0FBQztZQUN0RixPQUFPO2NBQ051VCxTQUFTO2NBQ1R0TSxLQUFLLEVBQUUzRSxTQUFTO2NBQ2hCMFIsaUJBQWlCLEVBQUU7WUFDcEIsQ0FBQztVQUNGO1FBQ0QsQ0FBQyxNQUFNO1VBQ047VUFDQSxPQUFPO1lBQUVULFNBQVM7WUFBRXRNLEtBQUssRUFBRXVNLFlBQVksQ0FBQzNVLE9BQU8sQ0FBQztVQUFFLENBQUM7UUFDcEQ7TUFDRDtNQUNBLE9BQU87UUFBRTBVLFNBQVM7UUFBRXRNLEtBQUssRUFBRXFNLGtCQUFrQixDQUFDQyxTQUFTO01BQUUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFyVixNQUFBLENBSWMrVix5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUFBLEVBQXFDO01BQzNFLE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUN6TCxNQUFNLEVBQUUwTCxpQkFBaUIsQ0FBQyxDQUFDO01BQ3ZELElBQUksQ0FBQyxJQUFJLENBQUM1WCxVQUFVLENBQUNpQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUNqQixVQUFVLENBQUM2WCw4QkFBOEIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDaEcsT0FBTyxDQUFDLENBQUM7TUFDVjtNQUVBLE9BQU9HLFNBQVMsQ0FBQ0MsdUJBQXVCLENBQ3ZDLElBQUksQ0FBQy9YLFVBQVUsQ0FBQzZYLDhCQUE4QixDQUM1QzNNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDbEwsVUFBVSxDQUFDNlgsOEJBQThCLENBQUMxTSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDbkZrTSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUN0QixJQUFJLENBQUNyWCxVQUFVLENBQUM2WCw4QkFBOEIsQ0FBQzNNLFNBQVMsQ0FDdkQsSUFBSSxDQUFDbEwsVUFBVSxDQUFDNlgsOEJBQThCLENBQUMxTSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUNuRSxJQUFJLENBQUNuTCxVQUFVLENBQUM2WCw4QkFBOEIsQ0FBQ2pELE1BQ2hELENBQUMsRUFDRCxJQUFJLENBQUM1VSxVQUFVLENBQUNpQixJQUFJLEVBQ3BCMFcsY0FBYyxFQUNkLElBQUksQ0FBQzNYLFVBQVUsQ0FBQ3FELFFBQ2pCLENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBMUIsTUFBQSxDQU1jcVcsbUJBQW1CLEdBQWpDLGVBQWNBLG1CQUFtQkEsQ0FDaENuQixnQkFBd0IsRUFDeEIzSyxNQUFjLEVBTVo7TUFDRixNQUFNK0wsaUJBQWlCLEdBQUcsSUFBSSxDQUFDbFksTUFBTSxDQUFDZ0MsV0FBVyxDQUFDRSxNQUFNLEVBQUVpVyxxQkFBcUIsRUFBRTVWLE9BQU8sQ0FBQyxDQUFDO01BQzFGLElBQUk2VixvQkFBc0QsR0FBRzlXLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hGLElBQUk4VyxjQUF5QyxHQUFHLEVBQUU7TUFDbEQsSUFBSSxJQUFJLENBQUNyWSxNQUFNLENBQUNvRCxPQUFPLEVBQUU7UUFDeEIsSUFBSSxPQUFPOFUsaUJBQWlCLEtBQUssUUFBUSxFQUFFO1VBQzFDLE1BQU1uWCxLQUFLLEdBQUcsSUFBSSxDQUFDZCxVQUFVLENBQUNxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMyUSxRQUFRLENBQUMsQ0FBQztVQUNwRCxNQUFNcUUsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDTixpQkFBaUIsRUFBRW5YLEtBQUssRUFBRSxJQUFJLENBQUNkLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMzRyxJQUFJZ1YsYUFBYSxFQUFFO1lBQ2xCRCxjQUFjLEdBQUcsSUFBSSxDQUFDcFksVUFBVSxDQUFDcUQsUUFBUSxDQUFDMkUsR0FBRyxDQUFDLE1BQU8zQyxPQUFPLElBQUs7Y0FDaEUsTUFBTXlJLE1BQU0sR0FBRyxNQUFNLElBQUkwSyxjQUFjLENBQ3RDSCxhQUFhLEVBQ2I7Z0JBQ0NsWCxZQUFZLEVBQUUsSUFBSSxDQUFDbkIsVUFBVSxDQUFDbUIsWUFBWTtnQkFDMUNMLEtBQUssRUFBRUEsS0FBSztnQkFDWnVDLFFBQVEsRUFBRSxDQUFDZ0MsT0FBTztjQUNuQixDQUFDLEVBQ0Q7Z0JBQ0NvVCxjQUFjLEVBQUUsS0FBSztnQkFDckJDLE9BQU8sRUFBRTtjQUNWLENBQ0QsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztjQUNYLE9BQU83SyxNQUFNLENBQUNVLE1BQU0sQ0FBQ29LLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFbE8sS0FBSyxDQUFDbU8sWUFBWTtZQUN6RCxDQUFDLENBQUM7VUFDSDtRQUNEO1FBQ0EsSUFBSSxJQUFJLENBQUM3WSxVQUFVLENBQUNxRCxRQUFRLENBQUN1UixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3hDdUQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDblksVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDeVYsYUFBYSxDQUFDLENBQUM7UUFDbkU7TUFDRDtNQUVBLElBQUk7UUFDSCxNQUFNQyxhQUFhLEdBQUcsTUFBTVosb0JBQW9CO1FBRWhELE1BQU1hLFFBQVEsR0FBRyxNQUFNM1gsT0FBTyxDQUFDa1AsR0FBRyxDQUFDLENBQ2xDbFAsT0FBTyxDQUFDa1AsR0FBRyxDQUNWLElBQUksQ0FBQ2pRLG9CQUFvQixDQUFDMEgsR0FBRyxDQUFDLE1BQU93RSxtQkFBbUIsSUFDdkQsSUFBSSxDQUFDb0ssd0JBQXdCLENBQUNwSyxtQkFBbUIsQ0FBQzFLLFNBQVMsRUFBRStVLGdCQUFnQixFQUFFM0ssTUFBTSxDQUN0RixDQUNELENBQUMsRUFDRDdLLE9BQU8sQ0FBQ2tQLEdBQUcsQ0FBQzZILGNBQWMsQ0FBQyxFQUMzQixJQUFJLENBQUNWLHlCQUF5QixDQUFDLENBQUMsQ0FDaEMsQ0FBQztRQUNGLE9BQU87VUFDTnFCLGFBQWE7VUFDYkUsYUFBYSxFQUFFRCxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQzFCRSxjQUFjLEVBQUVGLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDM0JHLHNCQUFzQixFQUFFSCxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDO01BQ0YsQ0FBQyxDQUFDLE9BQU9uTSxLQUFjLEVBQUU7UUFDeEJ0SCxHQUFHLENBQUNzSCxLQUFLLENBQUMsc0NBQXNDLEVBQUVBLEtBQWUsQ0FBQztRQUNsRTtRQUNBLElBQUksQ0FBQzFNLGNBQWMsQ0FBQ3FVLHdCQUF3QixDQUFDLENBQUM7UUFDOUMsT0FBTztVQUNOdUUsYUFBYSxFQUFFLENBQUMsQ0FBQztVQUNqQkUsYUFBYSxFQUFFLEVBQUU7VUFDakJDLGNBQWMsRUFBRSxFQUFFO1VBQ2xCQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7TUFDRjtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUF4WCxNQUFBLENBR1FvUSxTQUFTLEdBQWpCLFNBQVFBLFNBQVNBLENBQUEsRUFBUztNQUN6QixNQUFNcUgscUJBQXFCLEdBQUcsSUFBSSxDQUFDOVksb0JBQW9CLENBQUNpTSxJQUFJLENBQUVELGFBQWEsSUFBS0EsYUFBYSxDQUFDMUksS0FBSyxDQUFDeVYsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNqSCxJQUFJRCxxQkFBcUIsRUFBRTtRQUMxQixNQUFNRSxVQUFVLEdBQUdGLHFCQUFxQixFQUFFeFYsS0FBSztRQUMvQyxNQUFNMlYsU0FBUyxHQUFHRCxVQUFVLEVBQUVFLFlBQVksQ0FBQyxDQUEyQjtRQUN0RUQsU0FBUyxDQUFDRSxVQUFVLEdBQUc7VUFBRUMsTUFBTSxFQUFFO1FBQUssQ0FBQztRQUN2Q0osVUFBVSxFQUFFSyxLQUFLLENBQUNKLFNBQVMsQ0FBQztNQUM3QjtNQUNBLElBQUksQ0FBQ3ZaLFVBQVUsQ0FBQzZWLE1BQU0sRUFBRStELHVCQUF1QixHQUFHLENBQUM7SUFDcEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBalksTUFBQSxDQUlRcVAsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FBQzlCLGNBQW9DLEVBQVE7TUFDL0U7TUFDQUEsY0FBYyxDQUFDTSxPQUFPLENBQUVvQixhQUFhLElBQUs7UUFDekMsTUFBTTlPLFNBQVMsR0FBRzhPLGFBQWEsRUFBRTlPLFNBQVM7UUFDMUMsTUFBTThCLEtBQUssR0FBR2dOLGFBQWEsRUFBRTdCLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDek8sb0JBQW9CLENBQUM2UCxJQUFJLENBQUM7VUFDOUJyTyxTQUFTO1VBQ1Q4QixLQUFLO1VBQ0xpVyxZQUFZLEVBQUUvWCxTQUFTLENBQUNvQyxZQUFZO1VBQ3BDMEksUUFBUSxFQUFFO1FBQ1gsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFqTCxNQUFBLENBS2MwVSx5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUFDbkssTUFBYyxFQUFpQjtNQUN0RSxNQUFNMkssZ0JBQWdCLEdBQUcsSUFBSSxDQUFDOVcsTUFBTSxDQUFDb0QsT0FBTyxHQUFHLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDeUQsSUFBSSxHQUFHLEVBQUU7TUFDbEYsTUFBTTtRQUFFc1YsYUFBYTtRQUFFRSxhQUFhO1FBQUVDLGNBQWM7UUFBRUM7TUFBdUIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDbkIsbUJBQW1CLENBQzlHbkIsZ0JBQWdCLEVBQ2hCM0ssTUFDRCxDQUFDO01BQ0QsTUFBTTRLLGdCQUFnQixHQUFHNUssTUFBTSxDQUFDb0gsZ0JBQWdCLENBQUMsQ0FBd0I7TUFFekUsSUFBSXVELGdCQUFnQixFQUFFO1FBQ3JCQyxnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ2pELGdCQUFnQixFQUFFa0MsYUFBYSxDQUFDO01BQy9EO01BRUEsS0FBSyxNQUFNZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQ3paLG9CQUFvQixFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDQSxvQkFBb0IsQ0FBQ3laLENBQUMsQ0FBQyxDQUFDalksU0FBUyxDQUFDMkIsSUFBSSxLQUFLLHNCQUFzQixFQUFFO1VBQzNFLE1BQU11VyxhQUFhLEdBQUcsSUFBSSxDQUFDMVosb0JBQW9CLENBQUN5WixDQUFDLENBQUMsQ0FBQ2pZLFNBQVMsQ0FBQzJCLElBQUk7VUFDakU7VUFDQSxNQUFNd1csc0JBQXNCLEdBQUcsSUFBSSxDQUFDaGEsZUFBZSxFQUFFc00sSUFBSSxDQUFFdUUsT0FBTyxJQUFLQSxPQUFPLENBQUNyTixJQUFJLEtBQUt1VyxhQUFhLENBQUMsRUFBRXRQLEtBQUs7VUFDN0csSUFBSXVQLHNCQUFzQixFQUFFO1lBQzNCbkQsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNFLGFBQWEsRUFBRUMsc0JBQXNCLENBQUM7VUFDckUsQ0FBQyxNQUFNLElBQUlkLHNCQUFzQixDQUFDZSxjQUFjLENBQUNGLGFBQWEsQ0FBQyxFQUFFO1lBQ2hFbEQsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNFLGFBQWEsRUFBRWIsc0JBQXNCLENBQUNhLGFBQWEsQ0FBQyxDQUFDO1VBQ3BGLENBQUMsTUFBTSxJQUFJZixhQUFhLENBQUNjLENBQUMsQ0FBQyxJQUFJZCxhQUFhLENBQUNjLENBQUMsQ0FBQyxDQUFDclAsS0FBSyxLQUFLM0UsU0FBUyxFQUFFO1lBQ3BFK1EsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNFLGFBQWEsRUFBRWYsYUFBYSxDQUFDYyxDQUFDLENBQUMsQ0FBQ3JQLEtBQUssQ0FBQztVQUNyRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMzSyxNQUFNLENBQUNnQyxXQUFXLENBQUNFLE1BQU0sRUFBRWlXLHFCQUFxQixJQUFJLENBQUNlLGFBQWEsQ0FBQ2MsQ0FBQyxDQUFDLENBQUN2QyxlQUFlLEVBQUU7WUFDdEcsTUFBTTJDLG1CQUFtQixHQUFHLElBQUlDLEdBQUcsQ0FDbEMsSUFBSSxDQUFDcGEsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMkUsR0FBRyxDQUFDLENBQUMzQyxPQUFPLEVBQUVnVixLQUFLLEtBQUtuQixjQUFjLENBQUNtQixLQUFLLENBQUMsQ0FBQ2pWLFNBQVMsQ0FBQzRVLGFBQWEsQ0FBQyxDQUNoRyxDQUFDO1lBQ0QsSUFBSUcsbUJBQW1CLENBQUNHLElBQUksS0FBSyxDQUFDLElBQUlILG1CQUFtQixDQUFDcEcsTUFBTSxDQUFDLENBQUMsQ0FBQ3dHLElBQUksQ0FBQyxDQUFDLENBQUM3UCxLQUFLLEtBQUszRSxTQUFTLEVBQUU7Y0FDOUY7Y0FDQStRLGdCQUFnQixDQUFDZ0QsWUFBWSxDQUFDRSxhQUFhLEVBQUVsUyxLQUFLLENBQUNDLElBQUksQ0FBQ29TLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakY7VUFDRDtRQUNEO01BQ0Q7O01BRUE7TUFDQSxJQUFJbEIsYUFBYSxDQUFDdEssSUFBSSxDQUFFakUsS0FBSyxJQUFLQSxLQUFLLENBQUMrTSxpQkFBaUIsQ0FBQyxFQUFFO1FBQzNELE1BQU0rQyxPQUFPLEdBQUcsSUFBSSxDQUFDeFosYUFBYSxDQUFDK0MsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1FBQ3BFMFcsVUFBVSxDQUFDalYsT0FBTyxDQUFDdEUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDbUIsWUFBWSxDQUFDLENBQUM0QyxPQUFPLENBQUMsMENBQTBDLENBQUMsRUFBRTtVQUN0SDJXLE9BQU8sRUFBRSxDQUFDRixPQUFPLEVBQUVDLFVBQVUsQ0FBQ0UsTUFBTSxDQUFDQyxFQUFFLENBQUM7VUFDeENDLGdCQUFnQixFQUFFTCxPQUFPO1VBQ3pCTSxPQUFPLEVBQUcvYSxNQUFjLElBQUs7WUFDNUIsSUFBSUEsTUFBTSxLQUFLeWEsT0FBTyxFQUFFO2NBQ3ZCLE1BQU1PLFlBQVksR0FBRyxJQUFJLENBQUMvYSxVQUFVLENBQUNpQixJQUFJLEVBQUUrWixhQUFhLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQztjQUMzRUYsWUFBWSxDQUFxRFAsT0FBTyxDQUFDLENBQUM7WUFDNUU7VUFDRCxDQUFDO1VBQ0RVLFlBQVksRUFBRTtRQUNmLENBQVcsQ0FBQztNQUNiOztNQUVBO01BQ0EsS0FBSyxNQUFNQyxlQUFlLElBQUlqQyxjQUFjLEVBQUU7UUFDN0MsTUFBTXJHLE9BQU8sR0FBR3NJLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSXZJLE9BQU8sRUFBRXdJLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxFQUFFO1VBQzlEeEksT0FBTyxDQUFDeUksT0FBTyxDQUFDLENBQUM7UUFDbEI7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUEzWixNQUFBLENBR1FrUSxVQUFVLEdBQWxCLFNBQVFBLFVBQVVBLENBQUEsRUFBUztNQUMxQjtNQUNBLEtBQUssTUFBTWtJLENBQUMsSUFBSSxJQUFJLENBQUN6WixvQkFBb0IsRUFBRTtRQUMxQyxJQUFJLENBQUNvTSwwQkFBMEIsQ0FBQyxJQUFJLENBQUNwTSxvQkFBb0IsQ0FBQ3laLENBQUMsQ0FBQyxDQUFDalksU0FBUyxDQUFDO01BQ3hFO01BQ0EsSUFBSSxDQUFDb0ssTUFBTSxFQUFFb1AsT0FBTyxDQUFDLENBQUM7TUFDdEIsSUFBSSxDQUFDamIsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFBQSxPQUFBUCxxQkFBQTtFQUFBO0VBQUE0QixRQUFBLEdBQUE1QixxQkFBQTtFQUFBLE9BQUE0QixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
1066
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiZ2V0QWRkaXRpb25hbFZhbHVlIiwiRmllbGQiLCJwYXlsb2FkIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInZhbHVlIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlSGVscCIsInByb3BlcnR5UGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwidmFsaWRhdGVJbnB1dCIsInJlcXVpcmVzVmFsaWRhdGlvbiIsInR5cGVhaGVhZCIsIlBvcG92ZXIiLCJNVGFibGUiLCJjYXNlU2Vuc2l0aXZlIiwidXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzIiwiZW50aXR5Q29udGFpbmVyIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJ1c2VBc1ZhbHVlSGVscCIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImRpYWxvZyIsImNyZWF0ZUZpZWxkVkhEaWFsb2ciLCJWSERpYWxvZyIsImZpZWxkUHJvbWlzZSIsInBhcmFtZXRlckluZm8iLCJmaW5kIiwiYWN0aW9uUGFyYW1ldGVySW5mbyIsInZhbGlkYXRpb25Qcm9taXNlIiwicmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzVmFsdWVzIiwiaGFzRXJyb3IiLCJlcnJvciIsIkFjdGlvblJ1bnRpbWUiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm1lc3NhZ2UiLCJmaWxlcyIsImdldEJhc2U2NEZpbGUiLCJnZXRNaW1lVHlwZVBhdGgiLCJnZXRGaWxlTmFtZVBhdGgiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsIk1lZGlhVHlwZSIsInR5cGVSZWZlcmVuY2UiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwicmVzdWx0Iiwic3BsaXQiLCJyZWFkQXNEYXRhVVJMIiwiaXRlbSIsIm1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbnRyb2xJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJmaWx0ZXIiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudHMiLCJnZXREaWFsb2ciLCJjcmVhdGVEaWFsb2ciLCJkaWFsb2dDb250ZW50cyIsImRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMiLCJhY3Rpb25QYXJhbWV0ZXJzIiwic2xpY2UiLCJPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMiLCJhY3Rpb25QYXJhbWV0ZXJHcm91cHMiLCJmb3JFYWNoIiwiZmFjZXQiLCJmYWNldFRpdGxlIiwiJFR5cGUiLCJoYXNGaWVsZEdyb3VwVGFyZ2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJncm91cGVkQWN0aW9uUGFyYW1ldGVycyIsIkRhdGEiLCJncm91cCIsInB1c2giLCJWYWx1ZSIsImRhdGEiLCJnZXRHcm91cEZvcm0iLCJhbGwiLCJiaW5kIiwiZm9ybURhdGEiLCJwYXJhbWV0ZXJHcm91cCIsIm9wRmFjZXRzIiwiZGlhbG9nQ29udGVudCIsIlRpdGxlIiwiZWxlbWVudCIsIm9wRmFjZXQiLCJyZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8iLCJtZXNzYWdlU3RyaXAiLCJnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0IiwiZW5kQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJvbkNhbmNlbCIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGl0bGVUZXh0IiwiZXNjYXBlSGFuZGxlciIsImRyYWdnYWJsZSIsInJlc2l6YWJsZSIsImFmdGVyQ2xvc2UiLCJiZWZvcmVPcGVuIiwiYWZ0ZXJPcGVuIiwiaW5pdGlhbEZvY3VzIiwiYmVnaW5CdXR0b24iLCJpc0NyZWF0ZUFjdGlvbiIsImdldEJlZ2luQnV0dG9uTGFiZWwiLCJvbkFwcGx5IiwiY29udGVudCIsIk1lc3NhZ2VTdHJpcCIsInNob3dJY29uIiwiU2ltcGxlRm9ybSIsImNvbHVtbnNNIiwiZWRpdGFibGUiLCJsYWJlbFNwYW5MIiwibGFiZWxTcGFuTSIsImJpbmRpbmciLCJhY3Rpb25MYWJlbCIsImtleSIsImRlZmF1bHRLZXkiLCJnZXRPdmVycmlkZGVuVGV4dCIsImJvdW5kQWN0aW9uTmFtZSIsInBvcCIsInN1ZmZpeFJlc291cmNlS2V5IiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZ2V0T2JqZWN0QmluZGluZyIsImdldFBhcmFtZXRlckNvbnRleHQiLCJCdXN5TG9ja2VyIiwibG9jayIsInZhbGlkYXRlUHJvcGVydGllcyIsInVubG9jayIsIm5ld1ZhbHVlc0RpY3Rpb25hcnkiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZXMiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwicGFyYW1WYWx1ZSIsIktleSIsImlzTmV3VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVzZXRTdGF0ZSIsInVubG9ja0RpYWxvZyIsInVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IiLCJsZW5ndGgiLCJ3YXJuaW5nQ29udGV4dCIsImluZm9Db250ZXh0IiwiZXJyb25lb3VzQ3R4IiwiZ2V0TWVzc2FnZXMiLCJnZXRUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJFcnJvciIsImNvbnRleHRUb1VzZSIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNMb2NrZWQiLCJGRUxpYnJhcnkiLCJDb25zdGFudHMiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJjbG9zZURpYWxvZyIsImV2ZW50cyIsIm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkIiwiY2xvc2UiLCJvcGVuRGlhbG9nIiwiQ29tbW9uVXRpbHMiLCJzZXRVc2VyRGVmYXVsdHMiLCJzZXRNb2RlbHMiLCJhZGREZXBlbmRlbnQiLCJzZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzIiwib3BlbiIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJfZXZlbnQiLCJ3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcyIsImlzT3BlbiIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImJpbmRpbmdQYXJhbWV0ZXIiLCJvcGVyYXRpb25CaW5kaW5nIiwicGFyYW1ldGVyTW9kZWxEYXRhIiwicGFyYW1OYW1lIiwiZGVmYXVsdFZhbHVlIiwiUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJyZXF1ZXN0UHJvcGVydHkiLCJub1Bvc3NpYmxlVmFsdWUiLCJsYXRlUHJvcGVydHlFcnJvciIsImdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiRlBNSGVscGVyIiwibG9hZE1vZHVsZUFuZENhbGxNZXRob2QiLCJnZXRQcmVEZWZpbmVkVmFsdWVzIiwiYm91bmRGdW5jdGlvbk5hbWUiLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJyZXF1ZXN0Q29udGV4dE9iamVjdCIsImZ1bmN0aW9uUGFyYW1zIiwiYm91bmRGdW5jdGlvbiIsIk9wZXJhdGlvbiIsImdldE9wZXJhdGlvbkZyb21OYW1lIiwiT0RhdGFPcGVyYXRpb24iLCJlbmhhbmNlJHNlbGVjdCIsImdyb3VwSWQiLCJleGVjdXRlIiwiaXNGdWxmaWxsZWQiLCJib3VuZENvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwiY29udGV4dFZhbHVlcyIsInByb21pc2VzIiwiZGVmYXVsdFZhbHVlcyIsImZ1bmN0aW9uVmFsdWVzIiwibWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImZpcnN0VmlzaWJsZVBhcmFtZXRlciIsImdldFZpc2libGUiLCJmaXJzdEZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwib25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQiLCJpc011bHRpVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJpIiwicGFyYW1ldGVyTmFtZSIsInBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJoYXNPd25Qcm9wZXJ0eSIsInNldE9mRnVuY3Rpb25WYWx1ZXMiLCJTZXQiLCJpbmRleCIsInNpemUiLCJuZXh0IiwicmVmcmVzaCIsIk1lc3NhZ2VCb3giLCJhY3Rpb25zIiwiQWN0aW9uIiwiT0siLCJlbXBoYXNpemVkQWN0aW9uIiwib25DbG9zZSIsImV4dGVuc2lvbkFQSSIsImdldENvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJjb250ZW50V2lkdGgiLCJmdW5jdGlvbkNvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwiZGVzdHJveSIsIm9JbnRlcmZhY2UiLCJ0ZXh0Q29udGV4dCIsImNvbnRleHRQYXRoIiwibG9jYWxEYXRhUHJvcGVydHkiLCIkTmFtZSIsInZhbHVlTGlzdEJ5UXVhbGlmaWVyIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ0ZXh0UHJvcGVydHkiLCJDb2xsZWN0aW9uUGF0aCIsInByb3BBbm5vdGF0aW9ucyIsInRleHRQcm9wIiwidGV4dFBhdGgiLCIkUGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT3BlcmF0aW9uUGFyYW1ldGVyRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBsZXhUeXBlLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIHR5cGUgQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZV9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkLCBGaWVsZEdyb3VwVHlwZSwgUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxudHlwZSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSB7IHBhcmFtTmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgbGF0ZVByb3BlcnR5RXJyb3I/OiBib29sZWFuOyBub1Bvc3NpYmxlVmFsdWU/OiBib29sZWFuIH07XG5cbnR5cGUgRWxlbWVudEdyb3VwID0geyBmYWNldFRpdGxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkOyBkYXRhOiBBY3Rpb25QYXJhbWV0ZXJbXSB9O1xudHlwZSBFbGVtZW50R3JvdXBDb252ZXJ0ZWQgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IERpYWxvZ0NvbnRlbnRUeXBlc1tdIH07XG5cbnR5cGUgRm9ybUVsZW1lbnRUeXBlID0gW0xhYmVsLCBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZF07XG5cbnR5cGUgRGlhbG9nQ29udGVudFR5cGVzID0ge1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50VHlwZTtcblx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXI7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyRGlhbG9nIHtcblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj47XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSE6IChyZXNvbHZlVmFsdWU6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+KSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgcGFyYW1ldGVyc1ZhbHVlc1JlamVjdCE6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcblxuXHQvLyB0aGUgZGlhbG9nIGlzIGNvbnNpZGVyZWQgYXMgY2xvc2VkIGFmdGVyIHRoZSBhZnRlckNsb3NlIGV2ZW50IGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQvLyB0aGlzIGlzIGFzeW5jaHJvbm91cywgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkaWFsb2cgc3RhdGUgc2luY2UgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgaXMgc3luY2hyb25vdXNcblx0Ly8gYW5kIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgZGlhbG9nIGlzIG9wZW4gb3IgY2xvc2VkXG5cdHByaXZhdGUgaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBkaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJ1dHRvbkxvY2sgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSByZWFkb25seSBhY3Rpb25QYXJhbWV0ZXJJbmZvczogKEFjdGlvblBhcmFtZXRlckluZm8gJiB7IHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyIH0pW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlck1vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdH0pO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0aXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdHZpZXc/OiBGRVZpZXc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKHRoaXMuYWN0aW9uKTtcblx0XHR0aGlzLm1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMudmlldyA/IGdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLnZpZXcpIDogZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIGVkaXQgbW9kZSBwcm9wZXJ0eSBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxGaWVsZEVkaXRNb2RlPiB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMsXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBhbm5vdGF0aW9ucy5Db21tb24/LkZpZWxkQ29udHJvbCxcblx0XHRcdGltbXV0YWJsZSA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uSW1tdXRhYmxlPy52YWx1ZU9mKCksXG5cdFx0XHRjb21wdXRlZCA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uQ29tcHV0ZWQ/LnZhbHVlT2YoKTtcblxuXHRcdGlmIChpbW11dGFibGUgfHwgY29tcHV0ZWQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLlJlYWRPbmx5KTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIGlmRWxzZShcblx0XHRcdFx0aXNSZWFkT25seUV4cHJlc3Npb24ocGFyYW1ldGVyKSxcblx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0aWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKHBhcmFtZXRlciksIEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQsIEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZm9ybSBlbGVtZW50IGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8Rm9ybUVsZW1lbnRUeXBlPiB7XG5cdFx0Y29uc3QgYWN0aW9uTWV0YVBhdGggPSB0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLm5hbWVcblx0XHRcdCAgfWBcblx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvbk1ldGFQYXRofS8ke3BhcmFtZXRlci5uYW1lfWApITtcblx0XHRsZXQgZmllbGQ7XG5cdFx0bGV0IGxhYmVsID0gcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbi5MYWJlbC50b1N0cmluZygpKVxuXHRcdFx0OiBwYXJhbWV0ZXIubmFtZTtcblx0XHRsZXQgc3RyZWFtUGFyYW1ldGVyO1xuXHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlTXVsdGlGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHN0cmVhbVBhcmFtZXRlciA9IHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKTtcblx0XHRcdC8vIGNhbGN1bGF0ZSBsYWJlbCBmcm9tIHRoZSBzdHJlYW0gcHJvcGVydHkgd2l0aGluIHRoZSBDb21wbGV4VHlwZVxuXHRcdFx0bGFiZWwgPSBzdHJlYW1QYXJhbWV0ZXI/LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChzdHJlYW1QYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHRcdDogKHN0cmVhbVBhcmFtZXRlcj8ubmFtZSBhcyBzdHJpbmcpO1xuXHRcdFx0ZmllbGQgPSB0aGlzLmNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlRmllbGQocGFyYW1ldGVyLCBtZXRhQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHQ8TGFiZWwgaWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIHN0cmVhbVBhcmFtZXRlcj8ubmFtZSwgXCJMYWJlbFwiXSl9IHRleHQ9e2xhYmVsfSAvPlxuXHRcdFx0XHR7ZmllbGR9XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIG11bHRpIGZpZWxkIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHBhcmFtZXRlckNvbnRleHQgVGhlIHBhcmFtZXRlciBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBtdWx0aSB2YWx1ZSBmaWVsZCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxNdWx0aVZhbHVlRmllbGQ+IHtcblx0XHRsZXQgZGlzcGxheSA9IFwiVmFsdWVcIjtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgUGFyYW1ldGVyIGRpYWxvZyBtdWx0aWZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhcmFtZXRlclR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HPy5bcGFyYW1ldGVyLnR5cGVdPy50eXBlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGl0ZW1zPXt7IHBhdGg6IGBtdmZ2aWV3Pi8ke3BhcmFtZXRlci5uYW1lfWAgfX1cblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvY29yZS9jb250cm9scy9NdWx0aVZhbHVlUGFyYW1ldGVyRGVsZWdhdGVcIiB9fVxuXHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRlZGl0TW9kZT17dGhpcy5nZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXIpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRtdWx0aXBsZUxpbmVzPXtwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZX1cblx0XHRcdFx0cmVxdWlyZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uKHBhcmFtZXRlciwgdGhpcy5hY3Rpb24sIGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkpKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdD5cblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEl0ZW0ga2V5PXtge3BhdGg6ICdtdmZ2aWV3PktleScsIHR5cGU6JyR7cGFyYW1ldGVyVHlwZX0nfWB9IGRlc2NyaXB0aW9uPVwie212ZnZpZXc+RGVzY31cIiAvPlxuXHRcdFx0PC9NdWx0aVZhbHVlRmllbGQ+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBGaWxlVXBsb2FkZXIgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEZpbGVVcGxvYWRlciB7XG5cdFx0bGV0IGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcztcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oXG5cdFx0XHRcdHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuXHRcdFx0KS5tYXAoKHR5cGUpID0+IGAnJHt0eXBlfSdgKTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gO1xuXHRcdH1cblx0XHRjb25zdCBoYW5kbGVUeXBlTWlzc21hdGNoID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IGdpdmVuVHlwZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIm1pbWVUeXBlXCIpO1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IGZpbGVVcGxvYWRlci5nZXRNaW1lVHlwZSgpO1xuXHRcdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0XHRzaG93VHlwZU1pc21hdGNoRGlhbG9nKGZpbGVVcGxvYWRlciwgZ2l2ZW5UeXBlLCBhY2NlcHRlZFR5cGVzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIHZlcmlmeSBjaGVjayBmb3Igc3RyZWFtXG5cdFx0Y29uc3QgZmlsZU1heGltdW1TaXplID0gRmllbGRIZWxwZXIuY2FsY3VsYXRlTUJmcm9tQnl0ZSh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm1heExlbmd0aCk7XG5cdFx0Y29uc3QgaGFuZGxlRmlsZVNpemVFeGNlZWQgPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudD8uZ2V0U291cmNlKCk7XG5cdFx0XHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2coZmlsZVVwbG9hZGVyLCBmaWxlVXBsb2FkZXIuZ2V0TWF4aW11bUZpbGVTaXplKCkudG9GaXhlZCgzKSk7XG5cdFx0fTtcblx0XHRjb25zdCBvblVwbG9hZENvbXBsZXRlID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCk6IHZvaWQge1xuXHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSA9PT0gMCB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpIGFzIG51bWJlcikgPj0gNDAwKSB7XG5cdFx0XHRcdGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkKFxuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0XHRcdChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVJhd1wiKSBhcyBzdHJpbmcpIHx8IChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKSBhcyBzdHJpbmcpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpbGVVcGxvYWRlclxuXHRcdFx0XHRuYW1lPVwiRkVWNEZpbGVVcGxvYWRcIlxuXHRcdFx0XHRidXR0b25Pbmx5PVwiZmFsc2VcIlxuXHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRtdWx0aXBsZT1cImZhbHNlXCJcblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9VUExPQURfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdXBsb2FkXCJcblx0XHRcdFx0c3R5bGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdHNlbmRYSFI9XCJ0cnVlXCJcblx0XHRcdFx0dXNlTXVsdGlwYXJ0PVwiZmFsc2VcIlxuXHRcdFx0XHRzYW1lRmlsZW5hbWVBbGxvd2VkPVwidHJ1ZVwiXG5cdFx0XHRcdHVwbG9hZE9uQ2hhbmdlPVwiZmFsc2VcIlxuXHRcdFx0XHRtaW1lVHlwZT17ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzfVxuXHRcdFx0XHR0eXBlTWlzc21hdGNoPXtoYW5kbGVUeXBlTWlzc21hdGNofVxuXHRcdFx0XHRtYXhpbXVtRmlsZVNpemU9e2ZpbGVNYXhpbXVtU2l6ZX1cblx0XHRcdFx0ZmlsZVNpemVFeGNlZWQ9e2hhbmRsZUZpbGVTaXplRXhjZWVkfVxuXHRcdFx0XHRodHRwUmVxdWVzdE1ldGhvZD17RmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QuUHV0fVxuXHRcdFx0XHR1cGxvYWRDb21wbGV0ZT17b25VcGxvYWRDb21wbGV0ZX1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmaWVsZCBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgZmllbGQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPEZpZWxkPiB7XG5cdFx0bGV0IGRpc3BsYXkgPSBcIlZhbHVlXCI7XG5cdFx0bGV0IGFkZGl0aW9uYWxWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRpZiAoaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlID0gYXdhaXQgdGhpcy5nZXRBZGRpdGlvbmFsVmFsdWUoeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIiwgcGF5bG9hZDogeyByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlIH0gfX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0dmFsdWU9e0Fubm90YXRpb25IZWxwZXIuZm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17aXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcil9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHBhcmFtZXRlci5uYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlPXthZGRpdGlvbmFsVmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHRkZWxlZ2F0ZT17e1xuXHRcdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0PyBgJHtnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSl9LyR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0ICB9LyR7cGFyYW1ldGVyLm5hbWV9YFxuXHRcdFx0XHRcdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lLnN1YnN0cmluZyh0aGlzLmFjdGlvbi5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke3BhcmFtZXRlci5uYW1lfWAsXG5cdFx0XHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fX1cblx0XHRcdFx0dmFsaWRhdGVJbnB1dD17cmVxdWlyZXNWYWxpZGF0aW9uKHBhcmFtZXRlcil9XG5cdFx0XHRcdHR5cGVhaGVhZD17XG5cdFx0XHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdFx0XHQ8TVRhYmxlXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJQb3BvdmVyXCIsIFwicXVhbGlmaWVyXCJdKX1cblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZT17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0PyB1c2VDYXNlU2Vuc2l0aXZlRmlsdGVyUmVxdWVzdHMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkuZW50aXR5Q29udGFpbmVyLmFubm90YXRpb25zLkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Py5GaWx0ZXJGdW5jdGlvbnMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkgPz8gW11cblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUodGhpcy5tZXRhTW9kZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dXNlQXNWYWx1ZUhlbHA9eyEhcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGlhbG9nPXt0aGlzLmNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyKX1cblx0XHRcdD48L1ZhbHVlSGVscD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIFZhbHVlSGVscCBkaWFsb2cgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgQSBkaWFsb2cgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogVkhEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdGlmIChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIDxWSERpYWxvZyAvPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgZmllbGQgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKGV2ZW50OiBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfCBGaWVsZCRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWVsZFByb21pc2UgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFBhcmFtZXRlcihcInByb21pc2VcIik7XG5cdFx0Y29uc3QgZmllbGQgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFNvdXJjZSgpIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IGZpZWxkUHJvbWlzZTtcblx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0dHJ5IHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBmaWVsZFByb21pc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGRlbGV0ZSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IHRydWU7XG5cdFx0XHRBY3Rpb25SdW50aW1lLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IHBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIFNBUFVJNSBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50LlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdC8vIGNvcnJlY3Rpb24gbmVlZGVkIGZvciBtdWx0aXBsZSBmaWxlIHVwbG9hZGVyc1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpbGVVcGxvYWRlcik7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvIHx8ICFmaWxlcykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IHt9O1xuXHRcdGlmICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5uYW1lIGFzIGtleW9mIHR5cGVvZiBwYXJhbWV0ZXJJbmZvLnZhbHVlXSA9XG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2V0QmFzZTY0RmlsZShmaWxlcyk7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlWyh0aGlzLmdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXSA9XG5cdFx0XHRcdChmaWxlc1swXSBhcyBGaWxlKS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcikgYXMgc3RyaW5nXSA9IChmaWxlc1swXSBhcyBGaWxlKS5uYW1lO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGZpbGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUGF0aCBhcyBhIHN0cmluZy5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPikucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIE1pbWUgdHlwZSB3aXRoIHRoZSBhc3NvY2lhdGVkIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIHBhdGggZXhwcmVzc2lvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBTdHJlYW0gcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb21wbGV4IHR5cGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIEVkbS5TdHJlYW0gcHJvcGVydHkuXG5cdCAqL1xuXHRwcml2YXRlIGdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAocGFyYW1ldGVyLnR5cGVSZWZlcmVuY2UgYXMgQ29tcGxleFR5cGUpLnByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIik7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG5cdCAqIEBwYXJhbSBmaWxlcyBUaGUgZmlsZSBzZWxlY3RlZC5cblx0ICogQHJldHVybnMgVGhlIGZpbGUgY29udGVudC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QmFzZTY0RmlsZShmaWxlczogb2JqZWN0W10pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghcmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKChyZWFkZXIucmVzdWx0IGFzIHN0cmluZykuc3BsaXQoXCIsXCIpWzFdKTtcblx0XHRcdH07XG5cdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCgoZmlsZXMgYXMgdW5rbm93biBhcyBGaWxlTGlzdCkuaXRlbSgwKSEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIG1lc3NhZ2VzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKTtcblx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW1ldGVycyAod2l0aCBuYW1lIGJlaW5nIHN1YnN0cmluZyBvZiBhbm90aGVyIHBhcmFtZXRlciBuYW1lKVxuXHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0KTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgRm9ybUVsZW1lbnRzIGFsb25nIHdpdGggdGhlIGFycmF5IG9mIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIEZvcm1FbGVtZW50cy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Rm9ybUVsZW1lbnRzKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxEaWFsb2dDb250ZW50VHlwZXM+IHtcblx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCB0aGlzLmNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZvcm1FbGVtZW50czogZm9ybUVsZW1lbnRzLFxuXHRcdFx0cGFyYW1ldGVyOiBwYXJhbWV0ZXJcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERpYWxvZygpOiBEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIGNyZWF0ZURpYWxvZygpOiBQcm9taXNlPERpYWxvZz4ge1xuXHRcdGxldCBkaWFsb2dDb250ZW50czogRm9ybUVsZW1lbnRUeXBlW10gPSBbXTtcblx0XHRsZXQgZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVyczogRGlhbG9nQ29udGVudFR5cGVzW10gPSBbXTtcblx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnMuc2xpY2UoMSkgOiB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzO1xuXG5cdFx0Ly8gSWYgT3BlcmF0aW9uYWxQYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIHRoaXMgYWN0aW9uLCB0aGV5IGFyZSB1c2VkIHRvIGdyb3VwIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuXHRcdC8vIHdpdGggdGl0bGVzXG5cdFx0aWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zPy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJHcm91cHM6IEVsZW1lbnRHcm91cFtdID0gW107XG5cdFx0XHR0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzPy5mb3JFYWNoKGZ1bmN0aW9uIChmYWNldDogUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0bGV0IGZhY2V0VGl0bGU7XG5cdFx0XHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0XHRmYWNldFRpdGxlID0gZmFjZXQuTGFiZWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhhc0ZpZWxkR3JvdXBUYXJnZXQoZmFjZXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRHcm91cCA9IGZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdID0gW107XG5cblx0XHRcdFx0XHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXA6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzLnB1c2goKGdyb3VwIGFzIERhdGFGaWVsZCkuVmFsdWUuJHRhcmdldCBhcyBBY3Rpb25QYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckdyb3Vwcy5wdXNoKHtcblx0XHRcdFx0XHRcdGZhY2V0VGl0bGU6IGZhY2V0VGl0bGUgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGRhdGE6IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBHZXQgdGhlIGZpZWxkcyBmb3IgZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdGNvbnN0IGdldEdyb3VwRm9ybSA9IGFzeW5jIChncm91cDogRWxlbWVudEdyb3VwKTogUHJvbWlzZTxFbGVtZW50R3JvdXBDb252ZXJ0ZWQ+ID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZ3JvdXAuZGF0YS5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0XHRyZXR1cm4geyBmYWNldFRpdGxlOiBncm91cC5mYWNldFRpdGxlLCBkYXRhOiBmb3JtRWxlbWVudHMgfTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGZvcm1EYXRhID0gYWN0aW9uUGFyYW1ldGVyR3JvdXBzLm1hcChhc3luYyAocGFyYW1ldGVyR3JvdXApID0+IGdldEdyb3VwRm9ybShwYXJhbWV0ZXJHcm91cCkpO1xuXHRcdFx0Y29uc3Qgb3BGYWNldHMgPSBhd2FpdCBQcm9taXNlLmFsbChmb3JtRGF0YSk7XG5cblx0XHRcdC8vIEFkZCB0aGUgdGl0bGUgY29udHJvbCB0byBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRkaWFsb2dDb250ZW50cy5wdXNoKDxUaXRsZSB0ZXh0PXtkaWFsb2dDb250ZW50LmZhY2V0VGl0bGV9IC8+KTtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZGF0YS5tYXAoKGVsZW1lbnQpID0+IGRpYWxvZ0NvbnRlbnRzLnB1c2goZWxlbWVudC5mb3JtRWxlbWVudHMpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcEZhY2V0KSB7XG5cdFx0XHRcdG9wRmFjZXQuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWRcblx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25QYXJhbWV0ZXJzLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRkaWFsb2dDb250ZW50cyA9IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMubWFwKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmZvcm1FbGVtZW50cztcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMucmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBkZWZlcnJlZCBjcmVhdGUgd2UgaGF2ZSBubyB2aWV3LCBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgcmVzb3VyY2UgbW9kZWwgZnJvbSB0aGUgYXBwIGNvbXBvbmVudFxuXG5cdFx0Y29uc3QgbWVzc2FnZVN0cmlwID0gdGhpcy5nZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk7XG5cblx0XHRjb25zdCBlbmRCdXR0b24gPSAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSl9XG5cdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQ0FOQ0VMXCIpfVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25DYW5jZWwuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGNvbnN0IGRpYWxvZyA9IChcblx0XHRcdDxEaWFsb2dcblx0XHRcdFx0dGl0bGU9e3RoaXMuZ2V0VGl0bGVUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCl9XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lXSl9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzKX1cblx0XHRcdFx0ZHJhZ2dhYmxlPXt0cnVlfVxuXHRcdFx0XHRyZXNpemFibGU9e3RydWV9XG5cdFx0XHRcdGFmdGVyQ2xvc2U9e3RoaXMuYWZ0ZXJDbG9zZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVPcGVuPXt0aGlzLmJlZm9yZU9wZW4uYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJPcGVuPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZnRlck9wZW4oKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXtlbmRCdXR0b259IC8vIFRoZSBpbml0aWFsIGZvY3VzIGlzIHNldCBwcm9ncmFtbWF0aWNhbGx5IGluIGFmdGVyT3BlbiwgdG8gYXZvaWQgb3BlbmluZyB0aGUgVkggZGlhbG9nXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiT2tcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24gPT09IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTl9DT05USU5VRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldEJlZ2luQnV0dG9uTGFiZWwodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFwcGx5LmJpbmQodGhpcykoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVuZEJ1dHRvbjogZW5kQnV0dG9uLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmUgKHVua25vd24gcHJvcGVydHkgYmluZGluZylcblx0XHRcdFx0XHRcdC8vIGNvbHVtbnNNIG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZXJlIGFyZSB0aXRsZXMgaW4gdGhlIGNvbnRlbnQuXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7bWVzc2FnZVN0cmlwICYmIDxNZXNzYWdlU3RyaXAgc2hvd0ljb249XCJ0cnVlXCIgdGV4dD17bWVzc2FnZVN0cmlwfT48L01lc3NhZ2VTdHJpcD59XG5cdFx0XHRcdFx0XHRcdDxTaW1wbGVGb3JtIGNvbHVtbnNNPXtcIjJcIn0gZWRpdGFibGU9XCJ0cnVlXCIgbGFiZWxTcGFuTD17XCIxMlwifSBsYWJlbFNwYW5NPXtcIjEyXCJ9IGJpbmRpbmc9e1wiJFBhcmFtZXRlclwifT5cblx0XHRcdFx0XHRcdFx0XHR7eyBjb250ZW50OiBkaWFsb2dDb250ZW50cyB9fVxuXHRcdFx0XHRcdFx0XHQ8L1NpbXBsZUZvcm0+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdHJldHVybiBkaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgZm9yIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0QmVnaW5CdXR0b25MYWJlbChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9OQU1FXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19DT01NT05fRElBTE9HX09LXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGl0bGVUZXh0KGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX1RJVExFXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqL1xuXHRwcml2YXRlIGdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX01FU1NBR0VfVEVYVFwiO1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dC5cblx0ICogQHBhcmFtIGtleSBUaGUga2V5IGZvciBhbiBvdmVycmlkZGVuIHRleHRcblx0ICogQHBhcmFtIGRlZmF1bHRLZXkgVGhlIGRlZmF1bHQga2V5IGZvciB0aGUgdGV4dFxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBvciBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0T3ZlcnJpZGRlblRleHQoa2V5OiBzdHJpbmcsIGRlZmF1bHRLZXk6IHN0cmluZywgYWN0aW9uTGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAoYWN0aW9uTGFiZWwpIHtcblx0XHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25MYWJlbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGRlZmF1bHRLZXkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBwcmVzcyBldmVudCBvZiB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFwcGx5KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzLiBUaGUgQnVzeUxvY2tlciBpcyBub3QgZmFzdCBlbm91Z2guIChCQ1A6IDIzNzAxMzAyMTApXG5cdFx0aWYgKHRoaXMuYnV0dG9uTG9jayB8fCAhdGhpcy5kaWFsb2cpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2c7XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJDb250ZXh0ID0gKGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZyB8IHVuZGVmaW5lZCk/LmdldFBhcmFtZXRlckNvbnRleHQoKTtcblxuXHRcdC8vIGxvY2sgdGhlIGJ1dHRvbiB0byBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50c1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IHRydWU7XG5cdFx0QnVzeUxvY2tlci5sb2NrKGRpYWxvZyk7XG5cblx0XHQvLyB2YWxpZGF0ZSB0aGUgYWN0aW9uIHBhcmFtZXRlcnMuIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGlzIGFzIGEgZmlyc3Qgb3BlcmF0aW9uIGFzIHRoZXJlIGlzIGFcblx0XHQvLyB3YWl0IGRvbmUgZm9yIHRoZSB2YWx1ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlIHVwZGF0aW5nIHRoZSBtb2RlbC4gRXZlbiBpbiBjYXNlcyB3aGVyZSB2YWxpZGF0aW9uIGlzXG5cdFx0Ly8gbm90IGNvbmZpZ3VyZWQgdGhpcyBwcm9taXNlIG5lZWRzIHRvIGJlIHJlc29sdmVkIHRvIHJlYWQgZnJvbSB0aGUgbW9kZWwgdG8gcmV0dXJuIHVzZXIgZW50ZXJlZCB2YWx1ZXMuXG5cdFx0aWYgKCEoYXdhaXQgQWN0aW9uUnVudGltZS52YWxpZGF0ZVByb3BlcnRpZXModGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcywgdGhpcy5yZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKGRpYWxvZyk7XG5cdFx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBuZXdWYWx1ZXNEaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0Li4udGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm9zKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLnBhcmFtZXRlcjtcblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdHZhbHVlID0gT2JqZWN0LnZhbHVlcygoZGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHtwYXJhbWV0ZXIubmFtZX1gKSA/PyB7fSkubWFwKFxuXHRcdFx0XHRcdFx0KHBhcmFtVmFsdWUpID0+IChwYXJhbVZhbHVlIGFzIHsgS2V5PzogUHJpbWl0aXZlVHlwZSB9KT8uS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICghcGFyYW1ldGVyLnR5cGUuc3RhcnRzV2l0aChcIkVkbS5cIikgJiYgdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdFx0Ly8gRmlsZSBVcGxvYWRlclxuXHRcdFx0XHRcdHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mb3MudmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBwYXJhbWV0ZXJDb250ZXh0Py5nZXRQcm9wZXJ0eShwYXJhbWV0ZXIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHsgW3BhcmFtZXRlci5uYW1lXTogdmFsdWUgfTtcblx0XHRcdH0pXG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRjb25zdCBpc05ld1ZhbHVlID0gT2JqZWN0LnZhbHVlcyhuZXdWYWx1ZXNEaWN0aW9uYXJ5KS5zb21lKCh2YWx1ZSkgPT4gISF2YWx1ZSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlKG5ld1ZhbHVlc0RpY3Rpb25hcnkpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCwgaXNOZXdWYWx1ZSk7XG5cdFx0Ly8gRHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBkaWFsb2cgdG8gc3RhcnQgYSBuZXcgaXRlcmF0aW9uLlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHJlc2V0U3RhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy51bmxvY2tEaWFsb2coKTtcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHR0aGlzLnVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyB0byBvbmUgd2l0aCBwcmlvcml0eSBtZXNzYWdlLlxuXHQgKlxuXHQgKiBPbiBpbml0aWFsIGFjdGlvbiBleGVjdXRpb24sIHdlIG1pZ2h0IGhhdmUgYm91bmQgbWVzc2FnZXMgd2l0aCBhbnkgc2VsZWN0ZWQgY29udGV4dHMgYXMgdGFyZ2V0IGFwYXJ0IGZyb20gdGhlIGRpYWxvZydzIGluaXRpYWwgY29udGV4dC5cblx0ICogV2UgY2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgZGlhbG9nIGZvciB0aGUgcGFyYW1ldGVyIGZpZWxkcycgdG8gZ2V0IHRoZSB2YWxpZCB2YWx1ZSBzdGF0ZSBmcm9tIHRoZSBwcmlvcml0eSBib3VuZCBtZXNzYWdlLlxuXHQgKi9cblx0dXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA8IDIpIHtcblx0XHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gc3dpdGNoIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyBvbmx5IHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBjb250ZXh0cyBmb3IgZXhlY3V0aW5nIHRoZSBhY3Rpb24uXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHdhcm5pbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCwgaW5mb0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGVycm9uZW91c0N0eCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IGNvbnRleHQuZ2V0TWVzc2FnZXMoKTtcblx0XHRcdHJldHVybiBtZXNzYWdlcy5zb21lKChtc2cpID0+IHtcblx0XHRcdFx0Ly8gV2UgaG9sZCBmaXJzdCBjb250ZXh0IHdpdGggd2FybmluZyBvciBpbmZvIG1lc3NhZ2VzLlxuXHRcdFx0XHR3YXJuaW5nQ29udGV4dCA9ICF3YXJuaW5nQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5XYXJuaW5nID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aW5mb0NvbnRleHQgPSAhaW5mb0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBFcnJvciBpcyBmb3VuZCEhISBXZSBzaGFsbCBleGl0LlxuXHRcdFx0XHRyZXR1cm4gbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRjb25zdCBjb250ZXh0VG9Vc2UgPSBlcnJvbmVvdXNDdHggPz8gd2FybmluZ0NvbnRleHQgPz8gaW5mb0NvbnRleHQ7XG5cblx0XHRpZiAoY29udGV4dFRvVXNlKSB7XG5cdFx0XHR0aGlzLmRpYWxvZz8uc2V0QmluZGluZ0NvbnRleHQoY29udGV4dFRvVXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYnVzeSBzdGF0ZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSB1bmxvY2tEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nICYmIEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5kaWFsb2cpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLmRpYWxvZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBjYW5jZWwgYWN0aW9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0dGhpcy5jbG9zZURpYWxvZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHVibGljIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/LigpO1xuXHRcdFx0dGhpcy5kaWFsb2cuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgYWN0aW9uIHJlc3VsdC5cblx0ICovXG5cdGFzeW5jIG9wZW5EaWFsb2coKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igb24gb3BlbmluZyB0aGUgZGlhbG9nXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKSxcblx0XHRcdHRoaXMucGFyYW1ldGVyTW9kZWwsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHR0aGlzLnNldE1vZGVscyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXc/LmFkZERlcGVuZGVudCh0aGlzLmRpYWxvZyk7XG5cdFx0YXdhaXQgdGhpcy5zZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzKHRoaXMuZGlhbG9nKTtcblx0XHR0aGlzLmRpYWxvZy5vcGVuKCk7XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIG93bmVyIG9mIHRoZSBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgc2V0TW9kZWxzKGRpYWxvZzogRGlhbG9nKTogdm9pZCB7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHRoaXMucGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0ZGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlcnMubW9kZWwpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBgJHt0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gXCJcIiA6IFwiL1wifSR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGRpYWxvZy5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHR9XG5cdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7fSksIFwibXZmdmlld1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gX2V2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGJlZm9yZU9wZW4oX2V2ZW50OiBEaWFsb2ckQmVmb3JlT3BlbkV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSBzZXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyB3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RpYWxvZ09wZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXIgVGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRiaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmcsXG5cdFx0ZGlhbG9nOiBEaWFsb2dcblx0KTogUHJvbWlzZTxQYXJhbWV0ZXJEZWZhdWx0VmFsdWU+IHtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRcdGNvbnN0IHBhcmFtZXRlck1vZGVsRGF0YSA9IHRoaXMucGFyYW1ldGVyTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdGlmIChkZWZhdWx0VmFsdWUpIHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkZWZhdWx0VmFsdWUpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aEZvckNvbnRleHQ6IHN0cmluZyA9XG5cdFx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyICYmIGRlZmF1bHRWYWx1ZS5wYXRoLnN0YXJ0c1dpdGgoYCR7YmluZGluZ1BhcmFtZXRlcn0vYClcblx0XHRcdFx0XHRcdFx0PyBkZWZhdWx0VmFsdWUucGF0aC5yZXBsYWNlKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpXG5cdFx0XHRcdFx0XHRcdDogZGVmYXVsdFZhbHVlLnBhdGg7XG5cdFx0XHRcdFx0bGV0IHBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgsIG9wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBhd2FpdCBvcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKS5yZXF1ZXN0UHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQcm9wZXJ0eShwYXRoRm9yQ29udGV4dCkgIT09IHBhcmFtVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0bm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtVmFsdWUgfTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBwYXJhbU5hbWUsIHRoaXMuYWN0aW9uLm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0bGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBkZWZhdWx0VmFsdWUudmFsdWVPZigpIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtwYXJhbU5hbWVdIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZGlhbG9nPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzLnZpZXcgfHwgIXRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gfHwgIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0LnN1YnN0cmluZygwLCB0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdCksXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMudmlldyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0KSBhcyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgY29udGFpbmluZyBhbGwgcHJlZGVmaW5lZCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8e1xuXHRcdGNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGRlZmF1bHRWYWx1ZXM6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZVtdO1xuXHRcdGZ1bmN0aW9uVmFsdWVzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9PiB7XG5cdFx0Y29uc3QgYm91bmRGdW5jdGlvbk5hbWUgPSB0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5Db21tb24/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbj8udmFsdWVPZigpO1xuXHRcdGxldCByZXF1ZXN0Q29udGV4dE9iamVjdDogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdGxldCBmdW5jdGlvblBhcmFtczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD5bXSA9IFtdO1xuXHRcdGlmICh0aGlzLmFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGJvdW5kRnVuY3Rpb24gPSBPcGVyYXRpb24uZ2V0T3BlcmF0aW9uRnJvbU5hbWUoYm91bmRGdW5jdGlvbk5hbWUsIG1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pO1xuXHRcdFx0XHRpZiAoYm91bmRGdW5jdGlvbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IE9EYXRhT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRib3VuZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBtb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogW2NvbnRleHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRlbmhhbmNlJHNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZDogXCJmdW5jdGlvbkdyb3VwXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS5leGVjdXRlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihpc0Z1bGZpbGxlZClbMF0/LnZhbHVlLmJvdW5kQ29udGV4dDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlcXVlc3RDb250ZXh0T2JqZWN0ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGV4dFZhbHVlcyA9IGF3YWl0IHJlcXVlc3RDb250ZXh0T2JqZWN0O1xuXG5cdFx0XHRjb25zdCBwcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoYXN5bmMgKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciwgYmluZGluZ1BhcmFtZXRlciwgZGlhbG9nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0UHJvbWlzZS5hbGwoZnVuY3Rpb25QYXJhbXMpLFxuXHRcdFx0XHR0aGlzLmdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMoKVxuXHRcdFx0XSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzOiBwcm9taXNlc1swXSxcblx0XHRcdFx0ZnVuY3Rpb25WYWx1ZXM6IHByb21pc2VzWzFdLFxuXHRcdFx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1syXVxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHQvLyBSZW1vdmUgbWVzc2FnZXMgcmVsYXRpbmcgdG8gdGhlIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbHVlcyBhcyB0aGV5IGFyZW4ndCBoZWxwZnVsIGZvciBhIHVzZXJcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzOiB7fSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogW10sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBbXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczoge31cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBmaWVsZCB3aXRob3V0IG9wZW5pbmcgdGhlIFZIIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJPcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJsZVBhcmFtZXRlciA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmIChmaXJzdFZpc2libGVQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmaXJzdFZpc2libGVQYXJhbWV0ZXI/LmZpZWxkO1xuXHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlyc3RGaWVsZD8uZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdGZpcnN0RmllbGQ/LmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5mby5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRlbnRzIFRoZSBkaWFsb2cgY29udGVudHNcblx0ICovXG5cdHByaXZhdGUgcmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzOiBEaWFsb2dDb250ZW50VHlwZXNbXSk6IHZvaWQge1xuXHRcdC8vUmVnaXN0ZXIgdGhlIGZpZWxkXG5cdFx0ZGlhbG9nQ29udGVudHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZGlhbG9nQ29udGVudD8ucGFyYW1ldGVyO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBkaWFsb2dDb250ZW50Py5mb3JtRWxlbWVudHM/LlsxXTtcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MucHVzaCh7XG5cdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0ZmllbGQsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZTogcGFyYW1ldGVyLmlzQ29sbGVjdGlvbixcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyhkaWFsb2c6IERpYWxvZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVyc1swXS5uYW1lIDogXCJcIjtcblx0XHRjb25zdCB7IGNvbnRleHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMsIGZ1bmN0aW9uVmFsdWVzLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIH0gPSBhd2FpdCB0aGlzLmdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyLFxuXHRcdFx0ZGlhbG9nXG5cdFx0KTtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXIpIHtcblx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIsIGNvbnRleHRWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRpZiAodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSB0aGlzLnBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBwYXJhbWV0ZXJOYW1lKT8udmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWFuaWZlc3RGdW5jdGlvblZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwYXJhbWV0ZXJOYW1lKSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXNbcGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZXNbaV0gJiYgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24gJiYgIWRlZmF1bHRWYWx1ZXNbaV0ubm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0T2ZGdW5jdGlvblZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPihcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiBmdW5jdGlvblZhbHVlc1tpbmRleF0uZ2V0T2JqZWN0KHBhcmFtZXRlck5hbWUpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHNldE9mRnVuY3Rpb25WYWx1ZXMuc2l6ZSA9PT0gMSAmJiBzZXRPZkZ1bmN0aW9uVmFsdWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgQXJyYXkuZnJvbShzZXRPZkZ1bmN0aW9uVmFsdWVzKVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0aWYgKGRlZmF1bHRWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlLmxhdGVQcm9wZXJ0eUVycm9yKSkge1xuXHRcdFx0Y29uc3QgcmVmcmVzaCA9IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKTtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpLCB7XG5cdFx0XHRcdGFjdGlvbnM6IFtyZWZyZXNoLCBNZXNzYWdlQm94LkFjdGlvbi5PS10sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHJlZnJlc2gsXG5cdFx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IHJlZnJlc2gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMucGFyYW1ldGVycy52aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHRcdFx0XHQoZXh0ZW5zaW9uQVBJIGFzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgfCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJKS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMjVlbVwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0Ly8gZGVzdHJveSB0aGUgb2RhdGFDb250ZXh0QmluZGluZyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdFx0Zm9yIChjb25zdCBmdW5jdGlvbkNvbnRleHQgb2YgZnVuY3Rpb25WYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBmdW5jdGlvbkNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBjbG9zZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBhZnRlckNsb3NlKCk6IHZvaWQge1xuXHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcih0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlcik7XG5cdFx0fVxuXHRcdHRoaXMuZGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9uIGluIHRoZSBWYWx1ZUhlbHAgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGFuZCBwcm92aWRlcyB0aGUgZm9ybWF0dGVkIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBZGRpdGlvbmFsVmFsdWUob0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgdGV4dENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KCk/LiROYW1lO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdGhpcy5tZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oY29udGV4dFBhdGgsIHRydWUpO1xuXG5cdFx0Ly8gTG9vayBmb3IgTG9jYWxEYXRhUHJvcGVydHkgaW4gVmFsdWVMaXN0UGFyYW1ldGVyT3V0IG9yIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHdoZXJlIHRoaXMgaXMgdGhlIHBhcmFtZXRlciBuYW1lXG5cdFx0Ly8gV2Ugb25seSBjb25zaWRlciBUZXh0QW5ub3RhdGlvbnMgZm9yIHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtZXRlciA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLlBhcmFtZXRlcnMuZmluZChcblx0XHRcdChwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIiAmJlxuXHRcdFx0XHRcdHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHkpXG5cdFx0KTtcblxuXHRcdGlmICh2YWx1ZUxpc3RQYXJhbWV0ZXIgJiYgdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHQvLyBOb3cgd2UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB0aGUgYW5ub3RhdGVkIHRleHRcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5Db2xsZWN0aW9uUGF0aH0vJHt0ZXh0UHJvcGVydHl9YDtcblx0XHRcdGNvbnN0IHByb3BBbm5vdGF0aW9ucyA9IHRoaXMubWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApO1xuXG5cdFx0XHRpZiAocHJvcEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0UHJvcCA9IHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdFx0Y29uc3QgdGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3AuJFBhdGh9YDtcblx0XHRcdFx0dGV4dENvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0ZXh0UGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQodGV4dENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogdGV4dENvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQStGcUJBLHFCQUFxQjtJQTRCekMsU0FBQUEsc0JBQ2tCQyxNQUFjLEVBQ2RDLFVBYWhCLEVBQ2dCQyxlQUFzRCxFQUN0REMsYUFBaUMsRUFDakNDLGNB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
|