@sapui5/sap.fe.macros 1.141.2 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType", "sap/fe/core/CommonUtils", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/chart/ChartHelper", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/mdc/enums/ChartItemRoleType", "sap/ui/mdc/odata/v4/util/DelegateUtil", "sap/ui/mdc/odata/v4/vizChart/ChartDelegate", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../filterBar/FilterBarDelegate"], function (Log, merge, TimeUnitType, CommonUtils, MetaModelConverter, FetchFilterRestrictions, valueFormatters, MetaModelFunction, ResourceModelHelper, CommonHelper, MacrosDelegateUtil, ChartHelper, ChartUtils, FilterUtils, IllustratedMessageSize, IllustratedMessageType, Element, Library, ChartItemRoleType, DelegateUtil, BaseChartDelegate, Filter, FilterOperator, FilterBarDelegate) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var isMultiValueFilterExpression = MetaModelFunction.isMultiValueFilterExpression;
|
|
@@ -21,8 +21,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
21
21
|
const sortRestrictionsInfo = getSortRestrictionsInfo(mEntitySetAnnotations);
|
|
22
22
|
const metaModel = oContext.getModel();
|
|
23
23
|
const entityTypePath = oMDCChart.data("entityType");
|
|
24
|
-
const
|
|
25
|
-
const filterRestrictions =
|
|
24
|
+
const dataModel = MetaModelConverter.getInvolvedDataModelObjects(metaModel.getContext(entityTypePath));
|
|
25
|
+
const filterRestrictions = FetchFilterRestrictions.getFilterRestrictionsByDataModel(dataModel);
|
|
26
26
|
const propertyFilterableData = {};
|
|
27
27
|
getFilterableData(propertyFilterableData, filterRestrictions.NonFilterableProperties, Object.keys(filterRestrictions.FilterAllowedExpressions));
|
|
28
28
|
const oObj = oContext.getModel().getObject(oContext.getPath());
|
|
@@ -259,7 +259,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
259
259
|
const noDataControl = oChart.getNoData();
|
|
260
260
|
noDataControl.setTitle(illustratedMessageDetail.title);
|
|
261
261
|
noDataControl.setDescription(illustratedMessageDetail.description);
|
|
262
|
-
noDataControl.setIllustrationType(illustratedMessageDetail.illustrationType || IllustratedMessageType.
|
|
262
|
+
noDataControl.setIllustrationType(illustratedMessageDetail.illustrationType || IllustratedMessageType.NoEntries);
|
|
263
263
|
noDataControl.setIllustrationSize(illustratedMessageDetail.illustrationSize || IllustratedMessageSize.Auto);
|
|
264
264
|
};
|
|
265
265
|
|
|
@@ -279,13 +279,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
279
279
|
return {
|
|
280
280
|
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
281
281
|
description: resourceModel.getText("M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW", undefined, suffixResourceKey),
|
|
282
|
-
illustrationType: IllustratedMessageType.
|
|
282
|
+
illustrationType: IllustratedMessageType.NoFilterResults
|
|
283
283
|
};
|
|
284
284
|
}
|
|
285
285
|
return {
|
|
286
286
|
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NOSEARCHRESULTS", undefined, suffixResourceKey),
|
|
287
287
|
description: resourceModel.getText("T_TABLE_AND_CHART_NO_DATA_TEXT_WITH_FILTER", undefined, suffixResourceKey),
|
|
288
|
-
illustrationType: IllustratedMessageType.
|
|
288
|
+
illustrationType: IllustratedMessageType.NoFilterResults,
|
|
289
289
|
illustrationSize: converterType === "ObjectPage" ? IllustratedMessageSize.Small : IllustratedMessageSize.Auto
|
|
290
290
|
};
|
|
291
291
|
};
|
|
@@ -300,7 +300,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
300
300
|
illustratedInformation = {
|
|
301
301
|
title: resourceModel.getText("T_ILLUSTRATED_MESSAGE_TITLE_NODATA", undefined, suffixResourceKey),
|
|
302
302
|
description: resourceModel.getText("M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT", undefined, suffixResourceKey),
|
|
303
|
-
illustrationType: IllustratedMessageType.
|
|
303
|
+
illustrationType: IllustratedMessageType.NoEntries,
|
|
304
304
|
illustrationSize: IllustratedMessageSize.Small
|
|
305
305
|
};
|
|
306
306
|
}
|
|
@@ -347,6 +347,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
347
347
|
element.sPath = oChart.getParent().getChartPropertiesWithoutPrefixes(element.getPath());
|
|
348
348
|
}
|
|
349
349
|
});
|
|
350
|
+
oFilterInfo.filters = ChartDelegate._removeSiblingEntityForDraftChart(oFilterInfo.filters);
|
|
350
351
|
}
|
|
351
352
|
oBindingInfo.events ??= {};
|
|
352
353
|
oBindingInfo.events.dataRequested = oChart.getParent().onInternalDataRequested.bind(oChart.getParent());
|
|
@@ -388,6 +389,26 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
388
389
|
oData.resolver(oModel);
|
|
389
390
|
}
|
|
390
391
|
}
|
|
392
|
+
ChartDelegate._removeSiblingEntityForDraftChart = function (items) {
|
|
393
|
+
if (!items?.length) {
|
|
394
|
+
return [];
|
|
395
|
+
}
|
|
396
|
+
return items.map(item => {
|
|
397
|
+
if (item.getPath() === "SiblingEntity/IsActiveEntity" || item.getPath() === "IsActiveEntity") {
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
if (item.getFilters()?.length) {
|
|
401
|
+
const filteredChildren = ChartDelegate._removeSiblingEntityForDraftChart(item.getFilters());
|
|
402
|
+
if (filteredChildren.length) {
|
|
403
|
+
return item;
|
|
404
|
+
}
|
|
405
|
+
} else if (item.getPath()) {
|
|
406
|
+
return item;
|
|
407
|
+
} else {
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
}).filter(item => item !== null && item !== undefined);
|
|
411
|
+
};
|
|
391
412
|
ChartDelegate._createPropertyInfos = async function (oMDCChart, oModel) {
|
|
392
413
|
const sEntitySetPath = `/${oMDCChart.data("entitySet")}`;
|
|
393
414
|
const oMetaModel = oModel.getMetaModel();
|
|
@@ -621,4 +642,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
|
|
|
621
642
|
};
|
|
622
643
|
return ChartDelegate;
|
|
623
644
|
}, false);
|
|
624
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydERlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiQmFzZUNoYXJ0RGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiX2xvYWRDaGFydCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9oYW5kbGVQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5IiwidW5pdE9mTWVhc3VyZXMiLCJvQXBwbHlTdXBwb3J0ZWQiLCJDb21tb25IZWxwZXIiLCJwYXJzZUN1c3RvbURhdGEiLCJkYXRhIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RW50aXR5U2V0UGF0aCIsImZpbHRlclJlc3RyaWN0aW9ucyIsIkNvbW1vblV0aWxzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwicHJvcGVydHlGaWx0ZXJhYmxlRGF0YSIsImdldEZpbHRlcmFibGVEYXRhIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJrZXlzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwib09iaiIsImdldE9iamVjdCIsImdldFBhdGgiLCJzS2V5IiwiYU1vZGVzIiwiZ2V0UDEzbk1vZGUiLCJjaGVja0Zvck5vbmZpbHRlcmFibGVFbnRpdHlTZXQiLCIka2luZCIsIiRpc0NvbGxlY3Rpb24iLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsInNQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJhR3JvdXBhYmxlUHJvcGVydGllcyIsIkdyb3VwYWJsZVByb3BlcnRpZXMiLCJhQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJiR3JvdXBhYmxlIiwiY2hlY2tQcm9wZXJ0eVR5cGUiLCJiQWdncmVnYXRhYmxlIiwiY3VzdG9tQWdncmVnYXRlcyIsImxlbmd0aCIsImluY2x1ZGVzIiwicHJvcGVydHlGaWx0ZXJhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJhQWdncmVnYXRlUHJvcGVydGllcyIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlIiwiJFR5cGUiLCJmb3JFYWNoIiwib0FnZ3JlZ2F0ZVByb3BlcnR5IiwicGF0aCIsInB1c2giLCJhS25vd25BZ2dyZWdhdGFibGVQcm9wcyIsImFHcm91cGFibGVQcm9wZXJ0aWVzVmFsdWVzIiwibWFwIiwib1Byb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsImFkZFByb3BlcnR5VG9DaGFydCIsImNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlIiwidW5kZWZpbmVkIiwic05hbWUiLCJzVGV4dFByb3BlcnR5IiwiJFBhdGgiLCJiSXNOYXZpZ2F0aW9uVGV4dCIsIkxvZyIsImVycm9yIiwiaW5kZXhPZiIsIl9nZXRTb3J0YWJsZSIsInByb3BlcnR5SW5mbyIsIl9nZXRVbml0T2ZNZWFzdXJlcyIsImVudGl0eVR5cGUiLCJlbnRpdHlTZXRQYXRoIiwiY29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlBbm5vdGF0aW9ucyIsInVuaXQiLCJpc0ZpbHRlcmFibGUiLCJvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImlzU29ydGFibGUiLCJiSXNHcm91cGFibGUiLCJiSXNBZ2dyZWdhdGFibGUiLCJiSXNIaWRkZW4iLCJjaGFydFJvbGUiLCJDaGFydEl0ZW1Sb2xlVHlwZSIsImNhdGVnb3J5IiwiY2hhcnREYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwicmVjb3JkIiwic3BsaXQiLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsImxhYmVsIiwidG9TdHJpbmciLCJzb3J0YWJsZSIsImZpbHRlcmFibGUiLCJncm91cGFibGUiLCJhZ2dyZWdhdGFibGUiLCJtYXhDb25kaXRpb25zIiwiaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiIsInJvbGUiLCJjcml0aWNhbGl0eSIsImRhdGFUeXBlIiwidmlzaWJsZSIsInRleHRQcm9wZXJ0eSIsInRleHRGb3JtYXR0ZXIiLCJ0aW1lVW5pdFR5cGUiLCJfZ2V0VGltZVR5cGUiLCJmb3JtYXRPcHRpb25zIiwic3R5bGUiLCJrZXkiLCJUaW1lVW5pdFR5cGUiLCJEYXRlIiwiZmlzY2FseWVhciIsImZpc2NhbHllYXJwZXJpb2QiLCJ5ZWFybW9udGgiLCJ5ZWFycXVhcnRlciIsInllYXJ3ZWVrIiwieWVhcm1vbnRoZGF5IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsImdldE1ldGFNb2RlbCIsIkZpbHRlcmFibGUiLCJmaWx0ZXIiLCJpdGVtIiwic2V0UDEzbk1vZGUiLCJlbGVtZW50IiwiUHJvcGVydHkiLCJmb3JtYXRUZXh0Iiwib1ZhbHVlMSIsIm9WYWx1ZTIiLCJzVmFsdWUiLCJ0eXBlQ29uZmlnIiwidHlwZUluc3RhbmNlIiwiZm9ybWF0VmFsdWUiLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiX3VwZGF0ZUlsbHVzdHJhdGVkTWVzc2FnZSIsIm9DaGFydCIsImlsbHVzdHJhdGVkTWVzc2FnZURldGFpbCIsIm5vRGF0YUNvbnRyb2wiLCJnZXROb0RhdGEiLCJzZXRUaXRsZSIsInRpdGxlIiwic2V0RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldElsbHVzdHJhdGlvblR5cGUiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRGF0YSIsInNldElsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkF1dG8iLCJzZXRDaGFydE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSIsImNoYXJ0IiwiYmluZGluZ0luZm8iLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiY29udmVydGVyVHlwZSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsIm9DaGFydEZpbHRlckluZm8iLCJDaGFydFV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInN1ZmZpeFJlc291cmNlS2V5Iiwic3RhcnRzV2l0aCIsInN1YnN0ciIsImdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzIiwiZ2V0VGV4dCIsIk5vU2VhcmNoUmVzdWx0cyIsIlNtYWxsIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsInVwZGF0ZUJpbmRpbmdJbmZvIiwib0JpbmRpbmdJbmZvIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJvRmlsdGVyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwicGFyYW1ldGVycyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwiJHNlYXJjaCIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJzUGFyYW1ldGVyUGF0aCIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlcnNJbmZvIiwib0ZpbHRlckluZm8iLCJDaGFydEhlbHBlciIsImdldENvbGxlY3Rpb25OYW1lIiwiZ2V0UGFyZW50IiwiZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzIiwiZXZlbnRzIiwiZGF0YVJlcXVlc3RlZCIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwiYmluZCIsIkZpbHRlciIsImFuZCIsInNvcnRlciIsImdldFNvcnRlcnMiLCJfY2hlY2tBbmRBZGREcmFmdEZpbHRlciIsImZldGNoUHJvcGVydGllcyIsIm9Nb2RlbCIsIl9nZXRNb2RlbCIsInBDcmVhdGVQcm9wZXJ0eUluZm9zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJyZXNvbHZlciIsIm9uTW9kZWxDb250ZXh0Q2hhbmdlIiwidGhlbiIsIm9SZXRyaWV2ZWRNb2RlbCIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zIiwiTWFjcm9zRGVsZWdhdGVVdGlsIiwic2V0Q2FjaGVkUHJvcGVydGllcyIsIm9FdmVudCIsIm9EYXRhIiwiZ2V0U291cmNlIiwiZGV0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwic0VudGl0eVNldFBhdGgiLCJvTWV0YU1vZGVsIiwiYVJlc3VsdHMiLCJhbGwiLCJyZXF1ZXN0T2JqZWN0Iiwib0VudGl0eVR5cGUiLCJnZXRDdXN0b21BZ2dyZWdhdGUiLCJzQW5ubyIsInNBbm5vS2V5IiwicmVwbGFjZSIsImFBbm5vIiwibVR5cGVBZ2dyZWdhdGFibGVQcm9wcyIsInNBZ2dyZWdhdGFibGUiLCJzUHJvcEtleSIsInByb3BlcnR5UGF0aCIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiZmV0Y2hDcml0aWNhbGl0eSIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwiYUNoYXJ0SXRlbXMiLCJnZXRJdGVtcyIsImdldFR5cGUiLCJnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWwiLCJheGlzMSIsImRhdGFwb2ludCIsInVuaXRQYXRoIiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0Iiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImZpcmVFdmVudCIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsIm9QYXJhbXMiLCJlbnRpdHlTZXQiLCJjaGFydENvbnRleHRQYXRoIiwicmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0Iiwib01EQ0NoYXJ0SXRlbSIsImNhbGwiLCJmaXJlRGVzZWxlY3REYXRhIiwic29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5IiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiYUZpbHRlcnMiLCJraW5kIiwiZ2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQiLCJtZGNDaGFydCIsImdldFByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHkiLCJnZXRGaWx0ZXJEZWxlZ2F0ZSIsIkZpbHRlckJhckRlbGVnYXRlIiwiYWRkSXRlbSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJwcm9wIiwib0ZpbHRlckl0ZW0iLCJiaW5kUHJvcGVydHkiLCJzZXRQcm9wZXJ0eUtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHNhcENoYXJ0IGZyb20gXCJzYXAvY2hhcnQvQ2hhcnRcIjtcbmltcG9ydCBUaW1lVW5pdFR5cGUgZnJvbSBcInNhcC9jaGFydC9UaW1lVW5pdFR5cGVcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uTW9kZSB9IGZyb20gXCJzYXAvY2hhcnQvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBfRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRBcHBseVN1cHBvcnRlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlLFxuXHRTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdFNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJhYmxlRGF0YSwgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBNYWNyb3NEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRIZWxwZXJcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIFVJNUVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFbGVtZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDaGFydEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvQ2hhcnRJdGVtXCI7XG5pbXBvcnQgdHlwZSBDaGFydFByb3BlcnR5IGZyb20gXCJzYXAvdWkvbWRjL2NoYXJ0L0NoYXJ0UHJvcGVydHlcIjtcbmltcG9ydCB0eXBlIEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvSXRlbVwiO1xuaW1wb3J0IENoYXJ0SXRlbVJvbGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0NoYXJ0SXRlbVJvbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDaGFydFAxM25Nb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0NoYXJ0UDEzbk1vZGVcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdXRpbC9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBCYXNlQ2hhcnREZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC92aXpDaGFydC9DaGFydERlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uLCBNZXRhTW9kZWxQcm9wZXJ0eSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgTWV0YU1vZGVsRW51bSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwiLi4vQ2hhcnRcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwiLi4vZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5cbmNvbnN0IENoYXJ0RGVsZWdhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBCYXNlQ2hhcnREZWxlZ2F0ZSk7XG5CYXNlQ2hhcnREZWxlZ2F0ZS5hcGlWZXJzaW9uID0gMjtcbkNoYXJ0RGVsZWdhdGUuX2xvYWRDaGFydCA9IGFzeW5jIGZ1bmN0aW9uICgpOiBQcm9taXNlPHVua25vd24+IHtcblx0YXdhaXQgTGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAuY2hhcnRcIiB9KTtcblx0cmV0dXJuIEJhc2VDaGFydERlbGVnYXRlLl9sb2FkQ2hhcnQoKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuX2hhbmRsZVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0bUVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uLFxuXHRtS25vd25BZ2dyZWdhdGFibGVQcm9wczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBsYWJlbDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4+LFxuXHRtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGFQcm9wZXJ0aWVzOiBDaGFydFByb3BlcnR5W10sXG5cdHNDcml0aWNhbGl0eTogc3RyaW5nLFxuXHR1bml0T2ZNZWFzdXJlczogc3RyaW5nW11cbik6IHZvaWQge1xuXHRjb25zdCBvQXBwbHlTdXBwb3J0ZWQgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwiYXBwbHlTdXBwb3J0ZWRcIikpIGFzIENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdGNvbnN0IHNvcnRSZXN0cmljdGlvbnNJbmZvID0gZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8obUVudGl0eVNldEFubm90YXRpb25zKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBvTURDQ2hhcnQuZGF0YShcImVudGl0eVR5cGVcIik7XG5cdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uczogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChiaW5kaW5nUGF0aCwgbWV0YU1vZGVsKTtcblx0Y29uc3QgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YTogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT4gPSB7fTtcblx0Z2V0RmlsdGVyYWJsZURhdGEoXG5cdFx0cHJvcGVydHlGaWx0ZXJhYmxlRGF0YSxcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnMuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMsXG5cdFx0T2JqZWN0LmtleXMoZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucylcblx0KTtcblx0Y29uc3Qgb09iaiA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0T2JqZWN0KG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE9iamVjdChgJHtvQ29udGV4dC5nZXRQYXRoKCl9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdGNvbnN0IGFNb2RlcyA9IG9NRENDaGFydC5nZXRQMTNuTW9kZSgpO1xuXHRjaGVja0Zvck5vbmZpbHRlcmFibGVFbnRpdHlTZXQob01EQ0NoYXJ0LCBhTW9kZXMpO1xuXG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29Db250ZXh0LmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiwgbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkpO1xuXG5cdFx0Y29uc3QgYUdyb3VwYWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdFx0bGV0IGJHcm91cGFibGUgPSBhR3JvdXBhYmxlUHJvcGVydGllcyA/IGNoZWNrUHJvcGVydHlUeXBlKGFHcm91cGFibGVQcm9wZXJ0aWVzLCBzUGF0aCkgOiBmYWxzZTtcblx0XHRsZXQgYkFnZ3JlZ2F0YWJsZSA9IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID8gY2hlY2tQcm9wZXJ0eVR5cGUoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMsIHNQYXRoKSA6IGZhbHNlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcyk7XG5cblx0XHRpZiAoIWFHcm91cGFibGVQcm9wZXJ0aWVzIHx8IChhR3JvdXBhYmxlUHJvcGVydGllcyAmJiAhYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoKSkge1xuXHRcdFx0Ykdyb3VwYWJsZSA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIl07XG5cdFx0fVxuXHRcdGlmICghYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgfHwgKGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmICFhQWdncmVnYXRhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiQWdncmVnYXRhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9wZXJ0eUZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob0NvbnRleHQpO1xuXHRcdGlmIChiQWdncmVnYXRhYmxlKSB7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllcyA9IENoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUoXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0c0tleSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRcdFx0c29ydFJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHRcdFx0b09iai4kVHlwZVxuXHRcdFx0KTtcblx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9BZ2dyZWdhdGVQcm9wZXJ0eTogQ2hhcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHQvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSB0aGVuIGRvIG5vdCBhZGQgaXQgdG8gbWVhc3VyZXNcblx0XHRcdFx0aWYgKCF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhvQWdncmVnYXRlUHJvcGVydHkucGF0aCkpIHtcblx0XHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly9BZGQgdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlZCBwcm9wZXJ0aWVzIHRvIGNoYXJ0IHByb3BlcnRpZXNcblx0XHRcdGlmIChhTW9kZXMgJiYgYU1vZGVzLmluY2x1ZGVzKFwiRmlsdGVyXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGFLbm93bkFnZ3JlZ2F0YWJsZVByb3BzID0gT2JqZWN0LmtleXMobUtub3duQWdncmVnYXRhYmxlUHJvcHMpO1xuXHRcdFx0XHRjb25zdCBhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcyA9IGFHcm91cGFibGVQcm9wZXJ0aWVzPy5tYXAoXG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSkgPT4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gQWRkIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZWQgcHJvcGVydHkgdG8gY2hhcnQgc28gdGhhdCBpbiB0aGUgZmlsdGVyIGRyb3Bkb3duIGl0J3MgdmlzaWJsZVxuXHRcdFx0XHQvLyBBbHNvIG1hcmsgdmlzaWJpbGl0eSBmYWxzZSBhcyB0aGlzIHByb3BlcnR5IHNob3VsZCBub3QgY29tZSB1cCBpbiB1bmRlciBjaGFydCBzZWN0aW9uIG9mIHBlcnNvbmFsaXphdGlvbiBkaWFsb2dcblx0XHRcdFx0Ly8gaWYgYSBwcm9wZXJ0eSBpcyBVT00gdGhlbiBkbyBub3QgYWRkIGl0IHRvIG1lYXN1cmVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhS25vd25BZ2dyZWdhdGFibGVQcm9wcy5pbmNsdWRlcyhzS2V5KSAmJlxuXHRcdFx0XHRcdCFhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcz8uaW5jbHVkZXMoc0tleSkgJiZcblx0XHRcdFx0XHQhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YVByb3BlcnRpZXMgPSBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHNLZXksXG5cdFx0XHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgPyBmYWxzZSA6IGNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlKHNLZXksIHByb3BlcnR5RmlsdGVyYWJsZSwgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YSksXG5cdFx0XHRcdFx0XHRmaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0XHRcdFx0XHRmYWxzZSwgLy8gJ2lzU29ydGFibGUnIGlzIHNldCB0byAnZmFsc2UnIHRvIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBzb3J0IHF1ZXVlIGZvciBhZ2dyZWdhdGFibGUgcHJvcGVydGllcy4gVGhlc2UgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBxdWV1ZWQgZm9yIHNvcnRpbmcgaW4gdGhlICdjcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlJyBtZXRob2QuXG5cdFx0XHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdFx0XHRzQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0XHRvT2JqLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJHcm91cGFibGUpIHtcblx0XHRcdGNvbnN0IHNOYW1lID0gc0tleSB8fCBcIlwiLFxuXHRcdFx0XHRzVGV4dFByb3BlcnR5ID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuVGV4dF1cblx0XHRcdFx0XHQ/IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlRleHRdLiRQYXRoXG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0bGV0IGJJc05hdmlnYXRpb25UZXh0ID0gZmFsc2U7XG5cdFx0XHRpZiAoc05hbWUgJiYgc05hbWUuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gUHJvcGVydHk6ICR7c05hbWV9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNUZXh0UHJvcGVydHkgJiYgc1RleHRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gVGV4dCBQcm9wZXJ0eTogJHtzVGV4dFByb3BlcnR5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdGJJc05hdmlnYXRpb25UZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFQcm9wZXJ0aWVzID0gYWRkUHJvcGVydHlUb0NoYXJ0KFxuXHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0c0tleSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlKHNLZXksIHByb3BlcnR5RmlsdGVyYWJsZSwgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YSlcblx0XHRcdFx0XHQ/IChjdXN0b21BZ2dyZWdhdGVzLmluY2x1ZGVzKHNLZXkpICYmIHVuaXRPZk1lYXN1cmVzLmluY2x1ZGVzKHNLZXkpKSB8fCAhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSlcblx0XHRcdFx0XHQ6IGZhbHNlLCAvLyBVT00gcHJvcGVydHkgc2hvdWxkIGJlIGZpbHRlcmFibGUgaWYgaXQgaXMgbWFya2VkIGFzIGN1c3RvbSBhZ2dyZWdhdGUgYXMgd2VsbCBhcyBncm91cGFibGVcblx0XHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdFx0XHRDaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZShvTURDQ2hhcnQsIHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSwgZmFsc2UpLFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdHNDcml0aWNhbGl0eSxcblx0XHRcdFx0b09iaixcblx0XHRcdFx0IWN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgfHwgKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgJiYgdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSkpID8gdHJ1ZSA6IGZhbHNlLCAvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSwgbWFya2VkIGFzIGN1c3RvbSBhZ2dyZWdhdGUgYW5kIGdyb3VwYWJsZSB0aGVuIHNob3cgaXQgaW4gZGltZW5zaW9uc1xuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YklzTmF2aWdhdGlvblRleHRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIHByb3BlcnRpZXMgd2hpY2ggYXJlIG1hcmtlZCBhcyB1bml0IG9mIG1lYXN1cmUuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSBjaGFydFxuICogQHBhcmFtIG1ldGFNb2RlbCAgTWV0YU1vZGVsXG4gKiBAcGFyYW0gZW50aXR5U2V0UGF0aCBFbnRpdHkgc2V0IHBhdGhcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXQgb2YgbWVhc3VyZXNcbiAqL1xuZnVuY3Rpb24gX2dldFVuaXRPZk1lYXN1cmVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Y29uc3QgdW5pdE9mTWVhc3VyZXM6IHN0cmluZ1tdID0gW107XG5cdGZvciAoY29uc3Qgc0tleSBpbiBlbnRpdHlUeXBlKSB7XG5cdFx0Y29uc3QgY29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtlbnRpdHlTZXRQYXRofS8ke3NLZXl9YCk7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7Y29udGV4dD8uZ2V0UGF0aCgpfUBgKTtcblx0XHRjb25zdCB1bml0ID1cblx0XHRcdChwcm9wZXJ0eUFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdChwcm9wZXJ0eUFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aDtcblx0XHRpZiAodW5pdCAmJiAhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXModW5pdCkpIHtcblx0XHRcdHVuaXRPZk1lYXN1cmVzLnB1c2godW5pdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bml0T2ZNZWFzdXJlcztcbn1cblxuLy8gY3JlYXRlIHByb3BlcnRpZXMgZm9yIGNoYXJ0XG5mdW5jdGlvbiBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdGFQcm9wZXJ0aWVzOiBDaGFydFByb3BlcnR5W10sXG5cdHNLZXk6IHN0cmluZyxcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdGlzRmlsdGVyYWJsZTogYm9vbGVhbixcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0luZm86IF9GaWx0ZXJSZXN0cmljdGlvbnMsXG5cdGlzU29ydGFibGU6IGJvb2xlYW4sXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdHNDcml0aWNhbGl0eTogc3RyaW5nLFxuXHRvT2JqOiBNZXRhTW9kZWxQcm9wZXJ0eSxcblx0YklzR3JvdXBhYmxlOiBib29sZWFuLFxuXHRiSXNBZ2dyZWdhdGFibGU6IGJvb2xlYW4sXG5cdGJJc05hdmlnYXRpb25UZXh0PzogYm9vbGVhbixcblx0YklzSGlkZGVuPzogYm9vbGVhblxuKTogQ2hhcnRQcm9wZXJ0eVtdIHtcblx0bGV0IGNoYXJ0Um9sZSA9IENoYXJ0SXRlbVJvbGVUeXBlLmNhdGVnb3J5O1xuXHRjb25zdCBjaGFydERhdGEgPSBvTURDQ2hhcnQuZGF0YShcImNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZVwiKTtcblxuXHRpZiAoQXJyYXkuaXNBcnJheShjaGFydERhdGEpKSB7XG5cdFx0Y2hhcnREYXRhLmZvckVhY2goKHJlY29yZDogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0pID0+IHtcblx0XHRcdGlmIChyZWNvcmRbc0tleV0pIHtcblx0XHRcdFx0Y2hhcnRSb2xlID0gcmVjb3JkW3NLZXldLnNwbGl0KFwiL1wiKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCBjaGFydFJvbGU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHk6IENoYXJ0UHJvcGVydHkgPSB7XG5cdFx0bmFtZTogXCJfZmVfZ3JvdXBhYmxlX1wiICsgc0tleSxcblx0XHRsYWJlbDogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdPy50b1N0cmluZygpIHx8IHNLZXksXG5cdFx0c29ydGFibGU6IGlzU29ydGFibGUsXG5cdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlLFxuXHRcdGdyb3VwYWJsZTogYklzR3JvdXBhYmxlLFxuXHRcdGFnZ3JlZ2F0YWJsZTogYklzQWdncmVnYXRhYmxlLFxuXHRcdG1heENvbmRpdGlvbnM6IGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0/LltzS2V5XT8uWzBdKSA/IC0xIDogMSxcblx0XHRwYXRoOiBzS2V5LFxuXHRcdHJvbGU6IGNoYXJ0Um9sZSwgLy9zdGFuZGFyZCwgbm9ybWFsbHkgdGhpcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgZnJvbSBVSS5DaGFydCBhbm5vdGF0aW9uXG5cdFx0Y3JpdGljYWxpdHk6IHNDcml0aWNhbGl0eSwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdGRhdGFUeXBlOiBvT2JqLiRUeXBlLFxuXHRcdHZpc2libGU6IGJJc0hpZGRlbiA/ICFiSXNIaWRkZW4gOiB0cnVlLFxuXHRcdHRleHRQcm9wZXJ0eTpcblx0XHRcdCFiSXNOYXZpZ2F0aW9uVGV4dCAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHQ/IChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSkuJFBhdGhcblx0XHRcdFx0OiBudWxsLCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0dGV4dEZvcm1hdHRlcjogKG9Qcm9wZXJ0eUFubm90YXRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtcblx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXG5cdFx0XSBhcyBNZXRhTW9kZWxFbnVtPFRleHRBcnJhbmdlbWVudD5cblx0fTtcblx0Ly8gdGltZVVuaXRUeXBlID0gdW5kZWZpbmVkIC0+IGNyYXNoZXMgdGhlIGNoYXJ0LiB0aGVyZWZvcmU6XG5cdGNvbnN0IHRpbWVVbml0VHlwZSA9IENoYXJ0RGVsZWdhdGUuX2dldFRpbWVUeXBlKG9PYmosIG9Qcm9wZXJ0eUFubm90YXRpb25zKTtcblx0aWYgKHRpbWVVbml0VHlwZSkgb1Byb3BlcnR5LnRpbWVVbml0VHlwZSA9IHRpbWVVbml0VHlwZTtcblxuXHRpZiAob09iai4kVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fCBvT2JqLiRUeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIikge1xuXHRcdHN3aXRjaCAob09iai4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRvUHJvcGVydHkuZm9ybWF0T3B0aW9ucyA9IHsgc3R5bGU6IFwibWVkaXVtL3Nob3J0XCIgfTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRvUHJvcGVydHkuZm9ybWF0T3B0aW9ucyA9IHsgc3R5bGU6IFwic2hvcnRcIiB9O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5KTtcblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcHJvcGVydHkgaXMgZmlsdGVyYWJsZSBvciBub3QuXG4gKiBAcGFyYW0ga2V5IFByb3BlcnR5IGtleVxuICogQHBhcmFtIHByb3BlcnR5RmlsdGVyYWJsZSAgRmlsdGVyIHJlc3RyaWN0aW9uc1xuICogQHBhcmFtIHByb3BlcnR5RmlsdGVyYWJsZURhdGFcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgZm9yIGEgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoXG5cdGtleTogc3RyaW5nLFxuXHRwcm9wZXJ0eUZpbHRlcmFibGU6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0cHJvcGVydHlGaWx0ZXJhYmxlRGF0YTogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT5cbik6IGJvb2xlYW4ge1xuXHRpZiAocHJvcGVydHlGaWx0ZXJhYmxlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlGaWx0ZXJhYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0Ly8gcGF0aCBiYXNlZCBmaWx0ZXJhYmxlIGlzIHlldCB0byBoYW5kbGUgaGVyZSBpbiBmdXR1cmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gcHJvcGVydHlGaWx0ZXJhYmxlRGF0YT8uW2tleV0/LmZpbHRlcmFibGUgPz8gdHJ1ZTtcblx0fVxufVxuXG5DaGFydERlbGVnYXRlLl9nZXRUaW1lVHlwZSA9IGZ1bmN0aW9uIChvT2JqOiBNZXRhTW9kZWxQcm9wZXJ0eSwgb1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVGltZVVuaXRUeXBlIHwgdW5kZWZpbmVkIHtcblx0c3dpdGNoIChvT2JqLiRUeXBlKSB7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLkRhdGU7XG5cdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUuZmlzY2FseWVhcjtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUGVyaW9kXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLmZpc2NhbHllYXJwZXJpb2Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyTW9udGhdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcm1vbnRoO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcnF1YXJ0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyV2Vla10pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS55ZWFyd2Vlaztcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhckRhdGVdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcm1vbnRoZGF5O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8vIElmIGVudGl0eXNldCBpcyBub24gZmlsdGVyYWJsZSx0aGVuIGZyb20gcDEzbiBtb2RlcyByZW1vdmUgRmlsdGVyIHNvIHRoYXQgb24gVUkgZmlsdGVyIG9wdGlvbiBkb2Vzbid0IHNob3cgdXBcbmZ1bmN0aW9uIGNoZWNrRm9yTm9uZmlsdGVyYWJsZUVudGl0eVNldChvTURDQ2hhcnQ6IENoYXJ0LCBhTW9kZXM6IChDaGFydFAxM25Nb2RlIHwga2V5b2YgdHlwZW9mIENoYXJ0UDEzbk1vZGUpW10pOiB2b2lkIHtcblx0Y29uc3QgYkVudGl0eVNldEZpbGVyYWJsZSA9IG9NRENDaGFydFxuXHRcdD8uZ2V0TW9kZWwoKVxuXHRcdD8uZ2V0TWV0YU1vZGVsKClcblx0XHQ/LmdldE9iamVjdChgJHtvTURDQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpfUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2ApPy5GaWx0ZXJhYmxlO1xuXHRpZiAoYkVudGl0eVNldEZpbGVyYWJsZSAhPT0gdW5kZWZpbmVkICYmICFiRW50aXR5U2V0RmlsZXJhYmxlKSB7XG5cdFx0YU1vZGVzID0gYU1vZGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBcIkZpbHRlclwiKTtcblx0XHRvTURDQ2hhcnQuc2V0UDEzbk1vZGUoYU1vZGVzKTtcblx0fVxufVxuXG4vLyAgY2hlY2sgaWYgR3JvdXBhYmxlIC9BZ2dyZWdhdGFibGUgcHJvcGVydHkgaXMgcHJlc2VudCBvciBub3RcbmZ1bmN0aW9uIGNoZWNrUHJvcGVydHlUeXBlKFxuXHRhUHJvcGVydGllczogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW10sXG5cdHNQYXRoOiBzdHJpbmdcbik6IHRydWUgfCB1bmRlZmluZWQge1xuXHRpZiAoYVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFQcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoZWxlbWVudD8uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGggfHwgZWxlbWVudD8uUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5DaGFydERlbGVnYXRlLmZvcm1hdFRleHQgPSBmdW5jdGlvbiAob1ZhbHVlMTogc3RyaW5nLCBvVmFsdWUyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzVmFsdWUgPSB0aGlzLnR5cGVDb25maWc/LnR5cGVJbnN0YW5jZT8uZm9ybWF0VmFsdWUob1ZhbHVlMSwgXCJzdHJpbmdcIikgfHwgb1ZhbHVlMTtcblxuXHRpZiAob1ZhbHVlMikge1xuXHRcdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGhpcy50ZXh0Rm9ybWF0dGVyO1xuXG5cdFx0aWYgKFxuXHRcdFx0IW9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIHx8XG5cdFx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRGaXJzdFwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhvVmFsdWUyLCBzVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHNWYWx1ZSwgb1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9WYWx1ZTIgfHwgc1ZhbHVlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGlsbHVzdHJhdGVkIG1lc3NhZ2Ugd2l0aCBhIG5ldyB0aXRsZSwgZGVzY3JpcHRpb24sIGFuZCB0eXBlLlxuICogQHBhcmFtIG9DaGFydCBSZWZlcmVuY2UgdG8gdGhlIE1EQ19DaGFydFxuICogQHBhcmFtIGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbCBPYmplY3QgY29ycmVzcG9uZHMgdG8gdGhlIGlsbHVzdHJhdGVkIG1lc3NhZ2VcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5fdXBkYXRlSWxsdXN0cmF0ZWRNZXNzYWdlID0gZnVuY3Rpb24gKG9DaGFydDogQ2hhcnQsIGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbDogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTogdm9pZCB7XG5cdGNvbnN0IG5vRGF0YUNvbnRyb2wgPSBvQ2hhcnQuZ2V0Tm9EYXRhKCkgYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRub0RhdGFDb250cm9sLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC50aXRsZSk7XG5cdG5vRGF0YUNvbnRyb2wuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsLmRlc2NyaXB0aW9uKTtcblx0bm9EYXRhQ29udHJvbC5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC5pbGx1c3RyYXRpb25UeXBlIHx8IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhKTtcblx0bm9EYXRhQ29udHJvbC5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC5pbGx1c3RyYXRpb25TaXplIHx8IElsbHVzdHJhdGVkTWVzc2FnZVNpemUuQXV0byk7XG59O1xuXG4vKipcbiAqIFdlIHNldCB0aGUgaWxsdXN0cmF0ZWQgbWVzc2FnZSdzIHRpdGxlLCBkZXNjcmlwdGlvbiwgYW5kIHR5cGUgYmFzZWQgb24gZGlmZmVyZW50IGNvbmRpdGlvbnMuXG4gKiBAcGFyYW0gY2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBCaW5kaW5nSW5mb1xuICovXG5DaGFydERlbGVnYXRlLnNldENoYXJ0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlID0gZnVuY3Rpb24gKGNoYXJ0OiBDaGFydCwgYmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbChjaGFydCk7XG5cdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgPSB7fTtcblx0Y29uc3QgY29udmVydGVyVHlwZSA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2hhcnQpLmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZTtcblx0Y29uc3Qgb0NoYXJ0RmlsdGVySW5mbyA9IENoYXJ0VXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhjaGFydCk7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYmluZGluZ0luZm8ucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRpZiAoY2hhcnQuZGF0YShcIm11bHRpVmlld3NcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzLFxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZTogY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgPyBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLlNtYWxsIDogSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvXG5cdFx0fTtcblx0fTtcblxuXHRpZiAoY2hhcnQuZ2V0RmlsdGVyKCkgJiYgY29udmVydGVyVHlwZSAhPT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRpZiAob0NoYXJ0RmlsdGVySW5mby5zZWFyY2ggfHwgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCBvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aCkge1xuXHRcdC8vY2hlY2sgaWYgY2hhcnQgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHR9IGVsc2Uge1xuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhLFxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZTogSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5TbWFsbFxuXHRcdH07XG5cdH1cblxuXHRDaGFydERlbGVnYXRlLl91cGRhdGVJbGx1c3RyYXRlZE1lc3NhZ2UoY2hhcnQsIGlsbHVzdHJhdGVkSW5mb3JtYXRpb24pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRDaGFydERlbGVnYXRlLnNldENoYXJ0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcblx0Y29uc3Qgb0ZpbHRlciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob0NoYXJ0LmdldEZpbHRlcigpKTtcblx0Y29uc3QgbUNvbmRpdGlvbnMgPSBvQ2hhcnQuZ2V0Q29uZGl0aW9ucygpO1xuXHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHR9XG5cdGlmICghb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycyA9IHt9O1xuXHR9XG5cdGlmIChvRmlsdGVyKSB7XG5cdFx0Ly8gU2VhcmNoXG5cdFx0Y29uc3Qgb0luZm8gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKG9GaWx0ZXIgYXMgSUZpbHRlckNvbnRyb2wsIHt9KTtcblx0XHRjb25zdCBvQXBwbHlTdXBwb3J0ZWQgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9DaGFydC5kYXRhKFwiYXBwbHlTdXBwb3J0ZWRcIikpIGFzIENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdFx0aWYgKG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoICYmIG9JbmZvLnNlYXJjaCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ob0luZm8uc2VhcmNoKTtcblx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2gpIHtcblx0XHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdH1cblx0fVxuXHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IG1Db25kaXRpb25zID8gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlcnNJbmZvKG9GaWx0ZXIsIG1Db25kaXRpb25zKSA6IG51bGw7XG5cdGlmIChzUGFyYW1ldGVyUGF0aCkge1xuXHRcdG9CaW5kaW5nSW5mby5wYXRoID0gc1BhcmFtZXRlclBhdGg7XG5cdH1cblx0Y29uc3Qgb0ZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KTtcblx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvRmlsdGVySW5mby5iaW5kaW5nUGF0aDtcblx0fVxuXG5cdGlmIChvQmluZGluZ0luZm8ucGF0aCAmJiBvQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdG9CaW5kaW5nSW5mby5wYXRoID0gQ2hhcnRIZWxwZXIuZ2V0Q29sbGVjdGlvbk5hbWUob0JpbmRpbmdJbmZvLnBhdGgpO1xuXHR9XG5cblx0Ly8gcmVtb3ZlIHByZWZpeGVzIHNvIHRoYXQgZW50aXR5c2V0IHdpbGwgbWF0Y2ggd2l0aCB0aGUgcHJvcGVydHkgbmFtZXMgd2l0aCB0aGVzZSBmaWVsZFxuXHRpZiAob0ZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdG9GaWx0ZXJJbmZvLmZpbHRlcnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKGVsZW1lbnQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdChlbGVtZW50IGFzIHVua25vd24gYXMgeyBzUGF0aDogc3RyaW5nIH0pLnNQYXRoID0gKG9DaGFydC5nZXRQYXJlbnQoKSBhcyBDaGFydFR5cGUpLmdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhcblx0XHRcdFx0XHRlbGVtZW50LmdldFBhdGgoKSFcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRvQmluZGluZ0luZm8uZXZlbnRzID8/PSB7fTtcblx0b0JpbmRpbmdJbmZvLmV2ZW50cy5kYXRhUmVxdWVzdGVkID0gKG9DaGFydC5nZXRQYXJlbnQoKSBhcyBDaGFydFR5cGUpLm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkLmJpbmQob0NoYXJ0LmdldFBhcmVudCgpKTtcblxuXHRvQmluZGluZ0luZm8uZmlsdGVycyA9IG9GaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoID4gMCA/IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvRmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSkgOiB1bmRlZmluZWQ7XG5cdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0Q2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlcihvQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG59O1xuXG5DaGFydERlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBvTW9kZWwgPSB0aGlzLl9nZXRNb2RlbChvTURDQ2hhcnQpO1xuXHRsZXQgcENyZWF0ZVByb3BlcnR5SW5mb3M6IFByb21pc2U8UHJvcGVydHlJbmZvW10+O1xuXG5cdGlmICghb01vZGVsKSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSBuZXcgUHJvbWlzZTxPRGF0YU1vZGVsPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuXHRcdFx0b01EQ0NoYXJ0LmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHJlc29sdmVyOiByZXNvbHZlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTW9kZWxDb250ZXh0Q2hhbmdlIGFzIChldjogVUk1RXZlbnQpID0+IHZvaWQsXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0fSkudGhlbigob1JldHJpZXZlZE1vZGVsOiBPRGF0YU1vZGVsKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9SZXRyaWV2ZWRNb2RlbCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKG9NRENDaGFydCwgb01vZGVsKTtcblx0fVxuXG5cdHJldHVybiBwQ3JlYXRlUHJvcGVydHlJbmZvcy50aGVuKGZ1bmN0aW9uIChhUHJvcGVydGllczogUHJvcGVydHlJbmZvW10pIHtcblx0XHRpZiAob01EQ0NoYXJ0LmRhdGEpIHtcblx0XHRcdG9NRENDaGFydC5kYXRhKFwiJG1kY0NoYXJ0UHJvcGVydHlJbmZvXCIsIGFQcm9wZXJ0aWVzKTtcblx0XHRcdC8vIHN0b3JlIHRoZSBwcm9wZXJ0aWVzIHRvIGZldGNoIGR1cmluZyBwMTNuIGNhbGN1bGF0aW9uXG5cdFx0XHRNYWNyb3NEZWxlZ2F0ZVV0aWwuc2V0Q2FjaGVkUHJvcGVydGllcyhvTURDQ2hhcnQsIGFQcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xuXHR9KTtcbn07XG5mdW5jdGlvbiBvbk1vZGVsQ29udGV4dENoYW5nZSh0aGlzOiB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSwgb0V2ZW50OiBVSTVFdmVudDx7fSwgQ2hhcnQ+LCBvRGF0YTogeyByZXNvbHZlcjogRnVuY3Rpb24gfSk6IHZvaWQge1xuXHRjb25zdCBvTURDQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX2dldE1vZGVsKG9NRENDaGFydCk7XG5cblx0aWYgKG9Nb2RlbCkge1xuXHRcdG9NRENDaGFydC5kZXRhY2hNb2RlbENvbnRleHRDaGFuZ2Uob25Nb2RlbENvbnRleHRDaGFuZ2UgYXMgKGV2OiBVSTVFdmVudCkgPT4gdm9pZCk7XG5cdFx0b0RhdGEucmVzb2x2ZXIob01vZGVsKTtcblx0fVxufVxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYC8ke29NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpfWA7XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgYVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS9gKSwgb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBgKV0pO1xuXHRjb25zdCBhUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBhUmVzdWx0c1swXTtcblx0Y29uc3QgbUVudGl0eVNldEFubm90YXRpb25zID0gYVJlc3VsdHNbMV07XG5cdGNvbnN0IG1DdXN0b21BZ2dyZWdhdGVzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcImN1c3RvbUFnZ1wiKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdGdldEN1c3RvbUFnZ3JlZ2F0ZShtQ3VzdG9tQWdncmVnYXRlcywgb01EQ0NoYXJ0KTtcblx0bGV0IHNBbm5vO1xuXHRmb3IgKGNvbnN0IHNBbm5vS2V5IGluIG1FbnRpdHlTZXRBbm5vdGF0aW9ucykge1xuXHRcdGlmIChzQW5ub0tleS5zdGFydHNXaXRoKFwiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5DdXN0b21BZ2dyZWdhdGVcIikpIHtcblx0XHRcdHNBbm5vID0gc0Fubm9LZXkucmVwbGFjZShcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlI1wiLCBcIlwiKTtcblx0XHRcdGNvbnN0IGFBbm5vID0gc0Fubm8uc3BsaXQoXCJAXCIpO1xuXG5cdFx0XHRpZiAoYUFubm8ubGVuZ3RoID09IDIgJiYgYUFubm9bMV0gPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIikge1xuXHRcdFx0XHRtQ3VzdG9tQWdncmVnYXRlc1thQW5ub1swXV0gPSBtRW50aXR5U2V0QW5ub3RhdGlvbnNbc0Fubm9LZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcInRyYW5zQWdnXCIpKSBhcyBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHsgcHJvcGVydHlQYXRoOiBzdHJpbmc7IGFnZ3JlZ2F0aW9uTWV0aG9kOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cdD47XG5cdGNvbnN0IG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pj4gPSB7fTtcblx0Zm9yIChjb25zdCBzQWdncmVnYXRhYmxlIGluIG1UeXBlQWdncmVnYXRhYmxlUHJvcHMpIHtcblx0XHRjb25zdCBzUHJvcEtleSA9IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ucHJvcGVydHlQYXRoO1xuXHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NQcm9wS2V5XSA9IG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NQcm9wS2V5XSB8fCB7fTtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV1bbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5hZ2dyZWdhdGlvbk1ldGhvZF0gPSB7XG5cdFx0XHRuYW1lOiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLm5hbWUsXG5cdFx0XHRsYWJlbDogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5sYWJlbFxuXHRcdH07XG5cdH1cblx0Y29uc3QgdW5pdE9mTWVhc3VyZXMgPSBfZ2V0VW5pdE9mTWVhc3VyZXMob0VudGl0eVR5cGUsIG9NZXRhTW9kZWwsIHNFbnRpdHlTZXRQYXRoKTtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKHNLZXkuaW5kZXhPZihcIiRcIikgIT09IDApIHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gQ2hhcnRIZWxwZXIuZmV0Y2hDcml0aWNhbGl0eShvTWV0YU1vZGVsLCBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCkhKTtcblx0XHRcdENoYXJ0RGVsZWdhdGUuX2hhbmRsZVByb3BlcnR5KFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCksXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0bUVudGl0eVNldEFubm90YXRpb25zLFxuXHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wcyxcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXMsXG5cdFx0XHRcdGFQcm9wZXJ0aWVzLFxuXHRcdFx0XHRjcml0aWNhbGl0eSxcblx0XHRcdFx0dW5pdE9mTWVhc3VyZXNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIGdldEN1c3RvbUFnZ3JlZ2F0ZShtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9NRENDaGFydDogQ2hhcnQpOiB2b2lkIHtcblx0Y29uc3QgYURpbWVuc2lvbnM6IHN0cmluZ1tdID0gW10sXG5cdFx0YU1lYXN1cmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobUN1c3RvbUFnZ3JlZ2F0ZXMgJiYgT2JqZWN0LmtleXMobUN1c3RvbUFnZ3JlZ2F0ZXMpLmxlbmd0aCA+PSAxKSB7XG5cdFx0Y29uc3QgYUNoYXJ0SXRlbXMgPSBvTURDQ2hhcnQuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhQ2hhcnRJdGVtcykge1xuXHRcdFx0aWYgKGFDaGFydEl0ZW1zW2tleV0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0XHRcdGFEaW1lbnNpb25zLnB1c2goQ2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGFDaGFydEl0ZW1zW2tleV0uZ2V0UHJvcGVydHlLZXkoKSwgXCJncm91cGFibGVcIikpO1xuXHRcdFx0fSBlbHNlIGlmIChhQ2hhcnRJdGVtc1trZXldLmdldFR5cGUoKSA9PT0gXCJhZ2dyZWdhdGFibGVcIikge1xuXHRcdFx0XHRhTWVhc3VyZXMucHVzaChcblx0XHRcdFx0XHRDaGFydERlbGVnYXRlLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQoYUNoYXJ0SXRlbXNba2V5XS5nZXRQcm9wZXJ0eUtleSgpLCBcImFnZ3JlZ2F0YWJsZVwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhTWVhc3VyZXMuZmlsdGVyKGZ1bmN0aW9uICh2YWw6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gYURpbWVuc2lvbnMuaW5jbHVkZXModmFsKTtcblx0XHRcdH0pLmxlbmd0aCA+PSAxXG5cdFx0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJEaW1lbnNpb24gYW5kIE1lYXN1cmUgaGFzIHRoZSBzYW1lUHJvcGVydHkgQ29uZmlndXJlZFwiKTtcblx0XHR9XG5cdH1cbn1cblxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0luZm86IF9GaWx0ZXJSZXN0cmljdGlvbnMsXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4sXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHVua25vd24gfSxcblx0ZGF0YVR5cGU6IHN0cmluZ1xuKTogb2JqZWN0W10ge1xuXHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllczogb2JqZWN0W10gPSBbXTtcblx0aWYgKE9iamVjdC5rZXlzKG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzKS5pbmNsdWRlcyhzS2V5KSkge1xuXHRcdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XSkge1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLm5hbWUsXG5cdFx0XHRcdGxhYmVsOlxuXHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLmxhYmVsIHx8XG5cdFx0XHRcdFx0YCR7b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdfSAoJHtzQWdncmVnYXRhYmxlfSlgIHx8XG5cdFx0XHRcdFx0YCR7c0tleX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCxcblx0XHRcdFx0c29ydGFibGU6IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSA/IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XS5zb3J0YWJsZSA6IHRydWUsXG5cdFx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdHBhdGg6IHNLZXksXG5cdFx0XHRcdGRhdGFUeXBlOiBkYXRhVHlwZSxcblx0XHRcdFx0YWdncmVnYXRpb25NZXRob2Q6IHNBZ2dyZWdhdGFibGUsXG5cdFx0XHRcdG1heENvbmRpdGlvbnM6IGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0/LltzS2V5XT8uWzBdKSA/IC0xIDogMSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdGRhdGFwb2ludDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR1bml0UGF0aDpcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRmb3IgKGNvbnN0IHNDdXN0b20gaW4gbUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGlmIChzQ3VzdG9tID09PSBzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9JdGVtID0gbWVyZ2Uoe30sIG1DdXN0b21BZ2dyZWdhdGVzW3NDdXN0b21dIGFzIG9iamVjdCwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0cGF0aDogc0N1c3RvbSxcblx0XHRcdFx0XHRkYXRhVHlwZTogZGF0YVR5cGUsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsLCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdFx0dW5pdFBhdGg6XG5cdFx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHRcdChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuVW5pdFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKG9JdGVtKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGFBZ2dyZWdhdGVQcm9wZXJ0aWVzO1xufTtcbkNoYXJ0RGVsZWdhdGUucmViaW5kID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQsIG9CaW5kaW5nSW5mbzogUHJvcGVydHlCaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCBzU2VhcmNoID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHR9XG5cblx0QmFzZUNoYXJ0RGVsZWdhdGUucmViaW5kKG9NRENDaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxuXG5cdG9NRENDaGFydC5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcbn07XG5DaGFydERlbGVnYXRlLl9zZXRDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvSW5uZXJDaGFydDogc2FwQ2hhcnQpOiB2b2lkIHtcblx0Y29uc3Qgb0NoYXJ0QVBJID0gb01EQ0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZTtcblx0b0lubmVyQ2hhcnQuc2V0Vml6UHJvcGVydGllcyhvTURDQ2hhcnQuZGF0YShcInZpelByb3BlcnRpZXNcIikpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hTZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRGVzZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRHJpbGxlZFVwKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cblx0b0lubmVyQ2hhcnQuc2V0U2VsZWN0aW9uTW9kZSgob01EQ0NoYXJ0LmdldFBheWxvYWQoKSBhcyB7IHNlbGVjdGlvbk1vZGU6IHN0cmluZyB9KS5zZWxlY3Rpb25Nb2RlLnRvVXBwZXJDYXNlKCkgYXMgU2VsZWN0aW9uTW9kZSk7XG5cdEJhc2VDaGFydERlbGVnYXRlLl9zZXRDaGFydChvTURDQ2hhcnQsIG9Jbm5lckNoYXJ0KTtcbn07XG5DaGFydERlbGVnYXRlLl9nZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KTogUHJvcGVydHlCaW5kaW5nSW5mbyB7XG5cdGlmICh0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCk7XG5cdH1cblxuXHRjb25zdCBvTWV0YWRhdGFJbmZvID0gKG9NRENDaGFydC5nZXREZWxlZ2F0ZSgpIGFzIHsgcGF5bG9hZDogdW5rbm93biB9KS5wYXlsb2FkIGFzIHsgcGFyYW1ldGVyczogb2JqZWN0OyBjaGFydENvbnRleHRQYXRoOiBzdHJpbmcgfTtcblx0Y29uc3Qgb1BhcmFtcyA9IG1lcmdlKHt9LCBvTWV0YWRhdGFJbmZvLnBhcmFtZXRlcnMsIHtcblx0XHRlbnRpdHlTZXQ6IG9NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHBhdGg6IG9NZXRhZGF0YUluZm8uY2hhcnRDb250ZXh0UGF0aCxcblx0XHRldmVudHM6IHtcblx0XHRcdGRhdGFSZXF1ZXN0ZWQ6IChvTURDQ2hhcnQuZ2V0UGFyZW50KCkgYXMgQ2hhcnRUeXBlKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9NRENDaGFydC5nZXRQYXJlbnQoKSlcblx0XHR9LFxuXHRcdHBhcmFtZXRlcnM6IG9QYXJhbXNcblx0fTtcbn07XG5DaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvTURDQ2hhcnRJdGVtOiBDaGFydEl0ZW0pOiB2b2lkIHtcblx0QmFzZUNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0LmNhbGwodGhpcywgb01EQ0NoYXJ0LCBvTURDQ2hhcnRJdGVtKTtcblx0aWYgKG9NRENDaGFydEl0ZW0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSB0aGlzLmdldElubmVyQ2hhcnQob01EQ0NoYXJ0KTtcblx0XHRvSW5uZXJDaGFydC5maXJlRGVzZWxlY3REYXRhKCk7XG5cdH1cbn07XG5DaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5OiBTb3J0UmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0YklzVHJhbnNBZ2dyZWdhdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRpZiAoYklzVHJhbnNBZ2dyZWdhdGUpIHtcblx0XHRpZiAob01EQ0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKS50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5ID8gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5LnNvcnRhYmxlIDogdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eSA/IHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eS5zb3J0YWJsZSA6IHRydWU7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlciA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0aWYgKG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikudG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb0JpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gW107XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycz8uYUZpbHRlcnM/LnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgY2hhcnQgZm9yIHRoZSBtZWFzdXJlIG9yIGRpbWVuc2lvbi5cbiAqIEZvciBzdGFuZGFyZCBjYXNlcywgdGhpcyBpcyBqdXN0IHRoZSBJRCBvZiB0aGUgcHJvcGVydHkuXG4gKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGFub3RoZXIgSUQgaW50ZXJuYWxseSBpbnNpZGUgdGhlIGNoYXJ0IChlLmcuIG9uIGR1cGxpY2F0ZSBwcm9wZXJ0eSBJRHMpIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAqIEluIHRoaXMgY2FzZSwgPGNvZGU+Z2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQ8L2NvZGU+IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGFzIHdlbGwuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBraW5kIFR5cGUgb2YgdGhlIHByb3BlcnR5IChtZWFzdXJlIG9yIGRpbWVuc2lvbilcbiAqIEByZXR1cm5zIEludGVybmFsIElEIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1hcHMgYW4gaWQgb2YgYW4gaW50ZXJuYWwgY2hhcnQgZGltZW5zaW9uIG9yIG1lYXN1cmUgJiB0eXBlIG9mIGEgcHJvcGVydHkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZW50cnkuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiBpbnRlcm5hbCBjaGFydCBtZWFzdXJlIG9yIGRpbWVuc2lvblxuICogQHBhcmFtIGtpbmQgVGhlIGtpbmQgb2YgcHJvcGVydHkgdGhhdCBpcyB1c2VkXG4gKiBAcGFyYW0gbWRjQ2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEByZXR1cm5zIFByb3BlcnR5SW5mbyBvYmplY3RcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgbWRjQ2hhcnQ6IENoYXJ0KTogc3RyaW5nIHtcblx0cmV0dXJuIG1kY0NoYXJ0LmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIgKyBuYW1lKTtcbn07XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgY2hhcnQncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG4gKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBwZXJzb25hbGl6YXRpb24gb2YgdGhlIGNoYXJ0IGZpbHRlclxuICovXG5DaGFydERlbGVnYXRlLmdldEZpbHRlckRlbGVnYXRlID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdHtcblx0XHRcdGFwaVZlcnNpb246IDJcblx0XHR9LFxuXHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdHtcblx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RWxlbWVudCB8IHVuZGVmaW5lZD4ge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gQ2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKHNQcm9wZXJ0eUluZm9OYW1lLCBcImdyb3VwYWJsZVwiKTtcblx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBwcm9wKS50aGVuKChvRmlsdGVySXRlbSkgPT4ge1xuXHRcdFx0XHRcdChvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKT8uYmluZFByb3BlcnR5KFwiY29uZGl0aW9uc1wiLCB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIiRmaWx0ZXJzPi9jb25kaXRpb25zL1wiICsgc1Byb3BlcnR5SW5mb05hbWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQob0ZpbHRlckl0ZW0gYXMgdW5rbm93biBhcyBJdGVtKT8uc2V0UHJvcGVydHlLZXkoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VB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
|
|
645
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydERlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiQmFzZUNoYXJ0RGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiX2xvYWRDaGFydCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9oYW5kbGVQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5IiwidW5pdE9mTWVhc3VyZXMiLCJvQXBwbHlTdXBwb3J0ZWQiLCJDb21tb25IZWxwZXIiLCJwYXJzZUN1c3RvbURhdGEiLCJkYXRhIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiRmV0Y2hGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsInByb3BlcnR5RmlsdGVyYWJsZURhdGEiLCJnZXRGaWx0ZXJhYmxlRGF0YSIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwia2V5cyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsIm9PYmoiLCJnZXRPYmplY3QiLCJnZXRQYXRoIiwic0tleSIsImFNb2RlcyIsImdldFAxM25Nb2RlIiwiY2hlY2tGb3JOb25maWx0ZXJhYmxlRW50aXR5U2V0IiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImNoZWNrUHJvcGVydHlUeXBlIiwiYkFnZ3JlZ2F0YWJsZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInByb3BlcnR5RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYUFnZ3JlZ2F0ZVByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSIsIiRUeXBlIiwiZm9yRWFjaCIsIm9BZ2dyZWdhdGVQcm9wZXJ0eSIsInBhdGgiLCJwdXNoIiwiYUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJhZGRQcm9wZXJ0eVRvQ2hhcnQiLCJjaGVja1Byb3BlcnR5RmlsdGVyYWJsZSIsInVuZGVmaW5lZCIsInNOYW1lIiwic1RleHRQcm9wZXJ0eSIsIiRQYXRoIiwiYklzTmF2aWdhdGlvblRleHQiLCJMb2ciLCJlcnJvciIsImluZGV4T2YiLCJfZ2V0U29ydGFibGUiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0VW5pdE9mTWVhc3VyZXMiLCJlbnRpdHlUeXBlIiwiZW50aXR5U2V0UGF0aCIsImNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJ1bml0IiwiaXNGaWx0ZXJhYmxlIiwib0ZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJpc1NvcnRhYmxlIiwiYklzR3JvdXBhYmxlIiwiYklzQWdncmVnYXRhYmxlIiwiYklzSGlkZGVuIiwiY2hhcnRSb2xlIiwiQ2hhcnRJdGVtUm9sZVR5cGUiLCJjYXRlZ29yeSIsImNoYXJ0RGF0YSIsIkFycmF5IiwiaXNBcnJheSIsInJlY29yZCIsInNwbGl0IiwicG9wIiwidG9Mb3dlckNhc2UiLCJsYWJlbCIsInRvU3RyaW5nIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiYWdncmVnYXRhYmxlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJyb2xlIiwiY3JpdGljYWxpdHkiLCJkYXRhVHlwZSIsInZpc2libGUiLCJ0ZXh0UHJvcGVydHkiLCJ0ZXh0Rm9ybWF0dGVyIiwidGltZVVuaXRUeXBlIiwiX2dldFRpbWVUeXBlIiwiZm9ybWF0T3B0aW9ucyIsInN0eWxlIiwia2V5IiwiVGltZVVuaXRUeXBlIiwiRGF0ZSIsImZpc2NhbHllYXIiLCJmaXNjYWx5ZWFycGVyaW9kIiwieWVhcm1vbnRoIiwieWVhcnF1YXJ0ZXIiLCJ5ZWFyd2VlayIsInllYXJtb250aGRheSIsImJFbnRpdHlTZXRGaWxlcmFibGUiLCJnZXRNZXRhTW9kZWwiLCJGaWx0ZXJhYmxlIiwiZmlsdGVyIiwiaXRlbSIsInNldFAxM25Nb2RlIiwiZWxlbWVudCIsIlByb3BlcnR5IiwiZm9ybWF0VGV4dCIsIm9WYWx1ZTEiLCJvVmFsdWUyIiwic1ZhbHVlIiwidHlwZUNvbmZpZyIsInR5cGVJbnN0YW5jZSIsImZvcm1hdFZhbHVlIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsIl91cGRhdGVJbGx1c3RyYXRlZE1lc3NhZ2UiLCJvQ2hhcnQiLCJpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwiLCJub0RhdGFDb250cm9sIiwiZ2V0Tm9EYXRhIiwic2V0VGl0bGUiLCJ0aXRsZSIsInNldERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRJbGx1c3RyYXRpb25UeXBlIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb0VudHJpZXMiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJBdXRvIiwic2V0Q2hhcnROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UiLCJjaGFydCIsImJpbmRpbmdJbmZvIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiIsImNvbnZlcnRlclR5cGUiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsIm9DaGFydEZpbHRlckluZm8iLCJDaGFydFV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInN1ZmZpeFJlc291cmNlS2V5Iiwic3RhcnRzV2l0aCIsInN1YnN0ciIsImdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzIiwiZ2V0VGV4dCIsIk5vRmlsdGVyUmVzdWx0cyIsIlNtYWxsIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsInVwZGF0ZUJpbmRpbmdJbmZvIiwib0JpbmRpbmdJbmZvIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJvRmlsdGVyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwicGFyYW1ldGVycyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwiJHNlYXJjaCIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJzUGFyYW1ldGVyUGF0aCIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlcnNJbmZvIiwib0ZpbHRlckluZm8iLCJiaW5kaW5nUGF0aCIsIkNoYXJ0SGVscGVyIiwiZ2V0Q29sbGVjdGlvbk5hbWUiLCJnZXRQYXJlbnQiLCJnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMiLCJfcmVtb3ZlU2libGluZ0VudGl0eUZvckRyYWZ0Q2hhcnQiLCJldmVudHMiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJiaW5kIiwiRmlsdGVyIiwiYW5kIiwic29ydGVyIiwiZ2V0U29ydGVycyIsIl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyIiwiZmV0Y2hQcm9wZXJ0aWVzIiwib01vZGVsIiwiX2dldE1vZGVsIiwicENyZWF0ZVByb3BlcnR5SW5mb3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsInJlc29sdmVyIiwib25Nb2RlbENvbnRleHRDaGFuZ2UiLCJ0aGVuIiwib1JldHJpZXZlZE1vZGVsIiwiX2NyZWF0ZVByb3BlcnR5SW5mb3MiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwib0V2ZW50Iiwib0RhdGEiLCJnZXRTb3VyY2UiLCJkZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJpdGVtcyIsImdldEZpbHRlcnMiLCJmaWx0ZXJlZENoaWxkcmVuIiwic0VudGl0eVNldFBhdGgiLCJvTWV0YU1vZGVsIiwiYVJlc3VsdHMiLCJhbGwiLCJyZXF1ZXN0T2JqZWN0Iiwib0VudGl0eVR5cGUiLCJnZXRDdXN0b21BZ2dyZWdhdGUiLCJzQW5ubyIsInNBbm5vS2V5IiwicmVwbGFjZSIsImFBbm5vIiwibVR5cGVBZ2dyZWdhdGFibGVQcm9wcyIsInNBZ2dyZWdhdGFibGUiLCJzUHJvcEtleSIsInByb3BlcnR5UGF0aCIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiZmV0Y2hDcml0aWNhbGl0eSIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwiYUNoYXJ0SXRlbXMiLCJnZXRJdGVtcyIsImdldFR5cGUiLCJnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWwiLCJheGlzMSIsImRhdGFwb2ludCIsInVuaXRQYXRoIiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0Iiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImZpcmVFdmVudCIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsIm9QYXJhbXMiLCJlbnRpdHlTZXQiLCJjaGFydENvbnRleHRQYXRoIiwicmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0Iiwib01EQ0NoYXJ0SXRlbSIsImNhbGwiLCJmaXJlRGVzZWxlY3REYXRhIiwic29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5IiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiYUZpbHRlcnMiLCJraW5kIiwiZ2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQiLCJtZGNDaGFydCIsImdldFByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHkiLCJnZXRGaWx0ZXJEZWxlZ2F0ZSIsIkZpbHRlckJhckRlbGVnYXRlIiwiYWRkSXRlbSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJwcm9wIiwib0ZpbHRlckl0ZW0iLCJiaW5kUHJvcGVydHkiLCJzZXRQcm9wZXJ0eUtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHNhcENoYXJ0IGZyb20gXCJzYXAvY2hhcnQvQ2hhcnRcIjtcbmltcG9ydCBUaW1lVW5pdFR5cGUgZnJvbSBcInNhcC9jaGFydC9UaW1lVW5pdFR5cGVcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uTW9kZSB9IGZyb20gXCJzYXAvY2hhcnQvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0QXBwbHlTdXBwb3J0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL2ZpbHRlci9GaWx0ZXJSZXN0cmljdGlvbnNcIjtcbmltcG9ydCBGZXRjaEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlLFxuXHRTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdFNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJhYmxlRGF0YSwgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IE1hY3Jvc0RlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydEhlbHBlclwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgVUk1RWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIENoYXJ0SXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9DaGFydEl0ZW1cIjtcbmltcG9ydCB0eXBlIENoYXJ0UHJvcGVydHkgZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvQ2hhcnRQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgSXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9JdGVtXCI7XG5pbXBvcnQgQ2hhcnRJdGVtUm9sZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvQ2hhcnRJdGVtUm9sZVR5cGVcIjtcbmltcG9ydCB0eXBlIENoYXJ0UDEzbk1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvQ2hhcnRQMTNuTW9kZVwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEJhc2VDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3ZpekNoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBNZXRhTW9kZWxFbnVtIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRUeXBlIGZyb20gXCIuLi9DaGFydFwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyRGVsZWdhdGVcIjtcblxuY29uc3QgQ2hhcnREZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEJhc2VDaGFydERlbGVnYXRlKTtcbkJhc2VDaGFydERlbGVnYXRlLmFwaVZlcnNpb24gPSAyO1xuQ2hhcnREZWxlZ2F0ZS5fbG9hZENoYXJ0ID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRhd2FpdCBMaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC5jaGFydFwiIH0pO1xuXHRyZXR1cm4gQmFzZUNoYXJ0RGVsZWdhdGUuX2xvYWRDaGFydCgpO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRtRW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4sXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YVByb3BlcnRpZXM6IENoYXJ0UHJvcGVydHlbXSxcblx0c0NyaXRpY2FsaXR5OiBzdHJpbmcsXG5cdHVuaXRPZk1lYXN1cmVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSkgYXMgQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhtRW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBtZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IG9NRENDaGFydC5kYXRhKFwiZW50aXR5VHlwZVwiKTtcblx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlUeXBlUGF0aCkpO1xuXHRjb25zdCBmaWx0ZXJSZXN0cmljdGlvbnM6IEZpbHRlclJlc3RyaWN0aW9ucyA9IEZldGNoRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdGRhdGFNb2RlbCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cblx0KTtcblx0Y29uc3QgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YTogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT4gPSB7fTtcblx0Z2V0RmlsdGVyYWJsZURhdGEoXG5cdFx0cHJvcGVydHlGaWx0ZXJhYmxlRGF0YSxcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnMuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMsXG5cdFx0T2JqZWN0LmtleXMoZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucylcblx0KTtcblx0Y29uc3Qgb09iaiA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0T2JqZWN0KG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE9iamVjdChgJHtvQ29udGV4dC5nZXRQYXRoKCl9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdGNvbnN0IGFNb2RlcyA9IG9NRENDaGFydC5nZXRQMTNuTW9kZSgpO1xuXHRjaGVja0Zvck5vbmZpbHRlcmFibGVFbnRpdHlTZXQob01EQ0NoYXJ0LCBhTW9kZXMpO1xuXG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29Db250ZXh0LmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiwgbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkpO1xuXG5cdFx0Y29uc3QgYUdyb3VwYWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdFx0bGV0IGJHcm91cGFibGUgPSBhR3JvdXBhYmxlUHJvcGVydGllcyA/IGNoZWNrUHJvcGVydHlUeXBlKGFHcm91cGFibGVQcm9wZXJ0aWVzLCBzUGF0aCkgOiBmYWxzZTtcblx0XHRsZXQgYkFnZ3JlZ2F0YWJsZSA9IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID8gY2hlY2tQcm9wZXJ0eVR5cGUoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMsIHNQYXRoKSA6IGZhbHNlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcyk7XG5cblx0XHRpZiAoIWFHcm91cGFibGVQcm9wZXJ0aWVzIHx8IChhR3JvdXBhYmxlUHJvcGVydGllcyAmJiAhYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoKSkge1xuXHRcdFx0Ykdyb3VwYWJsZSA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIl07XG5cdFx0fVxuXHRcdGlmICghYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgfHwgKGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmICFhQWdncmVnYXRhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiQWdncmVnYXRhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9wZXJ0eUZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob0NvbnRleHQpO1xuXHRcdGlmIChiQWdncmVnYXRhYmxlKSB7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllcyA9IENoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUoXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0c0tleSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRcdFx0c29ydFJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHRcdFx0b09iai4kVHlwZVxuXHRcdFx0KTtcblx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9BZ2dyZWdhdGVQcm9wZXJ0eTogQ2hhcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHQvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSB0aGVuIGRvIG5vdCBhZGQgaXQgdG8gbWVhc3VyZXNcblx0XHRcdFx0aWYgKCF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhvQWdncmVnYXRlUHJvcGVydHkucGF0aCkpIHtcblx0XHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly9BZGQgdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlZCBwcm9wZXJ0aWVzIHRvIGNoYXJ0IHByb3BlcnRpZXNcblx0XHRcdGlmIChhTW9kZXMgJiYgYU1vZGVzLmluY2x1ZGVzKFwiRmlsdGVyXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGFLbm93bkFnZ3JlZ2F0YWJsZVByb3BzID0gT2JqZWN0LmtleXMobUtub3duQWdncmVnYXRhYmxlUHJvcHMpO1xuXHRcdFx0XHRjb25zdCBhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcyA9IGFHcm91cGFibGVQcm9wZXJ0aWVzPy5tYXAoXG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSkgPT4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gQWRkIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZWQgcHJvcGVydHkgdG8gY2hhcnQgc28gdGhhdCBpbiB0aGUgZmlsdGVyIGRyb3Bkb3duIGl0J3MgdmlzaWJsZVxuXHRcdFx0XHQvLyBBbHNvIG1hcmsgdmlzaWJpbGl0eSBmYWxzZSBhcyB0aGlzIHByb3BlcnR5IHNob3VsZCBub3QgY29tZSB1cCBpbiB1bmRlciBjaGFydCBzZWN0aW9uIG9mIHBlcnNvbmFsaXphdGlvbiBkaWFsb2dcblx0XHRcdFx0Ly8gaWYgYSBwcm9wZXJ0eSBpcyBVT00gdGhlbiBkbyBub3QgYWRkIGl0IHRvIG1lYXN1cmVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhS25vd25BZ2dyZWdhdGFibGVQcm9wcy5pbmNsdWRlcyhzS2V5KSAmJlxuXHRcdFx0XHRcdCFhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcz8uaW5jbHVkZXMoc0tleSkgJiZcblx0XHRcdFx0XHQhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YVByb3BlcnRpZXMgPSBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHNLZXksXG5cdFx0XHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgPyBmYWxzZSA6IGNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlKHNLZXksIHByb3BlcnR5RmlsdGVyYWJsZSwgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YSksXG5cdFx0XHRcdFx0XHRmaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0XHRcdFx0XHRmYWxzZSwgLy8gJ2lzU29ydGFibGUnIGlzIHNldCB0byAnZmFsc2UnIHRvIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBzb3J0IHF1ZXVlIGZvciBhZ2dyZWdhdGFibGUgcHJvcGVydGllcy4gVGhlc2UgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBxdWV1ZWQgZm9yIHNvcnRpbmcgaW4gdGhlICdjcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlJyBtZXRob2QuXG5cdFx0XHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdFx0XHRzQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0XHRvT2JqLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJHcm91cGFibGUpIHtcblx0XHRcdGNvbnN0IHNOYW1lID0gc0tleSB8fCBcIlwiLFxuXHRcdFx0XHRzVGV4dFByb3BlcnR5ID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuVGV4dF1cblx0XHRcdFx0XHQ/IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlRleHRdLiRQYXRoXG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0bGV0IGJJc05hdmlnYXRpb25UZXh0ID0gZmFsc2U7XG5cdFx0XHRpZiAoc05hbWUgJiYgc05hbWUuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gUHJvcGVydHk6ICR7c05hbWV9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNUZXh0UHJvcGVydHkgJiYgc1RleHRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gVGV4dCBQcm9wZXJ0eTogJHtzVGV4dFByb3BlcnR5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdGJJc05hdmlnYXRpb25UZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFQcm9wZXJ0aWVzID0gYWRkUHJvcGVydHlUb0NoYXJ0KFxuXHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0c0tleSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlKHNLZXksIHByb3BlcnR5RmlsdGVyYWJsZSwgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YSlcblx0XHRcdFx0XHQ/IChjdXN0b21BZ2dyZWdhdGVzLmluY2x1ZGVzKHNLZXkpICYmIHVuaXRPZk1lYXN1cmVzLmluY2x1ZGVzKHNLZXkpKSB8fCAhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSlcblx0XHRcdFx0XHQ6IGZhbHNlLCAvLyBVT00gcHJvcGVydHkgc2hvdWxkIGJlIGZpbHRlcmFibGUgaWYgaXQgaXMgbWFya2VkIGFzIGN1c3RvbSBhZ2dyZWdhdGUgYXMgd2VsbCBhcyBncm91cGFibGVcblx0XHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdFx0XHRDaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZShvTURDQ2hhcnQsIHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSwgZmFsc2UpLFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdHNDcml0aWNhbGl0eSxcblx0XHRcdFx0b09iaixcblx0XHRcdFx0IWN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgfHwgKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgJiYgdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSkpID8gdHJ1ZSA6IGZhbHNlLCAvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSwgbWFya2VkIGFzIGN1c3RvbSBhZ2dyZWdhdGUgYW5kIGdyb3VwYWJsZSB0aGVuIHNob3cgaXQgaW4gZGltZW5zaW9uc1xuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YklzTmF2aWdhdGlvblRleHRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIHByb3BlcnRpZXMgd2hpY2ggYXJlIG1hcmtlZCBhcyB1bml0IG9mIG1lYXN1cmUuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSBjaGFydFxuICogQHBhcmFtIG1ldGFNb2RlbCAgTWV0YU1vZGVsXG4gKiBAcGFyYW0gZW50aXR5U2V0UGF0aCBFbnRpdHkgc2V0IHBhdGhcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXQgb2YgbWVhc3VyZXNcbiAqL1xuZnVuY3Rpb24gX2dldFVuaXRPZk1lYXN1cmVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Y29uc3QgdW5pdE9mTWVhc3VyZXM6IHN0cmluZ1tdID0gW107XG5cdGZvciAoY29uc3Qgc0tleSBpbiBlbnRpdHlUeXBlKSB7XG5cdFx0Y29uc3QgY29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtlbnRpdHlTZXRQYXRofS8ke3NLZXl9YCk7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7Y29udGV4dD8uZ2V0UGF0aCgpfUBgKTtcblx0XHRjb25zdCB1bml0ID1cblx0XHRcdChwcm9wZXJ0eUFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdChwcm9wZXJ0eUFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aDtcblx0XHRpZiAodW5pdCAmJiAhdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXModW5pdCkpIHtcblx0XHRcdHVuaXRPZk1lYXN1cmVzLnB1c2godW5pdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bml0T2ZNZWFzdXJlcztcbn1cblxuLy8gY3JlYXRlIHByb3BlcnRpZXMgZm9yIGNoYXJ0XG5mdW5jdGlvbiBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdGFQcm9wZXJ0aWVzOiBDaGFydFByb3BlcnR5W10sXG5cdHNLZXk6IHN0cmluZyxcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdGlzRmlsdGVyYWJsZTogYm9vbGVhbixcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9ucyxcblx0aXNTb3J0YWJsZTogYm9vbGVhbixcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c0NyaXRpY2FsaXR5OiBzdHJpbmcsXG5cdG9PYmo6IE1ldGFNb2RlbFByb3BlcnR5LFxuXHRiSXNHcm91cGFibGU6IGJvb2xlYW4sXG5cdGJJc0FnZ3JlZ2F0YWJsZTogYm9vbGVhbixcblx0YklzTmF2aWdhdGlvblRleHQ/OiBib29sZWFuLFxuXHRiSXNIaWRkZW4/OiBib29sZWFuXG4pOiBDaGFydFByb3BlcnR5W10ge1xuXHRsZXQgY2hhcnRSb2xlID0gQ2hhcnRJdGVtUm9sZVR5cGUuY2F0ZWdvcnk7XG5cdGNvbnN0IGNoYXJ0RGF0YSA9IG9NRENDaGFydC5kYXRhKFwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlXCIpO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KGNoYXJ0RGF0YSkpIHtcblx0XHRjaGFydERhdGEuZm9yRWFjaCgocmVjb3JkOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4ge1xuXHRcdFx0aWYgKHJlY29yZFtzS2V5XSkge1xuXHRcdFx0XHRjaGFydFJvbGUgPSByZWNvcmRbc0tleV0uc3BsaXQoXCIvXCIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8IGNoYXJ0Um9sZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogQ2hhcnRQcm9wZXJ0eSA9IHtcblx0XHRuYW1lOiBcIl9mZV9ncm91cGFibGVfXCIgKyBzS2V5LFxuXHRcdGxhYmVsOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIl0/LnRvU3RyaW5nKCkgfHwgc0tleSxcblx0XHRzb3J0YWJsZTogaXNTb3J0YWJsZSxcblx0XHRmaWx0ZXJhYmxlOiBpc0ZpbHRlcmFibGUsXG5cdFx0Z3JvdXBhYmxlOiBiSXNHcm91cGFibGUsXG5cdFx0YWdncmVnYXRhYmxlOiBiSXNBZ2dyZWdhdGFibGUsXG5cdFx0bWF4Q29uZGl0aW9uczogaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXT8uW3NLZXldPy5bMF0pID8gLTEgOiAxLFxuXHRcdHBhdGg6IHNLZXksXG5cdFx0cm9sZTogY2hhcnRSb2xlLCAvL3N0YW5kYXJkLCBub3JtYWxseSB0aGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBmcm9tIFVJLkNoYXJ0IGFubm90YXRpb25cblx0XHRjcml0aWNhbGl0eTogc0NyaXRpY2FsaXR5LCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0ZGF0YVR5cGU6IG9PYmouJFR5cGUsXG5cdFx0dmlzaWJsZTogYklzSGlkZGVuID8gIWJJc0hpZGRlbiA6IHRydWUsXG5cdFx0dGV4dFByb3BlcnR5OlxuXHRcdFx0IWJJc05hdmlnYXRpb25UZXh0ICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdD8gKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KS4kUGF0aFxuXHRcdFx0XHQ6IG51bGwsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHR0ZXh0Rm9ybWF0dGVyOiAob1Byb3BlcnR5QW5ub3RhdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW1xuXHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJcblx0XHRdIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PlxuXHR9O1xuXHQvLyB0aW1lVW5pdFR5cGUgPSB1bmRlZmluZWQgLT4gY3Jhc2hlcyB0aGUgY2hhcnQuIHRoZXJlZm9yZTpcblx0Y29uc3QgdGltZVVuaXRUeXBlID0gQ2hhcnREZWxlZ2F0ZS5fZ2V0VGltZVR5cGUob09iaiwgb1Byb3BlcnR5QW5ub3RhdGlvbnMpO1xuXHRpZiAodGltZVVuaXRUeXBlKSBvUHJvcGVydHkudGltZVVuaXRUeXBlID0gdGltZVVuaXRUeXBlO1xuXG5cdGlmIChvT2JqLiRUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8IG9PYmouJFR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0c3dpdGNoIChvT2JqLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdG9Qcm9wZXJ0eS5mb3JtYXRPcHRpb25zID0geyBzdHlsZTogXCJtZWRpdW0vc2hvcnRcIiB9O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdG9Qcm9wZXJ0eS5mb3JtYXRPcHRpb25zID0geyBzdHlsZTogXCJzaG9ydFwiIH07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YVByb3BlcnRpZXMucHVzaChvUHJvcGVydHkpO1xuXHRyZXR1cm4gYVByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwcm9wZXJ0eSBpcyBmaWx0ZXJhYmxlIG9yIG5vdC5cbiAqIEBwYXJhbSBrZXkgUHJvcGVydHkga2V5XG4gKiBAcGFyYW0gcHJvcGVydHlGaWx0ZXJhYmxlICBGaWx0ZXIgcmVzdHJpY3Rpb25zXG4gKiBAcGFyYW0gcHJvcGVydHlGaWx0ZXJhYmxlRGF0YVxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBmb3IgYSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BlcnR5RmlsdGVyYWJsZShcblx0a2V5OiBzdHJpbmcsXG5cdHByb3BlcnR5RmlsdGVyYWJsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRwcm9wZXJ0eUZpbHRlcmFibGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlPlxuKTogYm9vbGVhbiB7XG5cdGlmIChwcm9wZXJ0eUZpbHRlcmFibGUgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eUZpbHRlcmFibGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHQvLyBwYXRoIGJhc2VkIGZpbHRlcmFibGUgaXMgeWV0IHRvIGhhbmRsZSBoZXJlIGluIGZ1dHVyZVxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhPy5ba2V5XT8uZmlsdGVyYWJsZSA/PyB0cnVlO1xuXHR9XG59XG5cbkNoYXJ0RGVsZWdhdGUuX2dldFRpbWVUeXBlID0gZnVuY3Rpb24gKG9PYmo6IE1ldGFNb2RlbFByb3BlcnR5LCBvUHJvcGVydHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBUaW1lVW5pdFR5cGUgfCB1bmRlZmluZWQge1xuXHRzd2l0Y2ggKG9PYmouJFR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUuRGF0ZTtcblx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0aWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcl0pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS5maXNjYWx5ZWFyO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJQZXJpb2RdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUuZmlzY2FseWVhcnBlcmlvZDtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhclllYXJNb250aF0pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS55ZWFybW9udGg7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyUXVhcnRlcl0pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS55ZWFycXVhcnRlcjtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhclllYXJXZWVrXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLnllYXJ3ZWVrO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyRGF0ZV0pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS55ZWFybW9udGhkYXk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLy8gSWYgZW50aXR5c2V0IGlzIG5vbiBmaWx0ZXJhYmxlLHRoZW4gZnJvbSBwMTNuIG1vZGVzIHJlbW92ZSBGaWx0ZXIgc28gdGhhdCBvbiBVSSBmaWx0ZXIgb3B0aW9uIGRvZXNuJ3Qgc2hvdyB1cFxuZnVuY3Rpb24gY2hlY2tGb3JOb25maWx0ZXJhYmxlRW50aXR5U2V0KG9NRENDaGFydDogQ2hhcnQsIGFNb2RlczogKENoYXJ0UDEzbk1vZGUgfCBrZXlvZiB0eXBlb2YgQ2hhcnRQMTNuTW9kZSlbXSk6IHZvaWQge1xuXHRjb25zdCBiRW50aXR5U2V0RmlsZXJhYmxlID0gb01EQ0NoYXJ0XG5cdFx0Py5nZXRNb2RlbCgpXG5cdFx0Py5nZXRNZXRhTW9kZWwoKVxuXHRcdD8uZ2V0T2JqZWN0KGAke29NRENDaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zYCk/LkZpbHRlcmFibGU7XG5cdGlmIChiRW50aXR5U2V0RmlsZXJhYmxlICE9PSB1bmRlZmluZWQgJiYgIWJFbnRpdHlTZXRGaWxlcmFibGUpIHtcblx0XHRhTW9kZXMgPSBhTW9kZXMuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IFwiRmlsdGVyXCIpO1xuXHRcdG9NRENDaGFydC5zZXRQMTNuTW9kZShhTW9kZXMpO1xuXHR9XG59XG5cbi8vICBjaGVjayBpZiBHcm91cGFibGUgL0FnZ3JlZ2F0YWJsZSBwcm9wZXJ0eSBpcyBwcmVzZW50IG9yIG5vdFxuZnVuY3Rpb24gY2hlY2tQcm9wZXJ0eVR5cGUoXG5cdGFQcm9wZXJ0aWVzOiAoRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiAmIHsgUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gfSlbXSxcblx0c1BhdGg6IHN0cmluZ1xuKTogdHJ1ZSB8IHVuZGVmaW5lZCB7XG5cdGlmIChhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVByb3BlcnRpZXMpIHtcblx0XHRcdGlmIChlbGVtZW50Py4kUHJvcGVydHlQYXRoID09PSBzUGF0aCB8fCBlbGVtZW50Py5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbkNoYXJ0RGVsZWdhdGUuZm9ybWF0VGV4dCA9IGZ1bmN0aW9uIChvVmFsdWUxOiBzdHJpbmcsIG9WYWx1ZTI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHNWYWx1ZSA9IHRoaXMudHlwZUNvbmZpZz8udHlwZUluc3RhbmNlPy5mb3JtYXRWYWx1ZShvVmFsdWUxLCBcInN0cmluZ1wiKSB8fCBvVmFsdWUxO1xuXG5cdGlmIChvVmFsdWUyKSB7XG5cdFx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPSB0aGlzLnRleHRGb3JtYXR0ZXI7XG5cblx0XHRpZiAoXG5cdFx0XHQhb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gfHxcblx0XHRcdG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dEZpcnN0XCJcblx0XHQpIHtcblx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKG9WYWx1ZTIsIHNWYWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMoc1ZhbHVlLCBvVmFsdWUyKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb1ZhbHVlMiB8fCBzVmFsdWU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgaWxsdXN0cmF0ZWQgbWVzc2FnZSB3aXRoIGEgbmV3IHRpdGxlLCBkZXNjcmlwdGlvbiwgYW5kIHR5cGUuXG4gKiBAcGFyYW0gb0NoYXJ0IFJlZmVyZW5jZSB0byB0aGUgTURDX0NoYXJ0XG4gKiBAcGFyYW0gaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsIE9iamVjdCBjb3JyZXNwb25kcyB0byB0aGUgaWxsdXN0cmF0ZWQgbWVzc2FnZVxuICovXG5DaGFydERlbGVnYXRlLl91cGRhdGVJbGx1c3RyYXRlZE1lc3NhZ2UgPSBmdW5jdGlvbiAob0NoYXJ0OiBDaGFydCwgaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0Y29uc3Qgbm9EYXRhQ29udHJvbCA9IG9DaGFydC5nZXROb0RhdGEoKSBhcyBJbGx1c3RyYXRlZE1lc3NhZ2U7XG5cdG5vRGF0YUNvbnRyb2wuc2V0VGl0bGUoaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsLnRpdGxlKTtcblx0bm9EYXRhQ29udHJvbC5zZXREZXNjcmlwdGlvbihpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwuZGVzY3JpcHRpb24pO1xuXHRub0RhdGFDb250cm9sLnNldElsbHVzdHJhdGlvblR5cGUoaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsLmlsbHVzdHJhdGlvblR5cGUgfHwgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXMpO1xuXHRub0RhdGFDb250cm9sLnNldElsbHVzdHJhdGlvblNpemUoaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsLmlsbHVzdHJhdGlvblNpemUgfHwgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvKTtcbn07XG5cbi8qKlxuICogV2Ugc2V0IHRoZSBpbGx1c3RyYXRlZCBtZXNzYWdlJ3MgdGl0bGUsIGRlc2NyaXB0aW9uLCBhbmQgdHlwZSBiYXNlZCBvbiBkaWZmZXJlbnQgY29uZGl0aW9ucy5cbiAqIEBwYXJhbSBjaGFydCBSZWZlcmVuY2UgdG8gdGhlIE1EQ19DaGFydFxuICogQHBhcmFtIGJpbmRpbmdJbmZvIEJpbmRpbmdJbmZvXG4gKi9cbkNoYXJ0RGVsZWdhdGUuc2V0Q2hhcnROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UgPSBmdW5jdGlvbiAoY2hhcnQ6IENoYXJ0LCBiaW5kaW5nSW5mbzogUHJvcGVydHlCaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKGNoYXJ0KTtcblx0bGV0IGlsbHVzdHJhdGVkSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyA9IHt9O1xuXHRjb25zdCBjb252ZXJ0ZXJUeXBlID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhjaGFydCkuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlO1xuXHRjb25zdCBvQ2hhcnRGaWx0ZXJJbmZvID0gQ2hhcnRVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKGNoYXJ0KTtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHIoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRjb25zdCBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3Mge1xuXHRcdGlmIChjaGFydC5kYXRhKFwibXVsdGlWaWV3c1wiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0ZpbHRlclJlc3VsdHMsXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplOiBjb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIiA/IElsbHVzdHJhdGVkTWVzc2FnZVNpemUuU21hbGwgOiBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkF1dG9cblx0XHR9O1xuXHR9O1xuXG5cdGlmIChjaGFydC5nZXRGaWx0ZXIoKSAmJiBjb252ZXJ0ZXJUeXBlICE9PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCBvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aCkge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9DaGFydEZpbHRlckluZm8uc2VhcmNoIHx8IG9DaGFydEZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoKSB7XG5cdFx0Ly9jaGVjayBpZiBjaGFydCBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdH0gZWxzZSB7XG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9EQVRBXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXMsXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplOiBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLlNtYWxsXG5cdFx0fTtcblx0fVxuXG5cdENoYXJ0RGVsZWdhdGUuX3VwZGF0ZUlsbHVzdHJhdGVkTWVzc2FnZShjaGFydCwgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbik7XG59O1xuXG5DaGFydERlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvID0gZnVuY3Rpb24gKG9DaGFydDogQ2hhcnQsIG9CaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRDaGFydERlbGVnYXRlLnNldENoYXJ0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcblx0Y29uc3Qgb0ZpbHRlciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob0NoYXJ0LmdldEZpbHRlcigpKTtcblx0Y29uc3QgbUNvbmRpdGlvbnMgPSBvQ2hhcnQuZ2V0Q29uZGl0aW9ucygpO1xuXHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHR9XG5cdGlmICghb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycyA9IHt9O1xuXHR9XG5cdGlmIChvRmlsdGVyKSB7XG5cdFx0Ly8gU2VhcmNoXG5cdFx0Y29uc3Qgb0luZm8gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKG9GaWx0ZXIgYXMgSUZpbHRlckNvbnRyb2wsIHt9KTtcblx0XHRjb25zdCBvQXBwbHlTdXBwb3J0ZWQgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9DaGFydC5kYXRhKFwiYXBwbHlTdXBwb3J0ZWRcIikpIGFzIENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdFx0aWYgKG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoICYmIG9JbmZvLnNlYXJjaCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ob0luZm8uc2VhcmNoKTtcblx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2gpIHtcblx0XHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdH1cblx0fVxuXHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IG1Db25kaXRpb25zID8gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlcnNJbmZvKG9GaWx0ZXIsIG1Db25kaXRpb25zKSA6IG51bGw7XG5cdGlmIChzUGFyYW1ldGVyUGF0aCkge1xuXHRcdG9CaW5kaW5nSW5mby5wYXRoID0gc1BhcmFtZXRlclBhdGg7XG5cdH1cblx0Y29uc3Qgb0ZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KTtcblx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvRmlsdGVySW5mby5iaW5kaW5nUGF0aDtcblx0fVxuXG5cdGlmIChvQmluZGluZ0luZm8ucGF0aCAmJiBvQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdG9CaW5kaW5nSW5mby5wYXRoID0gQ2hhcnRIZWxwZXIuZ2V0Q29sbGVjdGlvbk5hbWUob0JpbmRpbmdJbmZvLnBhdGgpO1xuXHR9XG5cblx0Ly8gcmVtb3ZlIHByZWZpeGVzIHNvIHRoYXQgZW50aXR5c2V0IHdpbGwgbWF0Y2ggd2l0aCB0aGUgcHJvcGVydHkgbmFtZXMgd2l0aCB0aGVzZSBmaWVsZFxuXHRpZiAob0ZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdG9GaWx0ZXJJbmZvLmZpbHRlcnMuZm9yRWFjaCgoZWxlbWVudDogRmlsdGVyKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0KGVsZW1lbnQgYXMgdW5rbm93biBhcyB7IHNQYXRoOiBzdHJpbmcgfSkuc1BhdGggPSAob0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZSkuZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzKFxuXHRcdFx0XHRcdGVsZW1lbnQuZ2V0UGF0aCgpIVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9GaWx0ZXJJbmZvLmZpbHRlcnMgPSBDaGFydERlbGVnYXRlLl9yZW1vdmVTaWJsaW5nRW50aXR5Rm9yRHJhZnRDaGFydChvRmlsdGVySW5mby5maWx0ZXJzKTtcblx0fVxuXHRvQmluZGluZ0luZm8uZXZlbnRzID8/PSB7fTtcblx0b0JpbmRpbmdJbmZvLmV2ZW50cy5kYXRhUmVxdWVzdGVkID0gKG9DaGFydC5nZXRQYXJlbnQoKSBhcyBDaGFydFR5cGUpLm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkLmJpbmQob0NoYXJ0LmdldFBhcmVudCgpKTtcblxuXHRvQmluZGluZ0luZm8uZmlsdGVycyA9IG9GaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoID4gMCA/IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvRmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSkgOiB1bmRlZmluZWQ7XG5cdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0Q2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlcihvQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG59O1xuXG5DaGFydERlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBvTW9kZWwgPSB0aGlzLl9nZXRNb2RlbChvTURDQ2hhcnQpO1xuXHRsZXQgcENyZWF0ZVByb3BlcnR5SW5mb3M6IFByb21pc2U8UHJvcGVydHlJbmZvW10+O1xuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gbmV3IFByb21pc2U8T0RhdGFNb2RlbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcblx0XHRcdG9NRENDaGFydC5hdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRyZXNvbHZlcjogcmVzb2x2ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbk1vZGVsQ29udGV4dENoYW5nZSBhcyAoZXY6IFVJNUV2ZW50KSA9PiB2b2lkLFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH0pLnRoZW4oKG9SZXRyaWV2ZWRNb2RlbDogT0RhdGFNb2RlbCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3Mob01EQ0NoYXJ0LCBvUmV0cmlldmVkTW9kZWwpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9Nb2RlbCk7XG5cdH1cblxuXHRyZXR1cm4gcENyZWF0ZVByb3BlcnR5SW5mb3MudGhlbihmdW5jdGlvbiAoYVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKSB7XG5cdFx0XHRvTURDQ2hhcnQuZGF0YShcIiRtZGNDaGFydFByb3BlcnR5SW5mb1wiLCBhUHJvcGVydGllcyk7XG5cdFx0XHQvLyBzdG9yZSB0aGUgcHJvcGVydGllcyB0byBmZXRjaCBkdXJpbmcgcDEzbiBjYWxjdWxhdGlvblxuXHRcdFx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXMob01EQ0NoYXJ0LCBhUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSk7XG59O1xuZnVuY3Rpb24gb25Nb2RlbENvbnRleHRDaGFuZ2UodGhpczogdHlwZW9mIENoYXJ0RGVsZWdhdGUsIG9FdmVudDogVUk1RXZlbnQ8e30sIENoYXJ0Piwgb0RhdGE6IHsgcmVzb2x2ZXI6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0Y29uc3Qgb01EQ0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRjb25zdCBvTW9kZWwgPSB0aGlzLl9nZXRNb2RlbChvTURDQ2hhcnQpO1xuXG5cdGlmIChvTW9kZWwpIHtcblx0XHRvTURDQ2hhcnQuZGV0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKG9uTW9kZWxDb250ZXh0Q2hhbmdlIGFzIChldjogVUk1RXZlbnQpID0+IHZvaWQpO1xuXHRcdG9EYXRhLnJlc29sdmVyKG9Nb2RlbCk7XG5cdH1cbn1cblxuQ2hhcnREZWxlZ2F0ZS5fcmVtb3ZlU2libGluZ0VudGl0eUZvckRyYWZ0Q2hhcnQgPSBmdW5jdGlvbiAoaXRlbXM6IEZpbHRlcltdKTogRmlsdGVyW10ge1xuXHRpZiAoIWl0ZW1zPy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRyZXR1cm4gaXRlbXNcblx0XHQubWFwKChpdGVtOiBGaWx0ZXIpID0+IHtcblx0XHRcdGlmIChpdGVtLmdldFBhdGgoKSA9PT0gXCJTaWJsaW5nRW50aXR5L0lzQWN0aXZlRW50aXR5XCIgfHwgaXRlbS5nZXRQYXRoKCkgPT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGl0ZW0uZ2V0RmlsdGVycygpPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IENoYXJ0RGVsZWdhdGUuX3JlbW92ZVNpYmxpbmdFbnRpdHlGb3JEcmFmdENoYXJ0KGl0ZW0uZ2V0RmlsdGVycygpKTtcblxuXHRcdFx0XHRpZiAoZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpdGVtLmdldFBhdGgoKSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmZpbHRlcigoaXRlbTogRmlsdGVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGl0ZW0gaXMgRmlsdGVyID0+IGl0ZW0gIT09IG51bGwgJiYgaXRlbSAhPT0gdW5kZWZpbmVkKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3MgPSBhc3luYyBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCwgb01vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAvJHtvTURDQ2hhcnQuZGF0YShcImVudGl0eVNldFwiKX1gO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGFSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW29NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vYCksIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH1AYCldKTtcblx0Y29uc3QgYVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gYVJlc3VsdHNbMF07XG5cdGNvbnN0IG1FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGFSZXN1bHRzWzFdO1xuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJjdXN0b21BZ2dcIikpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRnZXRDdXN0b21BZ2dyZWdhdGUobUN1c3RvbUFnZ3JlZ2F0ZXMsIG9NRENDaGFydCk7XG5cdGxldCBzQW5ubztcblx0Zm9yIChjb25zdCBzQW5ub0tleSBpbiBtRW50aXR5U2V0QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoc0Fubm9LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRzQW5ubyA9IHNBbm5vS2V5LnJlcGxhY2UoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZSNcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBhQW5ubyA9IHNBbm5vLnNwbGl0KFwiQFwiKTtcblxuXHRcdFx0aWYgKGFBbm5vLmxlbmd0aCA9PSAyICYmIGFBbm5vWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbYUFubm9bMF1dID0gbUVudGl0eVNldEFubm90YXRpb25zW3NBbm5vS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgbVR5cGVBZ2dyZWdhdGFibGVQcm9wcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJ0cmFuc0FnZ1wiKSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7IHByb3BlcnR5UGF0aDogc3RyaW5nOyBhZ2dyZWdhdGlvbk1ldGhvZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVxuXHQ+O1xuXHRjb25zdCBtS25vd25BZ2dyZWdhdGFibGVQcm9wczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4+ID0ge307XG5cdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzKSB7XG5cdFx0Y29uc3Qgc1Byb3BLZXkgPSBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLnByb3BlcnR5UGF0aDtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gPSBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gfHwge307XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldW21UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0uYWdncmVnYXRpb25NZXRob2RdID0ge1xuXHRcdFx0bmFtZTogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0bGFiZWw6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubGFiZWxcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHVuaXRPZk1lYXN1cmVzID0gX2dldFVuaXRPZk1lYXN1cmVzKG9FbnRpdHlUeXBlLCBvTWV0YU1vZGVsLCBzRW50aXR5U2V0UGF0aCk7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChzS2V5LmluZGV4T2YoXCIkXCIpICE9PSAwKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IENoYXJ0SGVscGVyLmZldGNoQ3JpdGljYWxpdHkob01ldGFNb2RlbCwgb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzRW50aXR5U2V0UGF0aH0vJHtzS2V5fWApISk7XG5cdFx0XHRDaGFydERlbGVnYXRlLl9oYW5kbGVQcm9wZXJ0eShcblx0XHRcdFx0b01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtzRW50aXR5U2V0UGF0aH0vJHtzS2V5fWApLFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyxcblx0XHRcdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHMsXG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0Y3JpdGljYWxpdHksXG5cdFx0XHRcdHVuaXRPZk1lYXN1cmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVByb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBnZXRDdXN0b21BZ2dyZWdhdGUobUN1c3RvbUFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvTURDQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdGNvbnN0IGFEaW1lbnNpb25zOiBzdHJpbmdbXSA9IFtdLFxuXHRcdGFNZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG1DdXN0b21BZ2dyZWdhdGVzICYmIE9iamVjdC5rZXlzKG1DdXN0b21BZ2dyZWdhdGVzKS5sZW5ndGggPj0gMSkge1xuXHRcdGNvbnN0IGFDaGFydEl0ZW1zID0gb01EQ0NoYXJ0LmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYUNoYXJ0SXRlbXMpIHtcblx0XHRcdGlmIChhQ2hhcnRJdGVtc1trZXldLmdldFR5cGUoKSA9PT0gXCJncm91cGFibGVcIikge1xuXHRcdFx0XHRhRGltZW5zaW9ucy5wdXNoKENoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZChhQ2hhcnRJdGVtc1trZXldLmdldFByb3BlcnR5S2V5KCksIFwiZ3JvdXBhYmxlXCIpKTtcblx0XHRcdH0gZWxzZSBpZiAoYUNoYXJ0SXRlbXNba2V5XS5nZXRUeXBlKCkgPT09IFwiYWdncmVnYXRhYmxlXCIpIHtcblx0XHRcdFx0YU1lYXN1cmVzLnB1c2goXG5cdFx0XHRcdFx0Q2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGFDaGFydEl0ZW1zW2tleV0uZ2V0UHJvcGVydHlLZXkoKSwgXCJhZ2dyZWdhdGFibGVcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0YU1lYXN1cmVzLmZpbHRlcihmdW5jdGlvbiAodmFsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFEaW1lbnNpb25zLmluY2x1ZGVzKHZhbCk7XG5cdFx0XHR9KS5sZW5ndGggPj0gMVxuXHRcdCkge1xuXHRcdFx0TG9nLmVycm9yKFwiRGltZW5zaW9uIGFuZCBNZWFzdXJlIGhhcyB0aGUgc2FtZVByb3BlcnR5IENvbmZpZ3VyZWRcIik7XG5cdFx0fVxuXHR9XG59XG5cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdHNLZXk6IHN0cmluZyxcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4sXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHVua25vd24gfSxcblx0ZGF0YVR5cGU6IHN0cmluZ1xuKTogb2JqZWN0W10ge1xuXHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllczogb2JqZWN0W10gPSBbXTtcblx0aWYgKE9iamVjdC5rZXlzKG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzKS5pbmNsdWRlcyhzS2V5KSkge1xuXHRcdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XSkge1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLm5hbWUsXG5cdFx0XHRcdGxhYmVsOlxuXHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLmxhYmVsIHx8XG5cdFx0XHRcdFx0YCR7b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdfSAoJHtzQWdncmVnYXRhYmxlfSlgIHx8XG5cdFx0XHRcdFx0YCR7c0tleX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCxcblx0XHRcdFx0c29ydGFibGU6IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSA/IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XS5zb3J0YWJsZSA6IHRydWUsXG5cdFx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdHBhdGg6IHNLZXksXG5cdFx0XHRcdGRhdGFUeXBlOiBkYXRhVHlwZSxcblx0XHRcdFx0YWdncmVnYXRpb25NZXRob2Q6IHNBZ2dyZWdhdGFibGUsXG5cdFx0XHRcdG1heENvbmRpdGlvbnM6IGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0/LltzS2V5XT8uWzBdKSA/IC0xIDogMSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdGRhdGFwb2ludDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR1bml0UGF0aDpcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRmb3IgKGNvbnN0IHNDdXN0b20gaW4gbUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGlmIChzQ3VzdG9tID09PSBzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9JdGVtID0gbWVyZ2Uoe30sIG1DdXN0b21BZ2dyZWdhdGVzW3NDdXN0b21dIGFzIG9iamVjdCwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0cGF0aDogc0N1c3RvbSxcblx0XHRcdFx0XHRkYXRhVHlwZTogZGF0YVR5cGUsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsLCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdFx0dW5pdFBhdGg6XG5cdFx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHRcdChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuVW5pdFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKG9JdGVtKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGFBZ2dyZWdhdGVQcm9wZXJ0aWVzO1xufTtcbkNoYXJ0RGVsZWdhdGUucmViaW5kID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQsIG9CaW5kaW5nSW5mbzogUHJvcGVydHlCaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCBzU2VhcmNoID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHR9XG5cblx0QmFzZUNoYXJ0RGVsZWdhdGUucmViaW5kKG9NRENDaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxuXG5cdG9NRENDaGFydC5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcbn07XG5DaGFydERlbGVnYXRlLl9zZXRDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvSW5uZXJDaGFydDogc2FwQ2hhcnQpOiB2b2lkIHtcblx0Y29uc3Qgb0NoYXJ0QVBJID0gb01EQ0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZTtcblx0b0lubmVyQ2hhcnQuc2V0Vml6UHJvcGVydGllcyhvTURDQ2hhcnQuZGF0YShcInZpelByb3BlcnRpZXNcIikpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hTZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRGVzZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRHJpbGxlZFVwKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cblx0b0lubmVyQ2hhcnQuc2V0U2VsZWN0aW9uTW9kZSgob01EQ0NoYXJ0LmdldFBheWxvYWQoKSBhcyB7IHNlbGVjdGlvbk1vZGU6IHN0cmluZyB9KS5zZWxlY3Rpb25Nb2RlLnRvVXBwZXJDYXNlKCkgYXMgU2VsZWN0aW9uTW9kZSk7XG5cdEJhc2VDaGFydERlbGVnYXRlLl9zZXRDaGFydChvTURDQ2hhcnQsIG9Jbm5lckNoYXJ0KTtcbn07XG5DaGFydERlbGVnYXRlLl9nZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KTogUHJvcGVydHlCaW5kaW5nSW5mbyB7XG5cdGlmICh0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCk7XG5cdH1cblxuXHRjb25zdCBvTWV0YWRhdGFJbmZvID0gKG9NRENDaGFydC5nZXREZWxlZ2F0ZSgpIGFzIHsgcGF5bG9hZDogdW5rbm93biB9KS5wYXlsb2FkIGFzIHsgcGFyYW1ldGVyczogb2JqZWN0OyBjaGFydENvbnRleHRQYXRoOiBzdHJpbmcgfTtcblx0Y29uc3Qgb1BhcmFtcyA9IG1lcmdlKHt9LCBvTWV0YWRhdGFJbmZvLnBhcmFtZXRlcnMsIHtcblx0XHRlbnRpdHlTZXQ6IG9NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHBhdGg6IG9NZXRhZGF0YUluZm8uY2hhcnRDb250ZXh0UGF0aCxcblx0XHRldmVudHM6IHtcblx0XHRcdGRhdGFSZXF1ZXN0ZWQ6IChvTURDQ2hhcnQuZ2V0UGFyZW50KCkgYXMgQ2hhcnRUeXBlKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9NRENDaGFydC5nZXRQYXJlbnQoKSlcblx0XHR9LFxuXHRcdHBhcmFtZXRlcnM6IG9QYXJhbXNcblx0fTtcbn07XG5DaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvTURDQ2hhcnRJdGVtOiBDaGFydEl0ZW0pOiB2b2lkIHtcblx0QmFzZUNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0LmNhbGwodGhpcywgb01EQ0NoYXJ0LCBvTURDQ2hhcnRJdGVtKTtcblx0aWYgKG9NRENDaGFydEl0ZW0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSB0aGlzLmdldElubmVyQ2hhcnQob01EQ0NoYXJ0KTtcblx0XHRvSW5uZXJDaGFydC5maXJlRGVzZWxlY3REYXRhKCk7XG5cdH1cbn07XG5DaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5OiBTb3J0UmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0YklzVHJhbnNBZ2dyZWdhdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRpZiAoYklzVHJhbnNBZ2dyZWdhdGUpIHtcblx0XHRpZiAob01EQ0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKS50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5ID8gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5LnNvcnRhYmxlIDogdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eSA/IHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eS5zb3J0YWJsZSA6IHRydWU7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlciA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0aWYgKG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikudG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb0JpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gW107XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycz8uYUZpbHRlcnM/LnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgY2hhcnQgZm9yIHRoZSBtZWFzdXJlIG9yIGRpbWVuc2lvbi5cbiAqIEZvciBzdGFuZGFyZCBjYXNlcywgdGhpcyBpcyBqdXN0IHRoZSBJRCBvZiB0aGUgcHJvcGVydHkuXG4gKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGFub3RoZXIgSUQgaW50ZXJuYWxseSBpbnNpZGUgdGhlIGNoYXJ0IChlLmcuIG9uIGR1cGxpY2F0ZSBwcm9wZXJ0eSBJRHMpIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAqIEluIHRoaXMgY2FzZSwgPGNvZGU+Z2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQ8L2NvZGU+IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGFzIHdlbGwuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBraW5kIFR5cGUgb2YgdGhlIHByb3BlcnR5IChtZWFzdXJlIG9yIGRpbWVuc2lvbilcbiAqIEByZXR1cm5zIEludGVybmFsIElEIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1hcHMgYW4gaWQgb2YgYW4gaW50ZXJuYWwgY2hhcnQgZGltZW5zaW9uIG9yIG1lYXN1cmUgJiB0eXBlIG9mIGEgcHJvcGVydHkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZW50cnkuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiBpbnRlcm5hbCBjaGFydCBtZWFzdXJlIG9yIGRpbWVuc2lvblxuICogQHBhcmFtIGtpbmQgVGhlIGtpbmQgb2YgcHJvcGVydHkgdGhhdCBpcyB1c2VkXG4gKiBAcGFyYW0gbWRjQ2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEByZXR1cm5zIFByb3BlcnR5SW5mbyBvYmplY3RcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgbWRjQ2hhcnQ6IENoYXJ0KTogc3RyaW5nIHtcblx0cmV0dXJuIG1kY0NoYXJ0LmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIgKyBuYW1lKTtcbn07XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgY2hhcnQncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG4gKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBwZXJzb25hbGl6YXRpb24gb2YgdGhlIGNoYXJ0IGZpbHRlclxuICovXG5DaGFydERlbGVnYXRlLmdldEZpbHRlckRlbGVnYXRlID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdHtcblx0XHRcdGFwaVZlcnNpb246IDJcblx0XHR9LFxuXHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdHtcblx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RWxlbWVudCB8IHVuZGVmaW5lZD4ge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gQ2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKHNQcm9wZXJ0eUluZm9OYW1lLCBcImdyb3VwYWJsZVwiKTtcblx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBwcm9wKS50aGVuKChvRmlsdGVySXRlbSkgPT4ge1xuXHRcdFx0XHRcdChvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKT8uYmluZFByb3BlcnR5KFwiY29uZGl0aW9uc1wiLCB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIiRmaWx0ZXJzPi9jb25kaXRpb25zL1wiICsgc1Byb3BlcnR5SW5mb05hbWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQob0ZpbHRlckl0ZW0gYXMgdW5rbm93biBhcyBJdGVtKT8uc2V0UHJvcGVydHlLZXkoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBZ0VBLE1BQU1BLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDO0VBQzFEQSxpQkFBaUIsQ0FBQ0MsVUFBVSxHQUFHLENBQUM7RUFDaENKLGFBQWEsQ0FBQ0ssVUFBVSxHQUFHLGtCQUFvQztJQUM5RCxNQUFNQyxPQUFPLENBQUNDLElBQUksQ0FBQztNQUFFQyxJQUFJLEVBQUU7SUFBWSxDQUFDLENBQUM7SUFDekMsT0FBT0wsaUJBQWlCLENBQUNFLFVBQVUsQ0FBQyxDQUFDO0VBQ3RDLENBQUM7RUFFREwsYUFBYSxDQUFDUyxlQUFlLEdBQUcsVUFDL0JDLFFBQWlCLEVBQ2pCQyxTQUFn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
|