@sapui5/sap.fe.core 1.100.0 → 1.101.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 +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AnnotationHelper.js +43 -24
- package/src/sap/fe/core/AnnotationHelper.ts +43 -37
- package/src/sap/fe/core/AppComponent.js +20 -27
- package/src/sap/fe/core/AppComponent.ts +19 -25
- package/src/sap/fe/core/AppStateHandler.js +5 -5
- package/src/sap/fe/core/AppStateHandler.ts +2 -2
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +74 -17
- package/src/sap/fe/core/CommonUtils.ts +181 -110
- package/src/sap/fe/core/ExtensionAPI.js +11 -10
- package/src/sap/fe/core/ExtensionAPI.ts +22 -30
- package/src/sap/fe/core/PageController.js +12 -11
- package/src/sap/fe/core/PageController.ts +34 -34
- package/src/sap/fe/core/RouterProxy.js +36 -24
- package/src/sap/fe/core/RouterProxy.ts +36 -22
- package/src/sap/fe/core/TemplateComponent.js +193 -118
- package/src/sap/fe/core/TemplateComponent.ts +105 -117
- package/src/sap/fe/core/TemplateModel.js +6 -8
- package/src/sap/fe/core/TemplateModel.ts +2 -2
- package/src/sap/fe/core/TransactionHelper.js +33 -18
- package/src/sap/fe/core/TransactionHelper.ts +172 -153
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +31 -17
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +52 -45
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +16 -6
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +13 -3
- package/src/sap/fe/core/actions/collaboration/Manage.js +9 -7
- package/src/sap/fe/core/actions/collaboration/Manage.ts +33 -31
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +53 -56
- package/src/sap/fe/core/actions/draft.js +308 -166
- package/src/sap/fe/core/actions/draft.ts +177 -74
- package/src/sap/fe/core/actions/messageHandling.js +25 -13
- package/src/sap/fe/core/actions/messageHandling.ts +49 -39
- package/src/sap/fe/core/actions/operations.js +4 -4
- package/src/sap/fe/core/actions/operations.ts +3 -2
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +506 -245
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +395 -275
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +15 -17
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +98 -96
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +15 -15
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +60 -53
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +94 -42
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +114 -91
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +12 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +8 -9
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +13 -25
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +18 -28
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +16 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +32 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +14 -14
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +62 -63
- package/src/sap/fe/core/controllerextensions/ViewState.js +17 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +93 -102
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +38 -15
- package/src/sap/fe/core/controls/CommandExecution.ts +20 -20
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +73 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +22 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +116 -66
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +121 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +313 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +92 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +32 -35
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +7 -6
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +15 -14
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +5 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +3 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
- package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
- package/src/sap/fe/core/converters/controls/Common/Form.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +245 -112
- package/src/sap/fe/core/converters/controls/Common/Table.ts +305 -193
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -7
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +72 -43
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +134 -100
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +3 -7
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +2 -2
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +314 -237
- package/src/sap/fe/core/helpers/MassEditHelper.js +173 -39
- package/src/sap/fe/core/helpers/MassEditHelper.ts +236 -132
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +4 -5
- package/src/sap/fe/core/library.ts +17 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +23 -8
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +5 -3
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +4 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +5 -3
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +5 -3
- package/src/sap/fe/core/messagebundle_hu.properties +2 -0
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +2 -0
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +5 -3
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +5 -3
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +5 -3
- package/src/sap/fe/core/messagebundle_ru.properties +5 -3
- package/src/sap/fe/core/messagebundle_sh.properties +2 -0
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +3 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +2 -0
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/core/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.js +4 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -62
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +51 -42
- package/src/sap/fe/core/services/ShellServicesFactory.js +69 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +26 -29
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +8 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +6 -17
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +15 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +30 -23
- package/src/sap/fe/core/templating/UIFormatters.js +121 -21
- package/src/sap/fe/core/templating/UIFormatters.ts +134 -49
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
|
@@ -2,47 +2,48 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/EntitySetHelper", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "../../helpers/ID", "../../ManifestSettings", "./Criticality", "./table/StandardActions"], function (DataField, Action, BindingHelper, ConfigurableObject, IssueManager, Key, tableFormatters, TableFormatterTypes, BindingExpression, StableIdHelper, DataModelPathHelper, DisplayModeFormatter, EntitySetHelper, PropertyHelper, Aggregation, ID, ManifestSettings, Criticality, StandardActions) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var getCreationRow = StandardActions.getCreationRow;
|
|
10
|
-
var getRestrictions = StandardActions.getRestrictions;
|
|
11
|
-
var getMassEditVisibility = StandardActions.getMassEditVisibility;
|
|
12
9
|
var isInDisplayMode = StandardActions.isInDisplayMode;
|
|
13
|
-
var getCreateVisibility = StandardActions.getCreateVisibility;
|
|
14
|
-
var getInsertUpdateActionsTemplating = StandardActions.getInsertUpdateActionsTemplating;
|
|
15
10
|
var isDraftOrStickySupported = StandardActions.isDraftOrStickySupported;
|
|
16
|
-
var getStandardActionMassEdit = StandardActions.getStandardActionMassEdit;
|
|
17
11
|
var getStandardActionPaste = StandardActions.getStandardActionPaste;
|
|
12
|
+
var getStandardActionMassEdit = StandardActions.getStandardActionMassEdit;
|
|
18
13
|
var getStandardActionDelete = StandardActions.getStandardActionDelete;
|
|
19
14
|
var getStandardActionCreate = StandardActions.getStandardActionCreate;
|
|
15
|
+
var getRestrictions = StandardActions.getRestrictions;
|
|
16
|
+
var getMassEditVisibility = StandardActions.getMassEditVisibility;
|
|
17
|
+
var getInsertUpdateActionsTemplating = StandardActions.getInsertUpdateActionsTemplating;
|
|
20
18
|
var getDeleteVisibility = StandardActions.getDeleteVisibility;
|
|
19
|
+
var getCreationRow = StandardActions.getCreationRow;
|
|
20
|
+
var getCreateVisibility = StandardActions.getCreateVisibility;
|
|
21
21
|
var generateStandardActionsContext = StandardActions.generateStandardActionsContext;
|
|
22
|
-
var getNonSortablePropertiesRestrictions = EntitySetHelper.getNonSortablePropertiesRestrictions;
|
|
23
22
|
var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
|
|
24
|
-
var
|
|
25
|
-
var
|
|
23
|
+
var VisualizationType = ManifestSettings.VisualizationType;
|
|
24
|
+
var VariantManagementType = ManifestSettings.VariantManagementType;
|
|
25
|
+
var TemplateType = ManifestSettings.TemplateType;
|
|
26
|
+
var SelectionMode = ManifestSettings.SelectionMode;
|
|
27
|
+
var Importance = ManifestSettings.Importance;
|
|
28
|
+
var HorizontalAlign = ManifestSettings.HorizontalAlign;
|
|
29
|
+
var CreationMode = ManifestSettings.CreationMode;
|
|
30
|
+
var AvailabilityType = ManifestSettings.AvailabilityType;
|
|
31
|
+
var ActionType = ManifestSettings.ActionType;
|
|
32
|
+
var TableID = ID.TableID;
|
|
26
33
|
var AggregationHelper = Aggregation.AggregationHelper;
|
|
27
|
-
var
|
|
34
|
+
var isProperty = PropertyHelper.isProperty;
|
|
28
35
|
var isPathExpression = PropertyHelper.isPathExpression;
|
|
29
|
-
var
|
|
36
|
+
var getTargetValueOnDataPoint = PropertyHelper.getTargetValueOnDataPoint;
|
|
30
37
|
var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var IssueCategory = IssueManager.IssueCategory;
|
|
36
|
-
var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
|
|
38
|
+
var getAssociatedCurrencyProperty = PropertyHelper.getAssociatedCurrencyProperty;
|
|
39
|
+
var getNonSortablePropertiesRestrictions = EntitySetHelper.getNonSortablePropertiesRestrictions;
|
|
40
|
+
var getDisplayMode = DisplayModeFormatter.getDisplayMode;
|
|
41
|
+
var EDM_TYPE_MAPPING = DisplayModeFormatter.EDM_TYPE_MAPPING;
|
|
37
42
|
var isPathUpdatable = DataModelPathHelper.isPathUpdatable;
|
|
38
43
|
var isPathSearchable = DataModelPathHelper.isPathSearchable;
|
|
39
44
|
var isPathDeletable = DataModelPathHelper.isPathDeletable;
|
|
40
45
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
41
|
-
var
|
|
42
|
-
var KeyHelper = Key.KeyHelper;
|
|
43
|
-
var UI = BindingHelper.UI;
|
|
44
|
-
var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
|
|
45
|
-
var Entity = BindingHelper.Entity;
|
|
46
|
+
var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
|
|
46
47
|
var resolveBindingString = BindingExpression.resolveBindingString;
|
|
47
48
|
var or = BindingExpression.or;
|
|
48
49
|
var not = BindingExpression.not;
|
|
@@ -55,6 +56,20 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
55
56
|
var bindingExpression = BindingExpression.bindingExpression;
|
|
56
57
|
var annotationExpression = BindingExpression.annotationExpression;
|
|
57
58
|
var and = BindingExpression.and;
|
|
59
|
+
var MessageType = TableFormatterTypes.MessageType;
|
|
60
|
+
var KeyHelper = Key.KeyHelper;
|
|
61
|
+
var IssueType = IssueManager.IssueType;
|
|
62
|
+
var IssueSeverity = IssueManager.IssueSeverity;
|
|
63
|
+
var IssueCategoryType = IssueManager.IssueCategoryType;
|
|
64
|
+
var IssueCategory = IssueManager.IssueCategory;
|
|
65
|
+
var Placement = ConfigurableObject.Placement;
|
|
66
|
+
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
67
|
+
var UI = BindingHelper.UI;
|
|
68
|
+
var Entity = BindingHelper.Entity;
|
|
69
|
+
var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
|
|
70
|
+
var removeDuplicateActions = Action.removeDuplicateActions;
|
|
71
|
+
var isActionNavigable = Action.isActionNavigable;
|
|
72
|
+
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
58
73
|
var isDataFieldTypes = DataField.isDataFieldTypes;
|
|
59
74
|
var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
|
|
60
75
|
var isDataFieldAlwaysHidden = DataField.isDataFieldAlwaysHidden;
|
|
@@ -62,21 +77,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
62
77
|
var getDataFieldDataType = DataField.getDataFieldDataType;
|
|
63
78
|
var collectRelatedPropertiesRecursively = DataField.collectRelatedPropertiesRecursively;
|
|
64
79
|
var collectRelatedProperties = DataField.collectRelatedProperties;
|
|
65
|
-
var Placement = ConfigurableObject.Placement;
|
|
66
|
-
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
67
|
-
var removeDuplicateActions = Action.removeDuplicateActions;
|
|
68
|
-
var isActionNavigable = Action.isActionNavigable;
|
|
69
|
-
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
70
|
-
var TableID = ID.TableID;
|
|
71
|
-
var VisualizationType = ManifestSettings.VisualizationType;
|
|
72
|
-
var VariantManagementType = ManifestSettings.VariantManagementType;
|
|
73
|
-
var TemplateType = ManifestSettings.TemplateType;
|
|
74
|
-
var SelectionMode = ManifestSettings.SelectionMode;
|
|
75
|
-
var Importance = ManifestSettings.Importance;
|
|
76
|
-
var HorizontalAlign = ManifestSettings.HorizontalAlign;
|
|
77
|
-
var CreationMode = ManifestSettings.CreationMode;
|
|
78
|
-
var AvailabilityType = ManifestSettings.AvailabilityType;
|
|
79
|
-
var ActionType = ManifestSettings.ActionType;
|
|
80
80
|
|
|
81
81
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
82
82
|
|
|
@@ -86,6 +86,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
86
86
|
|
|
87
87
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
88
88
|
|
|
89
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
90
|
+
|
|
89
91
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
90
92
|
|
|
91
93
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
@@ -726,7 +728,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
726
728
|
if (selectionMode && selectionMode === SelectionMode.None && deleteButtonVisibilityExpression) {
|
|
727
729
|
if (converterContext.getTemplateType() === TemplateType.ObjectPage && bMassEditEnabled) {
|
|
728
730
|
// Mass Edit in OP is enabled only in edit mode.
|
|
729
|
-
return compileBinding(ifElse(and(
|
|
731
|
+
return compileBinding(ifElse(and(UI.IsEditable, massEditVisibilityExpression), constant("Multi"), ifElse(deleteButtonVisibilityExpression, constant("Multi"), constant("None"))));
|
|
730
732
|
} else if (bMassEditEnabled) {
|
|
731
733
|
return SelectionMode.Multi;
|
|
732
734
|
}
|
|
@@ -757,7 +759,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
757
759
|
// Building expression for delete and mass edit
|
|
758
760
|
var buttonVisibilityExpression = or(deleteButtonVisibilityExpression || true, // default delete visibility as true
|
|
759
761
|
massEditVisibilityExpression);
|
|
760
|
-
return compileBinding(ifElse(and(
|
|
762
|
+
return compileBinding(ifElse(and(UI.IsEditable, buttonVisibilityExpression), constant(selectionMode), constant(SelectionMode.None)));
|
|
761
763
|
} else {
|
|
762
764
|
return SelectionMode.None;
|
|
763
765
|
} // EntitySet deletable:
|
|
@@ -776,7 +778,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
776
778
|
if (targetCapabilities.isDeletable || parentEntitySetDeletable !== "false" || bMassEditEnabled) {
|
|
777
779
|
// Use selectionMode in edit mode if delete is enabled or mass edit is visible
|
|
778
780
|
var editModebuttonVisibilityExpression = ifElse(bMassEditEnabled && !targetCapabilities.isDeletable, massEditVisibilityExpression, constant(true));
|
|
779
|
-
return compileBinding(ifElse(and(
|
|
781
|
+
return compileBinding(ifElse(and(UI.IsEditable, editModebuttonVisibilityExpression), constant(selectionMode), ifElse(or.apply(void 0, _toConsumableArray(aHiddenBindingExpressions.concat(aVisibleBindingExpressions))), constant(selectionMode), constant(SelectionMode.None))));
|
|
780
782
|
} else {
|
|
781
783
|
return compileBinding(ifElse(or.apply(void 0, _toConsumableArray(aHiddenBindingExpressions.concat(aVisibleBindingExpressions))), constant(selectionMode), constant(SelectionMode.None)));
|
|
782
784
|
} //EntitySet deletable:
|
|
@@ -1003,7 +1005,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1003
1005
|
var additionalPropertyNames = Object.keys(relatedPropertiesInfo.additionalProperties);
|
|
1004
1006
|
var columnInfo = getColumnDefinitionFromProperty(property, converterContext.getEntitySetBasedAnnotationPath(property.fullyQualifiedName), property.name, true, true, nonSortableColumns, aggregationHelper, converterContext);
|
|
1005
1007
|
var semanticKeys = converterContext.getAnnotationsByTerm("Common", "com.sap.vocabularies.Common.v1.SemanticKey", [converterContext.getEntityType()])[0];
|
|
1006
|
-
var oColumnDraftIndicator = getDefaultDraftIndicatorForColumn(columnInfo.name, semanticKeys);
|
|
1008
|
+
var oColumnDraftIndicator = getDefaultDraftIndicatorForColumn(columnInfo.name, semanticKeys, false, null);
|
|
1007
1009
|
|
|
1008
1010
|
if (Object.keys(oColumnDraftIndicator).length > 0) {
|
|
1009
1011
|
columnInfo.formatOptions = _objectSpread({}, oColumnDraftIndicator);
|
|
@@ -1060,7 +1062,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1060
1062
|
_exports.getColumnsFromEntityType = getColumnsFromEntityType;
|
|
1061
1063
|
|
|
1062
1064
|
var getColumnDefinitionFromProperty = function (property, fullPropertyPath, relativePath, useDataFieldPrefix, availableForAdaptation, nonSortableColumns, aggregationHelper, converterContext) {
|
|
1063
|
-
var _property$annotations, _property$annotations2, _property$annotations3, _annotations2, _annotations2$UI, _annotations2$UI$Data, _annotations2$UI$Data2, _annotations2$UI$Data3, _annotations2$UI$Data4;
|
|
1065
|
+
var _property$annotations, _property$annotations2, _property$annotations3, _annotations2, _annotations2$UI, _annotations2$UI$Data, _annotations2$UI$Data2, _annotations2$UI$Data3, _annotations2$UI$Data4, _annotations3, _annotations3$UI;
|
|
1064
1066
|
|
|
1065
1067
|
var name = useDataFieldPrefix ? relativePath : "Property::" + relativePath;
|
|
1066
1068
|
var key = (useDataFieldPrefix ? "DataField::" : "Property::") + replaceSpecialChars(relativePath);
|
|
@@ -1075,6 +1077,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1075
1077
|
var sDateInputFormat = property.type === "Edm.Date" ? "YYYY-MM-DD" : undefined;
|
|
1076
1078
|
var dataType = getDataFieldDataType(property);
|
|
1077
1079
|
var propertyTypeConfig = !isDataPointFakeProperty ? getTypeConfig(property, dataType) : undefined;
|
|
1080
|
+
var semanticKeys = converterContext.getAnnotationsByTerm("Common", "com.sap.vocabularies.Common.v1.SemanticKey", [converterContext.getEntityType()])[0];
|
|
1078
1081
|
var oTypeConfig = !isDataPointFakeProperty ? {
|
|
1079
1082
|
className: property.type || dataType,
|
|
1080
1083
|
oFormatOptions: propertyTypeConfig.formatOptions,
|
|
@@ -1126,7 +1129,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1126
1129
|
typeConfig: oTypeConfig,
|
|
1127
1130
|
visualSettings: isDataPointFakeProperty ? {
|
|
1128
1131
|
widthCalculation: null
|
|
1129
|
-
} : undefined
|
|
1132
|
+
} : undefined,
|
|
1133
|
+
importance: getImportance((_annotations3 = property.annotations) === null || _annotations3 === void 0 ? void 0 : (_annotations3$UI = _annotations3.UI) === null || _annotations3$UI === void 0 ? void 0 : _annotations3$UI.DataFieldDefault, semanticKeys)
|
|
1130
1134
|
};
|
|
1131
1135
|
|
|
1132
1136
|
var sTooltip = _getTooltip(property);
|
|
@@ -1171,7 +1175,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1171
1175
|
* SAP Fiori elements will evaluate either the UI.Hidden annotation defined on the annotation itself or on the target property.
|
|
1172
1176
|
*
|
|
1173
1177
|
* @param {DataModelObjectPath} dataFieldModelPath The metapath referring to the annotation that is evaluated by SAP Fiori elements.
|
|
1174
|
-
* @param {
|
|
1178
|
+
* @param {object} [formatOptions] FormatOptions optional.
|
|
1179
|
+
* @param {boolean} formatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
|
|
1175
1180
|
* @param {boolean} [returnExpression] ReturnExpression optional.
|
|
1176
1181
|
* @returns {BindingExpression<string>} An expression that you can bind to the UI.
|
|
1177
1182
|
*/
|
|
@@ -1224,7 +1229,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1224
1229
|
/**
|
|
1225
1230
|
* Returns hidden binding expressions for a field group.
|
|
1226
1231
|
* @param {DataFieldAbstractTypes} dataFieldGroup DataField defined in the annotations
|
|
1227
|
-
* @param {
|
|
1232
|
+
* @param {object} fieldFormatOptions FormatOptions optional.
|
|
1233
|
+
* @param {boolean} fieldFormatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
|
|
1228
1234
|
* @returns {BindingExpression<string>} Compile binding of field group expressions.
|
|
1229
1235
|
* @private
|
|
1230
1236
|
*/
|
|
@@ -1538,102 +1544,223 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1538
1544
|
textLinesEdit: 4
|
|
1539
1545
|
};
|
|
1540
1546
|
}
|
|
1547
|
+
|
|
1548
|
+
function _findSemanticKeyValues(semanticKeys, name) {
|
|
1549
|
+
var aSemanticKeyValues = [];
|
|
1550
|
+
var bSemanticKeyFound = false;
|
|
1551
|
+
|
|
1552
|
+
for (var i = 0; i < semanticKeys.length; i++) {
|
|
1553
|
+
aSemanticKeyValues.push(semanticKeys[i].value);
|
|
1554
|
+
|
|
1555
|
+
if (semanticKeys[i].value === name) {
|
|
1556
|
+
bSemanticKeyFound = true;
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
return {
|
|
1561
|
+
values: aSemanticKeyValues,
|
|
1562
|
+
semanticKeyFound: bSemanticKeyFound
|
|
1563
|
+
};
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
function _findProperties(semanticKeyValues, fieldGroupProperties) {
|
|
1567
|
+
var semanticKeyHasPropertyInFieldGroup = false;
|
|
1568
|
+
var sPropertyPath;
|
|
1569
|
+
|
|
1570
|
+
if (semanticKeyValues && semanticKeyValues.length >= 1 && fieldGroupProperties && fieldGroupProperties.length >= 1) {
|
|
1571
|
+
for (var i = 0; i < semanticKeyValues.length; i++) {
|
|
1572
|
+
if ([semanticKeyValues[i]].some(function (tmp) {
|
|
1573
|
+
return fieldGroupProperties.indexOf(tmp) >= 0;
|
|
1574
|
+
})) {
|
|
1575
|
+
semanticKeyHasPropertyInFieldGroup = true;
|
|
1576
|
+
sPropertyPath = semanticKeyValues[i];
|
|
1577
|
+
break;
|
|
1578
|
+
}
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
return {
|
|
1583
|
+
semanticKeyHasPropertyInFieldGroup: semanticKeyHasPropertyInFieldGroup,
|
|
1584
|
+
fieldGroupPropertyPath: sPropertyPath
|
|
1585
|
+
};
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
function _findSemanticKeyValuesInFieldGroup(dataFieldGroup, semanticKeyValues) {
|
|
1589
|
+
var _dataFieldGroup$Targe4, _dataFieldGroup$Targe5;
|
|
1590
|
+
|
|
1591
|
+
var aProperties = [];
|
|
1592
|
+
var _propertiesFound = {
|
|
1593
|
+
semanticKeyHasPropertyInFieldGroup: false,
|
|
1594
|
+
fieldGroupPropertyPath: undefined
|
|
1595
|
+
};
|
|
1596
|
+
|
|
1597
|
+
if (dataFieldGroup && dataFieldGroup.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && ((_dataFieldGroup$Targe4 = dataFieldGroup.Target) === null || _dataFieldGroup$Targe4 === void 0 ? void 0 : (_dataFieldGroup$Targe5 = _dataFieldGroup$Targe4.$target) === null || _dataFieldGroup$Targe5 === void 0 ? void 0 : _dataFieldGroup$Targe5.$Type) === "com.sap.vocabularies.UI.v1.FieldGroupType") {
|
|
1598
|
+
var _dataFieldGroup$Targe6;
|
|
1599
|
+
|
|
1600
|
+
(_dataFieldGroup$Targe6 = dataFieldGroup.Target.$target.Data) === null || _dataFieldGroup$Targe6 === void 0 ? void 0 : _dataFieldGroup$Targe6.forEach(function (innerDataField) {
|
|
1601
|
+
if ((innerDataField.$Type === "com.sap.vocabularies.UI.v1.DataField" || innerDataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl") && innerDataField.Value) {
|
|
1602
|
+
aProperties.push(innerDataField.Value.path);
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
_propertiesFound = _findProperties(semanticKeyValues, aProperties);
|
|
1606
|
+
});
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
return {
|
|
1610
|
+
semanticKeyHasPropertyInFieldGroup: _propertiesFound.semanticKeyHasPropertyInFieldGroup,
|
|
1611
|
+
propertyPath: _propertiesFound.fieldGroupPropertyPath
|
|
1612
|
+
};
|
|
1613
|
+
}
|
|
1541
1614
|
/**
|
|
1542
1615
|
* Returns default format options with draftIndicator for a column.
|
|
1543
1616
|
* @param name
|
|
1544
1617
|
* @param semanticKeys
|
|
1618
|
+
* @param isFieldGroupColumn
|
|
1619
|
+
* @param dataFieldGroup
|
|
1545
1620
|
* @returns {FormatOptionsType} Collection of format options with default values
|
|
1546
1621
|
*/
|
|
1547
1622
|
|
|
1548
1623
|
|
|
1549
|
-
function getDefaultDraftIndicatorForColumn(name, semanticKeys) {
|
|
1550
|
-
var bSemanticKeyFound = false;
|
|
1551
|
-
var aSemanticKeyValues = [];
|
|
1552
|
-
|
|
1624
|
+
function getDefaultDraftIndicatorForColumn(name, semanticKeys, isFieldGroupColumn, dataFieldGroup) {
|
|
1553
1625
|
if (!semanticKeys) {
|
|
1554
1626
|
return {};
|
|
1555
1627
|
}
|
|
1556
1628
|
|
|
1557
|
-
|
|
1558
|
-
aSemanticKeyValues.push(semanticKeys[i].value);
|
|
1629
|
+
var semanticKey = _findSemanticKeyValues(semanticKeys, name);
|
|
1559
1630
|
|
|
1560
|
-
|
|
1561
|
-
bSemanticKeyFound = true;
|
|
1562
|
-
}
|
|
1563
|
-
}
|
|
1631
|
+
var semanticKeyInFieldGroup = _findSemanticKeyValuesInFieldGroup(dataFieldGroup, semanticKey.values);
|
|
1564
1632
|
|
|
1565
|
-
if (
|
|
1633
|
+
if (semanticKey.semanticKeyFound) {
|
|
1566
1634
|
return {
|
|
1567
1635
|
hasDraftIndicator: true,
|
|
1568
|
-
semantickeys:
|
|
1636
|
+
semantickeys: semanticKey.values,
|
|
1569
1637
|
objectStatusTextVisibility: compileBinding(getRowStatusVisibility())
|
|
1570
1638
|
};
|
|
1571
1639
|
} else {
|
|
1572
|
-
|
|
1640
|
+
if (!semanticKeyInFieldGroup.semanticKeyHasPropertyInFieldGroup) {
|
|
1641
|
+
return {};
|
|
1642
|
+
} else {
|
|
1643
|
+
// Semantic Key has a property in a FieldGroup
|
|
1644
|
+
return {
|
|
1645
|
+
FieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
|
|
1646
|
+
FieldGroupName: name
|
|
1647
|
+
};
|
|
1648
|
+
}
|
|
1573
1649
|
}
|
|
1574
1650
|
}
|
|
1575
|
-
/**
|
|
1576
|
-
* Returns the importance value for an annotation column.
|
|
1577
|
-
* If it is not set explicitly via annotations, the default annotation importance is returned.
|
|
1578
|
-
*
|
|
1579
|
-
* @param lineItem
|
|
1580
|
-
* @param semanticKeys
|
|
1581
|
-
* @returns {Importance} The importance value
|
|
1582
|
-
*/
|
|
1583
1651
|
|
|
1652
|
+
function _getImpNumber(dataField) {
|
|
1653
|
+
var _dataField$annotation20, _dataField$annotation21;
|
|
1584
1654
|
|
|
1585
|
-
|
|
1586
|
-
var _lineItem$annotations, _lineItem$annotations2;
|
|
1655
|
+
var importance = dataField === null || dataField === void 0 ? void 0 : (_dataField$annotation20 = dataField.annotations) === null || _dataField$annotation20 === void 0 ? void 0 : (_dataField$annotation21 = _dataField$annotation20.UI) === null || _dataField$annotation21 === void 0 ? void 0 : _dataField$annotation21.Importance;
|
|
1587
1656
|
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1657
|
+
if (importance && importance.includes("UI.ImportanceType/High")) {
|
|
1658
|
+
return 3;
|
|
1659
|
+
}
|
|
1591
1660
|
|
|
1592
|
-
|
|
1593
|
-
|
|
1661
|
+
if (importance && importance.includes("UI.ImportanceType/Medium")) {
|
|
1662
|
+
return 2;
|
|
1663
|
+
}
|
|
1594
1664
|
|
|
1595
|
-
|
|
1596
|
-
|
|
1665
|
+
if (importance && importance.includes("UI.ImportanceType/Low")) {
|
|
1666
|
+
return 1;
|
|
1667
|
+
}
|
|
1597
1668
|
|
|
1598
|
-
|
|
1599
|
-
|
|
1669
|
+
return 0;
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
function _getDataFieldImportance(dataField) {
|
|
1673
|
+
var _dataField$annotation22, _dataField$annotation23;
|
|
1674
|
+
|
|
1675
|
+
var importance = dataField === null || dataField === void 0 ? void 0 : (_dataField$annotation22 = dataField.annotations) === null || _dataField$annotation22 === void 0 ? void 0 : (_dataField$annotation23 = _dataField$annotation22.UI) === null || _dataField$annotation23 === void 0 ? void 0 : _dataField$annotation23.Importance;
|
|
1676
|
+
return importance ? importance.split("/")[1] : Importance.None;
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
function _getMaxImportance(fields) {
|
|
1680
|
+
if (fields && fields.length > 0) {
|
|
1681
|
+
var maxImpNumber = -1;
|
|
1682
|
+
var impNumber = -1;
|
|
1683
|
+
var DataFieldWithMaxImportance;
|
|
1684
|
+
|
|
1685
|
+
var _iterator = _createForOfIteratorHelper(fields),
|
|
1686
|
+
_step;
|
|
1687
|
+
|
|
1688
|
+
try {
|
|
1689
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1690
|
+
var field = _step.value;
|
|
1691
|
+
impNumber = _getImpNumber(field);
|
|
1692
|
+
|
|
1693
|
+
if (impNumber > maxImpNumber) {
|
|
1694
|
+
maxImpNumber = impNumber;
|
|
1695
|
+
DataFieldWithMaxImportance = field;
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
} catch (err) {
|
|
1699
|
+
_iterator.e(err);
|
|
1700
|
+
} finally {
|
|
1701
|
+
_iterator.f();
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
return _getDataFieldImportance(DataFieldWithMaxImportance);
|
|
1600
1705
|
}
|
|
1706
|
+
|
|
1707
|
+
return Importance.None;
|
|
1601
1708
|
}
|
|
1602
1709
|
/**
|
|
1603
|
-
* Returns the
|
|
1710
|
+
* Returns the importance value for a column.
|
|
1604
1711
|
*
|
|
1605
|
-
* @param
|
|
1712
|
+
* @param dataField
|
|
1606
1713
|
* @param semanticKeys
|
|
1607
1714
|
* @returns {Importance} The importance value
|
|
1608
1715
|
*/
|
|
1609
1716
|
|
|
1610
1717
|
|
|
1611
|
-
function
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1718
|
+
function getImportance(dataField, semanticKeys) {
|
|
1719
|
+
var _Value4;
|
|
1720
|
+
|
|
1721
|
+
//Evaluate default Importance is not set explicitly
|
|
1722
|
+
var fieldsWithImportance, mapSemanticKeys; //Check if semanticKeys are defined at the EntitySet level
|
|
1723
|
+
|
|
1724
|
+
if (semanticKeys && semanticKeys.length > 0) {
|
|
1725
|
+
mapSemanticKeys = semanticKeys.map(function (key) {
|
|
1726
|
+
return key.value;
|
|
1727
|
+
});
|
|
1615
1728
|
}
|
|
1616
1729
|
|
|
1617
|
-
if (
|
|
1618
|
-
|
|
1730
|
+
if (!dataField) {
|
|
1731
|
+
return undefined;
|
|
1732
|
+
}
|
|
1619
1733
|
|
|
1620
|
-
|
|
1734
|
+
if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
|
|
1735
|
+
var fieldGroupData = dataField.Target["$target"]["Data"],
|
|
1736
|
+
fieldGroupHasSemanticKey = fieldGroupData && fieldGroupData.some(function (fieldGroupDataField) {
|
|
1737
|
+
var _Value2, _Value3;
|
|
1621
1738
|
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
return dataField.$Type !== "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && dataField.Value && dataField.Value.path && semanticKeys.find(function (semanticKey) {
|
|
1625
|
-
return semanticKey.value === dataField.Value.path;
|
|
1626
|
-
});
|
|
1627
|
-
}) ? Importance.High : Importance.None;
|
|
1628
|
-
}
|
|
1629
|
-
} //If current field is a semanticKey, importance set to High
|
|
1739
|
+
return (fieldGroupDataField === null || fieldGroupDataField === void 0 ? void 0 : (_Value2 = fieldGroupDataField.Value) === null || _Value2 === void 0 ? void 0 : _Value2.path) && fieldGroupDataField.$Type !== "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && mapSemanticKeys && mapSemanticKeys.includes(fieldGroupDataField === null || fieldGroupDataField === void 0 ? void 0 : (_Value3 = fieldGroupDataField.Value) === null || _Value3 === void 0 ? void 0 : _Value3.path);
|
|
1740
|
+
}); //If a FieldGroup contains a semanticKey, importance set to High
|
|
1630
1741
|
|
|
1742
|
+
if (fieldGroupHasSemanticKey) {
|
|
1743
|
+
return Importance.High;
|
|
1744
|
+
} else {
|
|
1745
|
+
var _dataField$annotation24, _dataField$annotation25;
|
|
1631
1746
|
|
|
1632
|
-
|
|
1633
|
-
|
|
1747
|
+
//If the DataFieldForAnnotation has an Importance we take it
|
|
1748
|
+
if (dataField !== null && dataField !== void 0 && (_dataField$annotation24 = dataField.annotations) !== null && _dataField$annotation24 !== void 0 && (_dataField$annotation25 = _dataField$annotation24.UI) !== null && _dataField$annotation25 !== void 0 && _dataField$annotation25.Importance) {
|
|
1749
|
+
return _getDataFieldImportance(dataField);
|
|
1750
|
+
} // else the highest importance (if any) is returned
|
|
1634
1751
|
|
|
1635
|
-
|
|
1636
|
-
|
|
1752
|
+
|
|
1753
|
+
fieldsWithImportance = fieldGroupData && fieldGroupData.filter(function (item) {
|
|
1754
|
+
var _item$annotations, _item$annotations$UI;
|
|
1755
|
+
|
|
1756
|
+
return item === null || item === void 0 ? void 0 : (_item$annotations = item.annotations) === null || _item$annotations === void 0 ? void 0 : (_item$annotations$UI = _item$annotations.UI) === null || _item$annotations$UI === void 0 ? void 0 : _item$annotations$UI.Importance;
|
|
1757
|
+
});
|
|
1758
|
+
return _getMaxImportance(fieldsWithImportance);
|
|
1759
|
+
} //If the current field is a semanticKey, importance set to High
|
|
1760
|
+
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
return dataField.Value && dataField !== null && dataField !== void 0 && (_Value4 = dataField.Value) !== null && _Value4 !== void 0 && _Value4.path && mapSemanticKeys && mapSemanticKeys.includes(dataField.Value.path) ? Importance.High : _getDataFieldImportance(dataField);
|
|
1637
1764
|
}
|
|
1638
1765
|
/**
|
|
1639
1766
|
* Returns line items from metadata annotations.
|
|
@@ -1645,6 +1772,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1645
1772
|
*/
|
|
1646
1773
|
|
|
1647
1774
|
|
|
1775
|
+
_exports.getImportance = getImportance;
|
|
1776
|
+
|
|
1648
1777
|
var getColumnsFromAnnotations = function (lineItemAnnotation, visualizationPath, converterContext) {
|
|
1649
1778
|
var _tableManifestSetting2;
|
|
1650
1779
|
|
|
@@ -1658,7 +1787,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1658
1787
|
|
|
1659
1788
|
if (lineItemAnnotation) {
|
|
1660
1789
|
lineItemAnnotation.forEach(function (lineItem) {
|
|
1661
|
-
var _lineItem$Value, _lineItem$Value$$targ, _lineItem$Target, _lineItem$Target$$tar, _FE, _lineItem$
|
|
1790
|
+
var _lineItem$Value, _lineItem$Value$$targ, _lineItem$Target, _lineItem$Target$$tar, _FE, _lineItem$annotations, _lineItem$annotations2, _lineItem$annotations3;
|
|
1662
1791
|
|
|
1663
1792
|
if (!_isValidColumn(lineItem)) {
|
|
1664
1793
|
return;
|
|
@@ -1686,7 +1815,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1686
1815
|
var dataType = getDataFieldDataType(lineItem);
|
|
1687
1816
|
var sDateInputFormat = dataType === "Edm.Date" ? "YYYY-MM-DD" : undefined;
|
|
1688
1817
|
|
|
1689
|
-
var formatOptions = _objectSpread(_objectSpread({}, getDefaultFormatOptionsForTable()), getDefaultDraftIndicatorForColumn(name, semanticKeys));
|
|
1818
|
+
var formatOptions = _objectSpread(_objectSpread({}, getDefaultFormatOptionsForTable()), getDefaultDraftIndicatorForColumn(name, semanticKeys, isFieldGroupColumn, lineItem));
|
|
1690
1819
|
|
|
1691
1820
|
var fieldGroupHiddenExpressions;
|
|
1692
1821
|
|
|
@@ -1734,7 +1863,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1734
1863
|
// the columns as needed. This workaround only deals with Date columns.
|
|
1735
1864
|
|
|
1736
1865
|
|
|
1737
|
-
var _getDefaultDraftIndic = getDefaultDraftIndicatorForColumn(name, semanticKeys),
|
|
1866
|
+
var _getDefaultDraftIndic = getDefaultDraftIndicatorForColumn(name, semanticKeys, isFieldGroupColumn, lineItem),
|
|
1738
1867
|
hasDraftIndicator = _getDefaultDraftIndic.hasDraftIndicator;
|
|
1739
1868
|
|
|
1740
1869
|
var widthOverride = (_FE = converterContext.getEntityType().annotations.FE) !== null && _FE !== void 0 && _FE.Situations && hasDraftIndicator && lineItem.$Type === "com.sap.vocabularies.UI.v1.DataField" && lineItem.Value.$target.type === "Edm.Date" ? "11em" : undefined;
|
|
@@ -1755,8 +1884,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1755
1884
|
propertyInfos: relatedPropertyNames.length > 0 ? relatedPropertyNames : undefined,
|
|
1756
1885
|
additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
|
|
1757
1886
|
exportSettings: exportSettings,
|
|
1758
|
-
width: ((_lineItem$
|
|
1759
|
-
importance:
|
|
1887
|
+
width: ((_lineItem$annotations = lineItem.annotations) === null || _lineItem$annotations === void 0 ? void 0 : (_lineItem$annotations2 = _lineItem$annotations.HTML5) === null || _lineItem$annotations2 === void 0 ? void 0 : (_lineItem$annotations3 = _lineItem$annotations2.CssDefaults) === null || _lineItem$annotations3 === void 0 ? void 0 : _lineItem$annotations3.width) || widthOverride || undefined,
|
|
1888
|
+
importance: getImportance(lineItem, semanticKeys),
|
|
1760
1889
|
isNavigable: true,
|
|
1761
1890
|
formatOptions: formatOptions,
|
|
1762
1891
|
exportContactProperty: relatedPropertiesInfo.exportSettingsContactProperty,
|
|
@@ -1969,10 +2098,14 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
1969
2098
|
aPersonalization.push("Sort");
|
|
1970
2099
|
aPersonalization.push("Column");
|
|
1971
2100
|
|
|
1972
|
-
if (
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
2101
|
+
if (converterContext.getTemplateType() === TemplateType.ListReport) {
|
|
2102
|
+
if (variantManagement === VariantManagementType.Control || _isFilterBarHidden(manifestWrapper, converterContext)) {
|
|
2103
|
+
// Feature parity with V2.
|
|
2104
|
+
// Enable table filtering by default only in case of Control level variant management.
|
|
2105
|
+
// Or when the LR filter bar is hidden via manifest setting
|
|
2106
|
+
aPersonalization.push("Filter");
|
|
2107
|
+
}
|
|
2108
|
+
} else {
|
|
1976
2109
|
aPersonalization.push("Filter");
|
|
1977
2110
|
}
|
|
1978
2111
|
|
|
@@ -2406,12 +2539,12 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
2406
2539
|
var oFilterConfiguration = _getFilterConfiguration(tableSettings, lineItemAnnotation, converterContext);
|
|
2407
2540
|
|
|
2408
2541
|
var customValidationFunction = (_tableSettings$creati = tableSettings.creationMode) === null || _tableSettings$creati === void 0 ? void 0 : _tableSettings$creati.customValidationFunction;
|
|
2409
|
-
var condensedTableLayout = tableSettings.condensedTableLayout !== undefined ? tableSettings.condensedTableLayout : false;
|
|
2410
2542
|
var entityType = converterContext.getEntityType();
|
|
2411
2543
|
var aggregationHelper = new AggregationHelper(entityType, converterContext);
|
|
2412
2544
|
|
|
2413
2545
|
var tableType = _getTableType(tableSettings, aggregationHelper, converterContext);
|
|
2414
2546
|
|
|
2547
|
+
var condensedTableLayout = tableSettings.condensedTableLayout !== undefined && tableType !== "ResponsiveTable" ? tableSettings.condensedTableLayout : false;
|
|
2415
2548
|
var oConfiguration = {
|
|
2416
2549
|
createAtEnd: ((_tableSettings$creati2 = tableSettings.creationMode) === null || _tableSettings$creati2 === void 0 ? void 0 : _tableSettings$creati2.createAtEnd) !== undefined ? (_tableSettings$creati3 = tableSettings.creationMode) === null || _tableSettings$creati3 === void 0 ? void 0 : _tableSettings$creati3.createAtEnd : true,
|
|
2417
2550
|
creationMode: ((_tableSettings$creati4 = tableSettings.creationMode) === null || _tableSettings$creati4 === void 0 ? void 0 : _tableSettings$creati4.name) || creationMode,
|
|
@@ -2452,7 +2585,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
2452
2585
|
};
|
|
2453
2586
|
|
|
2454
2587
|
if (isProperty(oProperty)) {
|
|
2455
|
-
var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$annotation6, _oProperty$annotation7, _oProperty$annotation8, _oProperty$annotation9, _oTargetMapping$const6, _oProperty$annotation10, _oProperty$annotation11, _oProperty$annotation12, _oProperty$annotation13, _oTargetMapping$const7,
|
|
2588
|
+
var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$annotation6, _oProperty$annotation7, _oProperty$annotation8, _oProperty$annotation9, _oTargetMapping$const6, _oProperty$annotation10, _oProperty$annotation11, _oProperty$annotation12, _oProperty$annotation13, _oTargetMapping$const7, _annotations4, _annotations4$Common;
|
|
2456
2589
|
|
|
2457
2590
|
propertyTypeConfig.constraints = {
|
|
2458
2591
|
scale: (_oTargetMapping$const = oTargetMapping.constraints) !== null && _oTargetMapping$const !== void 0 && _oTargetMapping$const.$Scale ? oProperty.scale : undefined,
|
|
@@ -2461,7 +2594,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
2461
2594
|
nullable: (_oTargetMapping$const4 = oTargetMapping.constraints) !== null && _oTargetMapping$const4 !== void 0 && _oTargetMapping$const4.$Nullable ? oProperty.nullable : undefined,
|
|
2462
2595
|
minimum: (_oTargetMapping$const5 = oTargetMapping.constraints) !== null && _oTargetMapping$const5 !== void 0 && _oTargetMapping$const5["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_oProperty$annotation6 = oProperty.annotations) === null || _oProperty$annotation6 === void 0 ? void 0 : (_oProperty$annotation7 = _oProperty$annotation6.Validation) === null || _oProperty$annotation7 === void 0 ? void 0 : _oProperty$annotation7.Minimum) ? "".concat((_oProperty$annotation8 = oProperty.annotations) === null || _oProperty$annotation8 === void 0 ? void 0 : (_oProperty$annotation9 = _oProperty$annotation8.Validation) === null || _oProperty$annotation9 === void 0 ? void 0 : _oProperty$annotation9.Minimum) : undefined,
|
|
2463
2596
|
maximum: (_oTargetMapping$const6 = oTargetMapping.constraints) !== null && _oTargetMapping$const6 !== void 0 && _oTargetMapping$const6["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_oProperty$annotation10 = oProperty.annotations) === null || _oProperty$annotation10 === void 0 ? void 0 : (_oProperty$annotation11 = _oProperty$annotation10.Validation) === null || _oProperty$annotation11 === void 0 ? void 0 : _oProperty$annotation11.Maximum) ? "".concat((_oProperty$annotation12 = oProperty.annotations) === null || _oProperty$annotation12 === void 0 ? void 0 : (_oProperty$annotation13 = _oProperty$annotation12.Validation) === null || _oProperty$annotation13 === void 0 ? void 0 : _oProperty$annotation13.Maximum) : undefined,
|
|
2464
|
-
isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7["@com.sap.vocabularies.Common.v1.IsDigitSequence"] && (
|
|
2597
|
+
isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7["@com.sap.vocabularies.Common.v1.IsDigitSequence"] && (_annotations4 = oProperty.annotations) !== null && _annotations4 !== void 0 && (_annotations4$Common = _annotations4.Common) !== null && _annotations4$Common !== void 0 && _annotations4$Common.IsDigitSequence ? true : undefined
|
|
2465
2598
|
};
|
|
2466
2599
|
}
|
|
2467
2600
|
|
|
@@ -2476,4 +2609,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
|
|
|
2476
2609
|
_exports.getTypeConfig = getTypeConfig;
|
|
2477
2610
|
return _exports;
|
|
2478
2611
|
}, false);
|
|
2479
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJpbXBvcnRhbmNlIiwiYXZhaWxhYmlsaXR5Iiwic2V0dGluZ3MiLCJob3Jpem9udGFsQWxpZ24iLCJmb3JtYXRPcHRpb25zIiwiZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJ0YWJsZUNvbHVtbnMiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZmluZENvbHVtbkZyb21QYXRoIiwicGF0aCIsImZpbmQiLCJjb2x1bW4iLCJhbm5vdGF0aW9uQ29sdW1uIiwicHJvcGVydHlJbmZvcyIsInVuZGVmaW5lZCIsInJlbGF0aXZlUGF0aCIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwibUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJvQ29sdW1uIiwib1RhYmxlQ29sdW1uIiwidW5pdCIsImFkZCIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwibVJhd0RlZmluaXRpb25zIiwiYW5ub3RhdGlvbiIsIm9BZ2dyZWdhdGVkUHJvcGVydHkiLCJfZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJvUHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsIm9DdHhEZWZQcm9wZXJ0eSIsInZhbHVlIiwibVJlc3VsdCIsImFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJkZWZhdWx0QWdncmVnYXRlIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwicHVzaCIsImxlbmd0aCIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJ1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiYWdncmVnYXRlcyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzU2VhcmNoIiwiaW5kZXhPZiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwibmF2Q29uZmlnRm9yQ29udGV4dFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJmaW5kQ29sdW1uQnlQYXRoIiwib1Byb3AiLCJvVW5pdCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0IiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiQ29tbW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJhZGRUb01hcCIsImtleSIsImRhdGFGaWVsZCIsIiRUeXBlIiwiYWN0aW9uTmFtZSIsIkFjdGlvbiIsIkRldGVybWluaW5nIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lIiwic2l6ZSIsInRpdGxlUHJvcGVydHkiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJpc0JvdW5kIiwic291cmNlRW50aXR5VHlwZSIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsInZhbHVlT2YiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwidmlzaWJsZSIsInNQYXRoIiwic3Vic3RyaW5nIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic05hdmlnYXRpb25QYXRoIiwidGFyZ2V0T2JqZWN0IiwicGFydG5lciIsImJpbmRpbmdFeHByZXNzaW9uIiwic2xpY2UiLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiZ2V0U2VsZWN0aW9uTW9kZSIsInRhcmdldENhcGFiaWxpdGllcyIsImRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwibWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiIsIlNlbGVjdGlvbk1vZGUiLCJOb25lIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwic2VsZWN0aW9uTW9kZSIsInRhYmxlU2V0dGluZ3MiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJjb21waWxlQmluZGluZyIsImJNYXNzRWRpdEVuYWJsZWQiLCJpZkVsc2UiLCJhbmQiLCJNdWx0aSIsIkF1dG8iLCJTaW5nbGUiLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsInRhYmxlQWN0aW9uIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIkFjdGlvblR5cGUiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJub3QiLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiRGVmYXVsdCIsImdldEhpZ2hsaWdodFJvd0JpbmRpbmciLCJjcml0aWNhbGl0eUFubm90YXRpb24iLCJpc0RyYWZ0Um9vdCIsInRhcmdldEVudGl0eVR5cGUiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsIk1lc3NhZ2VUeXBlIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiYU1pc3NpbmdLZXlzIiwiZm9ybWF0UmVzdWx0IiwiRW50aXR5IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJ0YWJsZUZvcm1hdHRlcnMiLCJyb3dIaWdobGlnaHRpbmciLCJfZ2V0Q3JlYXRpb25CZWhhdmlvdXIiLCJ0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsIm5hdmlnYXRpb24iLCJjcmVhdGUiLCJkZXRhaWwiLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwibmV3QWN0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbnMiLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsIk5ld1BhZ2UiLCJfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIkRyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJuYXZpZ2F0ZWRSb3ciLCJwcmVzcyIsInJvd05hdmlnYXRlZCIsImNvbHVtbnNUb0JlQ3JlYXRlZCIsIm5vblNvcnRhYmxlQ29sdW1ucyIsInRhYmxlVHlwZSIsInByb3BlcnR5IiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5Iiwic2VtYW50aWNLZXlzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJmdWxsUHJvcGVydHlQYXRoIiwidXNlRGF0YUZpZWxkUHJlZml4IiwiYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiIsInJlcGxhY2VTcGVjaWFsQ2hhcnMiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNIaWRkZW4iLCJncm91cFBhdGgiLCJfc2xpY2VBdFNsYXNoIiwiaXNHcm91cCIsImlzRGF0YVBvaW50RmFrZVByb3BlcnR5IiwiZXhwb3J0VHlwZSIsIl9nZXRFeHBvcnREYXRhVHlwZSIsInNEYXRlSW5wdXRGb3JtYXQiLCJkYXRhVHlwZSIsImdldERhdGFGaWVsZERhdGFUeXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm9UeXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpbnB1dEZvcm1hdCIsInNjYWxlIiwiZGVsaW1pdGVyIiwidHJ1ZVZhbHVlIiwiZmFsc2VWYWx1ZSIsIm9Vbml0UHJvcGVydHkiLCJzVW5pdFRleHQiLCJpc0dyb3VwYWJsZSIsImlzUHJvcGVydHlHcm91cGFibGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJfZ2V0TGFiZWwiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCIkdGFyZ2V0Iiwic29ydGFibGUiLCJpc0tleSIsImNhc2VTZW5zaXRpdmUiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJ0eXBlQ29uZmlnIiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwic1Rvb2x0aXAiLCJfZ2V0VG9vbHRpcCIsInRvb2x0aXAiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInJldHVybkV4cHJlc3Npb24iLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJOb2RlTGV2ZWwiLCJfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZGF0YUZpZWxkR3JvdXAiLCJmaWVsZEZvcm1hdE9wdGlvbnMiLCJhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiRGF0YSIsImlubmVyRGF0YUZpZWxkIiwiaXNQcm9wZXJ0eSIsImRhdGFGaWVsZERlZmF1bHQiLCJMYWJlbCIsImlzRGF0YUZpZWxkVHlwZXMiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwibmV3TmFtZSIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsIl9nZXRTaG93RGF0YUZpZWxkc0xhYmVsIiwiZmllbGRHcm91cE5hbWUiLCJvQ29sdW1ucyIsImFDb2x1bW5LZXlzIiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsImxhc3RJbmRleE9mIiwiX2lzQ29sdW1uU29ydGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJpc1NvcnRhYmxlIiwiZmlsdGVyRnVuY3Rpb25zIiwiRmlsdGVyRnVuY3Rpb25zIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiaXNBcnJheSIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNFZGl0IiwiYlNlbWFudGljS2V5Rm91bmQiLCJhU2VtYW50aWNLZXlWYWx1ZXMiLCJpIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzZW1hbnRpY2tleXMiLCJvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eSIsIl9nZXRBbm5vdGF0aW9uSW1wb3J0YW5jZSIsImxpbmVJdGVtIiwiSW1wb3J0YW5jZSIsIkhpZ2giLCJNZWRpdW0iLCJMb3ciLCJfZ2V0RGVmYXVsdEFubm90YXRpb25JbXBvcnRhbmNlIiwidGFyZ2V0RGF0YUZpZWxkIiwic2VtYW50aWNLZXkiLCJnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsInNMYWJlbCIsImlzRmllbGRHcm91cENvbHVtbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiZXhjbHVkZVByb3BlcnRpZXMiLCJ3aWR0aE92ZXJyaWRlIiwiRkUiLCJTaXR1YXRpb25zIiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiZXhwb3J0Q29udGFjdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImludGVybmFsQ29sdW1ucyIsIm1hbmlmZXN0Q29sdW1uIiwidmFsaWRhdGVLZXkiLCJNZXNzYWdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIkFubm90YXRpb25Db2x1bW5zIiwiSW52YWxpZEtleSIsImlkIiwiaGVhZGVyIiwiSG9yaXpvbnRhbEFsaWduIiwiQmVnaW4iLCJTbG90IiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZmllbGRMYWJlbCIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJiQW5hbHl0aWNhbFRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImZpbHRlciIsImFnZ3JlZ2F0ZSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwYXRocyIsImluZm9OYW1lcyIsImN1cnJlbnRQYXRoIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwiYUdyb3VwTGV2ZWxzIiwiZ3JvdXBMZXZlbHMiLCJUb3RhbCIsImFUb3RhbHMiLCJ0aXRsZSIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsIlRhYmxlSUQiLCJjcmVhdGlvbkJlaGF2aW91ciIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJnZXREZWxldGVWaXNpYmlsaXR5IiwiY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRDcmVhdGVWaXNpYmlsaXR5IiwibWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJzdGFuZGFyZEFjdGlvbnMiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwicGFzdGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwibWFzc0VkaXQiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwiY3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsImVudGl0eU5hbWUiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsIm5hdmlnYXRpb25QYXRoIiwicm93IiwiaXNJbkRpc3BsYXlNb2RlIiwiYXV0b0JpbmRPbkluaXQiLCJMaXN0UmVwb3J0Iiwic2VhcmNoYWJsZSIsImlzQ29tcGxleFByb3BlcnR5IiwiZXhwb3J0RGF0YVR5cGUiLCJzdWJzdHIiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwiUHJvcGVydHlQYXRoIiwidGV4dCIsIl9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSIsImlzSXBob25lIiwiZW5hYmxlRnVsbFNjcmVlbiIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVUeXBlIiwiaXNEZXNrdG9wIiwiX2dldEZpbHRlcnMiLCJxdWlja0ZpbHRlclBhdGhzIiwicXVpY2tTZWxlY3Rpb25WYXJpYW50IiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsInF1aWNrVmFyaWFudFNlbGVjdGlvbiIsIl9nZXRFbmFibGVFeHBvcnQiLCJlbmFibGVQYXN0ZSIsImVuYWJsZUV4cG9ydCIsIl9nZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVycyIsImhpZGVUYWJsZVRpdGxlIiwiaGVhZGVyVmlzaWJsZSIsImNoZWNrQ29uZGVuc2VkTGF5b3V0IiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjb25kZW5zZWRUYWJsZUxheW91dCIsIm9Db25maWd1cmF0aW9uIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImVuYWJsZU1hc3NFZGl0Iiwic2VsZWN0aW9uTGltaXQiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0Iiwib1RhcmdldE1hcHBpbmciLCJFRE1fVFlQRV9NQVBQSU5HIiwidW5kZXJseWluZ1R5cGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsInBhcnNlQXNTdHJpbmciLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBOS0EsVTs7YUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7QUFBQUEsSUFBQUEsVTtLQUFBQSxVLEtBQUFBLFU7O0FBK0dMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFdBQVNDLGVBQVQsQ0FDTkMsa0JBRE0sRUFFTkMsaUJBRk0sRUFHTkMsZ0JBSE0sRUFJTkMsa0JBSk0sRUFLUztBQUNmLFFBQU1DLGFBQWEsR0FBR0MseUJBQXlCLENBQUNMLGtCQUFELEVBQXFCQyxpQkFBckIsRUFBd0NDLGdCQUF4QyxDQUEvQztBQUNBLFFBQU1JLGtCQUFrQixHQUFHRixhQUFhLENBQUNHLFlBQXpDO0FBQ0EsUUFBTUMsY0FBYyxHQUFHSixhQUFhLENBQUNLLGtCQUFyQztBQUNBLFdBQU9DLG9CQUFvQixDQUMxQkosa0JBRDBCLEVBRTFCSyxzQkFBc0IsQ0FDckJULGdCQUFnQixDQUFDVSwrQkFBakIsQ0FBaURYLGlCQUFqRCxFQUFvRVksT0FEL0MsRUFFckJYLGdCQUZxQixFQUdyQkksa0JBSHFCLEVBSXJCSCxrQkFKcUIsRUFLckIsSUFMcUIsRUFNckJLLGNBTnFCLENBRkksRUFVMUI7QUFDQ00sTUFBQUEsV0FBVyxFQUFFLFdBRGQ7QUFFQ0MsTUFBQUEsY0FBYyxFQUFFLFdBRmpCO0FBR0NDLE1BQUFBLGdCQUFnQixFQUFFLFdBSG5CO0FBSUNDLE1BQUFB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QUFwQixrRkFBMEJPLE9BQTFCLENBQWtDLGdDQUFsQyxPQUF3RSxDQUR4RSxHQUVHLEtBRkgsR0FHRy9DLFNBTDhCO0FBTWxDaW5CLE1BQUFBLFdBQVcsRUFDVixDQUFBNVMsa0JBQWtCLFNBQWxCLElBQUFBLGtCQUFrQixXQUFsQixzQ0FBQUEsa0JBQWtCLENBQUU3UixJQUFwQixrRkFBMEJPLE9BQTFCLENBQWtDLDZCQUFsQyxPQUFxRSxDQUFyRSxJQUNBLENBQUFzUixrQkFBa0IsU0FBbEIsSUFBQUEsa0JBQWtCLFdBQWxCLHNDQUFBQSxrQkFBa0IsQ0FBRTdSLElBQXBCLGtGQUEwQk8sT0FBMUIsQ0FBa0MsZ0NBQWxDLE9BQXdFLENBRHhFLEdBRUcsRUFGSCxHQUdHL0MsU0FWOEI7QUFXbENrbkIsTUFBQUEscUJBQXFCLEVBQUU3UyxrQkFBa0IsQ0FBQzdSLElBQW5CLEtBQTRCLGdDQUE1QixHQUErRCxJQUEvRCxHQUFzRXhDO0FBWDNELEtBQW5DO0FBYUEsV0FBT3FVLGtCQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRFbnVtVmFsdWUsXG5cdExpbmVJdGVtLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFByb3BlcnR5UGF0aCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0Rm9ybWF0T3B0aW9uc1R5cGUsXG5cdEhvcml6b250YWxBbGlnbixcblx0SW1wb3J0YW5jZSxcblx0TWFuaWZlc3RUYWJsZUNvbHVtbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFNlbGVjdGlvbk1vZGUsXG5cdFRhYmxlQ29sdW1uU2V0dGluZ3MsXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaXN1YWxpemF0aW9uVHlwZVxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSwgUHJvcGVydHksIFR5cGVEZWZpbml0aW9uIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Q29tcGxleFByb3BlcnR5SW5mbyxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0aXNEYXRhRmllbGRBbHdheXNIaWRkZW4sXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkVHlwZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEVudGl0eSwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlLCBJc3N1ZUNhdGVnb3J5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5cbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7XG5cdGlzUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1BhdGhFeHByZXNzaW9uLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZSwgRURNX1RZUEVfTUFQUElORywgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3R5cGVzL2dlbmVyYXRlZC9Db21tb25cIjtcbmltcG9ydCB7IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUsXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0Q3JlYXRlVmlzaWJpbGl0eSxcblx0aXNJbkRpc3BsYXlNb2RlLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0Q3JlYXRpb25Sb3dcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IEJpbmRpbmdFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHRyb3dOYXZpZ2F0ZWQ6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG50eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0ZW5hYmxlTWFzc0VkaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogYm9vbGVhbjtcblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VUYWJsZUNvbHVtbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0d2lkdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0dHlwZTogQ29sdW1uVHlwZTsgLy9PcmlnaW4gb2YgdGhlIHNvdXJjZSB3aGVyZSB3ZSBhcmUgZ2V0dGluZyB0aGUgdGVtcGxhdGVkIGluZm9ybWF0aW9uIGZyb20sXG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xuXHRpbXBvcnRhbmNlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRpc0dyb3VwYWJsZT86IGJvb2xlYW47XG5cdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucz86IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHVuaXRUZXh0Pzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZT86IHN0cmluZztcblx0XHRsYWJlbD86IHN0cmluZztcblx0XHRmaWVsZExhYmVsPzogc3RyaW5nO1xuXHRcdHdyYXA/OiBib29sZWFuO1xuXHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0aW5wdXRGb3JtYXQ/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHRcdHNjYWxlPzogbnVtYmVyO1xuXHRcdGRlbGltaXRlcj86IGJvb2xlYW47XG5cdFx0dHJ1ZVZhbHVlPzogYm9vbGVhbjtcblx0XHRmYWxzZVZhbHVlPzogYm9vbGVhbjtcblx0XHR1bml0Pzogc3RyaW5nO1xuXHRcdHVuaXRQcm9wZXJ0eT86IHN0cmluZztcblx0fTtcblx0aXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHk/OiBib29sZWFuO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGV4cG9ydENvbnRhY3RQcm9wZXJ0eT86IHN0cmluZztcblx0YWRkaXRpb25hbFByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0dmlzdWFsU2V0dGluZ3M/OiBWaXN1YWxTZXR0aW5ncztcblx0dHlwZUNvbmZpZz86IG9iamVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFdpZHRoQ2FsY3VsYXRpb24gPSBudWxsIHwge1xuXHRtaW5XaWR0aD86IG51bWJlcjtcblx0bWF4V2lkdGg/OiBudW1iZXI7XG5cdGRlZmF1bHRXaWR0aD86IG51bWJlcjtcblx0aW5jbHVkZUxhYmVsPzogYm9vbGVhbjtcblx0Z2FwPzogbnVtYmVyO1xuXHQvLyBvbmx5IHJlbGV2YW50IGZvciBjb21wbGV4IHR5cGVzXG5cdGV4Y2x1ZGVQcm9wZXJ0aWVzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cdHZlcnRpY2FsQXJyYW5nZW1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21UYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj47XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZURhdGEgPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGU6IHtcblx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH07XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRhZ2dyZWdhdGVzPzogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT47XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUFuYWx5dGljc1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG59O1xuXG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbi1iYXNlZCBhbmQgbWFuaWZlc3QtYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge0Jhc2VBY3Rpb259IFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGFUYWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucztcblx0Y29uc3QgYUhpZGRlbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9ucyxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uQWN0aW9ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHRydWUsXG5cdFx0XHRhSGlkZGVuQWN0aW9uc1xuXHRcdCksXG5cdFx0e1xuXHRcdFx0aXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVPblNlbGVjdDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVkOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBcIm92ZXJ3cml0ZVwiXG5cdFx0fVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGNvbHVtbnMsIGFubm90YXRpb24tYmFzZWQgYXMgd2VsbCBhcyBtYW5pZmVzdCBiYXNlZC5cbiAqIFRoZXkgYXJlIHNvcnRlZCBhbmQgc29tZSBwcm9wZXJ0aWVzIGNhbiBiZSBvdmVyd3JpdHRlbiB2aWEgdGhlIG1hbmlmZXN0IChjaGVjayBvdXQgdGhlIGtleXMgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4pLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdENvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkNvbHVtbnMsIG1hbmlmZXN0Q29sdW1ucywge1xuXHRcdHdpZHRoOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGltcG9ydGFuY2U6IFwib3ZlcndyaXRlXCIsXG5cdFx0aXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0YXZhaWxhYmlsaXR5OiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHNldHRpbmdzOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGhvcml6b250YWxBbGlnbjogXCJvdmVyd3JpdGVcIixcblx0XHRmb3JtYXRPcHRpb25zOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoY29sdW1uID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi51bml0KSB7XG5cdFx0XHRtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZChvVGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBtUmF3RGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQob1Byb3BlcnR5ID0+IHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cblx0XHRpZiAob0FnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdG1SYXdEZWZpbml0aW9uc1tvQWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcblx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAob0N0eERlZlByb3BlcnR5ID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ3R4RGVmUHJvcGVydHkudmFsdWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBtUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gbVJhd0RlZmluaXRpb25zW29UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZSBhbmQgZHVtbXkgY3JlYXRlZCBwcm9wZXJ0eSBmb3IgZGF0YXBvaW50IHRhcmdldCBWYWx1ZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJlxuXHRcdFx0XHQhbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMob1RhYmxlQ29sdW1uLm5hbWUpICYmXG5cdFx0XHRcdCFvVGFibGVDb2x1bW4uaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHlcblx0XHRcdCkge1xuXHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdFx0XHRkZWZhdWx0QWdncmVnYXRlOiB7fSxcblx0XHRcdFx0XHRyZWxhdGl2ZVBhdGg6IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmZvckVhY2goY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lID0+IHtcblx0XHRcdFx0XHRjb25zdCBvQ29sdW1uID0gZmluZENvbHVtbkZyb21QYXRoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Db2x1bW4pIHtcblx0XHRcdFx0XHRcdGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLnB1c2gob0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1SZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlc1xuKSB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRlc0RlZmluaXRpb25zID0gZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+PSAwIDogdHJ1ZTtcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKGNvbHVtbiA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChvUHJvcDogUHJvcGVydHkpID0+IG9Qcm9wLm5hbWUgPT09IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBvVW5pdCA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRcdFx0XHRpZiAob1VuaXQpIHtcblx0XHRcdFx0XHRjb25zdCBvVW5pdENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgob1VuaXQubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXQgPSBvVW5pdENvbHVtbj8ubmFtZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzVW5pdCA9IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0XHRcdFx0XHRpZiAoc1VuaXQpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0VGV4dCA9IGAke3NVbml0fWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdHRleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dDtcblx0XHRcdFx0aWYgKGlzUGF0aEV4cHJlc3Npb24odGV4dEFubm90YXRpb24pICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHtcblx0XHRcdFx0XHRjb25zdCBvVGV4dENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgodGV4dEFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9UZXh0Q29sdW1uICYmIG9UZXh0Q29sdW1uLm5hbWUgIT09IG9UYWJsZUNvbHVtbi5uYW1lKSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGV4dEFycmFuZ2VtZW50ID0ge1xuXHRcdFx0XHRcdFx0XHR0ZXh0UHJvcGVydHk6IG9UZXh0Q29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHRcdG1vZGU6IGRpc3BsYXlNb2RlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudD86IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudFxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGdldFRhYmxlQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpKSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dClcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSh7fSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIFtdLCBbXSwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgb2YgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHMgZm9yIGFsbCBEYXRhRmllbGRGb3JBY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0Y29uc3QgYWRkVG9NYXAgPSBmdW5jdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcFtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0aWYgKGFjdGlvbk5hbWU/LmluZGV4T2YoXCIvXCIpIDwgMCAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldDtcblx0XHRcdFx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIGV4cGxpY2l0bHkgY29uZmlndXJlZCB3aXRoIG51bGwgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGF0ZWQpXG5cdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCBudWxsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHRhcmdldEV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0XHRcdFx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0RXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRpb25BdmFpbGFibGVNYXA7XG59XG5cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHVwZGF0YWJsZSBwcm9wZXJ0eSBmb3IgdGhlIHJvd3NcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgdXBkYXRhYmxlID0gcmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSAoZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIGFueSk/LnBhdGg7XG5cblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvcGVyYXRpb25BdmFpbGFibGVNYXAgVGhlIHJlY29yZCBjb25zaXN0aW5nIG9mIGFjdGlvbnMgYW5kIHRoZWlyIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIENTViBzdHJpbmcgb2YgYWxsIHByb3BlcnR5IHBhdGhzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXTtcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSBudWxsKSB7XG5cdFx0XHQvLyBBbm5vdGF0aW9uIGNvbmZpZ3VyZWQgd2l0aCBleHBsaWNpdCAnbnVsbCcgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGV2YW50KVxuXHRcdFx0cHJvcGVydGllcy5hZGQoYWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydHkgcGF0aHMgYW5kIG5vdCBDb25zdGFudCB2YWx1ZXMuXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHByb3BlcnRpZXMpLmpvaW4oXCIsXCIpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogcmV0dXJucyBhbGwgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB1c2VkIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGRhdGFGaWVsZCA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKFxuXHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0Z2V0QmluZGluZ0V4cEZyb21Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0XHRcdFx0aXNFbnRpdHlTZXRcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBjb250ZXh0IGN1cnJlbnRseSByZWZlcmVuY2VkIGJ5IHRoaXMgYmluZGluZyBieSByZW1vdmluZyB0aGUgbGFzdCBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICpcbiAqIEl0IGlzIHVzZWQgKHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UpLCB0byB0cmFuc2Zvcm0gYSBiaW5kaW5nIG1hZGUgZm9yIGEgTmF2UHJvcCBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxL05hdlByb3AyLFxuICogaW50byBhIGJpbmRpbmcgb24gdGhlIHByZXZpb3VzIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0QmluZGluZ0V4cEZyb21Db250ZXh0KFxuXHRzb3VyY2U6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBFeHByZXNzaW9uPGFueT4ge1xuXHRsZXQgc0V4cHJlc3Npb246IGFueSB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdChzb3VyY2UgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdChzb3VyY2UgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHQpIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdH0gZWxzZSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIEN1c3RvbUFjdGlvbik/LnZpc2libGU7XG5cdH1cblx0bGV0IHNQYXRoOiBzdHJpbmc7XG5cdGlmIChzRXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChzUGF0aCkge1xuXHRcdGlmICgoc291cmNlIGFzIEN1c3RvbUFjdGlvbik/LnZpc2libGUpIHtcblx0XHRcdHNQYXRoID0gc1BhdGguc3Vic3RyaW5nKDEsIHNQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRpZiAoc1BhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVNwbGl0UGF0aFswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiZcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhcnRuZXIgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbihhU3BsaXRQYXRoLnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSwgaWYgaXQncyBhbiBlbnRpdHlTZXQsIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgaGFzIHRvIGJlIHJldHVybmVkOlxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbihzUGF0aCk7XG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlIGV4cHJlc3Npb24gYmluZGluZyBjYW5ub3QgYmUgdGFrZW4gaW50byBhY2NvdW50IGZvciB0aGUgc2VsZWN0aW9uIG1vZGUgZXZhbHVhdGlvbjpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmQgY2hlY2tcbiAqIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0YWJsZSB0b29sYmFyIChhbmQgcmVxdWlyZXMgYSBjb250ZXh0KS5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoZGF0YUZpZWxkID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZShhY3Rpb25LZXkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIEFycmF5PEV4cHJlc3Npb248Ym9vbGVhbj4+IEFsbCB0aGUgdmlzaWJsZSBwYXRoIGV4cHJlc3Npb25zIG9mIHRoZSBhY3Rpb25zIHRoYXQgbWVldCB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaChhY3Rpb25LZXkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlICYmIGFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8qVGhlIGZpbmFsIGFpbSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgcGF0aCBleHByZXNzaW9uIGRlcGVuZHMgb24gdGhlIHBhcmVudCBjb250ZXh0XG5cdFx0XHRcdFx0YW5kIGNvbnNpZGVycyBvbmx5IHRob3NlIGV4cHJlc3Npb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLFxuXHRcdFx0XHRcdGJ1dCBjdXJyZW50bHkgbm90IHBvc3NpYmxlIGZyb20gdGhlIG1hbmlmZXN0IGFzIHRoZSB2aXNpYmxlIGtleSBpcyBib3VuZCBvbiB0aGUgcGFyZW50IGVudGl0eS5cblx0XHRcdFx0XHRUcmlja3kgdG8gZGlmZmVyZW50aWF0ZSB0aGUgcGF0aCBhcyBpdCdzIGRvbmUgZm9yIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdFx0XHRGb3IgdGhlIHRpbWUgYmVpbmcgd2UgY29uc2lkZXIgYWxsIHRoZSBwYXRocyBvZiB0aGUgbWFuaWZlc3QqL1xuXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBwYXRoIGlzIHN0YXRpY2FsbHkgZGVsZXRhYmxlIG9yIHVwZGF0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9ufSBUaGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0VudGl0eVNldDogYm9vbGVhbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24/OiBFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVCaW5kaW5nKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cblx0Y29uc3QgYk1hc3NFZGl0RW5hYmxlZDogYm9vbGVhbiA9ICFpc0NvbnN0YW50KG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pIHx8IG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24udmFsdWUgIT09IGZhbHNlO1xuXHRpZiAoc2VsZWN0aW9uTW9kZSAmJiBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUgJiYgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pIHtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gTWFzcyBFZGl0IGluIE9QIGlzIGVuYWJsZWQgb25seSBpbiBlZGl0IG1vZGUuXG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoXCJNdWx0aVwiKSxcblx0XHRcdFx0XHRpZkVsc2UoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KFwiTXVsdGlcIiksIGNvbnN0YW50KFwiTm9uZVwiKSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KFwiTXVsdGlcIiksIGNvbnN0YW50KFwiTm9uZVwiKSkpO1xuXHR9XG5cdGlmICghc2VsZWN0aW9uTW9kZSB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkF1dG8pIHtcblx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXHRpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIE92ZXJyaWRlIGRlZmF1bHQgc2VsZWN0aW9uIG1vZGUgd2hlbiBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdHNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA/IFNlbGVjdGlvbk1vZGUuU2luZ2xlIDogU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0aXNFbnRpdHlTZXRcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsIC8vIGRlZmF1bHQgZGVsZXRlIHZpc2liaWxpdHkgYXMgdHJ1ZVxuXHRcdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGFuZChlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFwiTm9uZVwiKSkpO1xuXHRcdFx0Ly8gRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0fVxuXHRcdC8vIFRoZXJlIGFyZSBhY3Rpb25zIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdH0gZWxzZSBpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gVXNlIHNlbGVjdGlvbk1vZGUgaW4gZWRpdCBtb2RlIGlmIGRlbGV0ZSBpcyBlbmFibGVkIG9yIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0XHRjb25zdCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0XHRiTWFzc0VkaXRFbmFibGVkICYmICF0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUsXG5cdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksIGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL0VudGl0eVNldCBkZWxldGFibGU6XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBFeGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdC8vRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyksIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPEJhc2VBY3Rpb24sIEJhc2VBY3Rpb24+fSBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0IShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5EZXRlcm1pbmluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uczogaGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhTWlzc2luZ0tleXM6IGFueVtdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcblx0XHRpZiAoa2V5Lm5hbWUgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YU1pc3NpbmdLZXlzLnB1c2goYmluZGluZ0V4cHJlc3Npb24oa2V5Lm5hbWUsIHVuZGVmaW5lZCkpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdGJpbmRpbmdFeHByZXNzaW9uKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290ICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdCAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdH1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCBhcyBzdHJpbmcsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247IC8vIFRPRE86IElzIHRoZXJlIHJlYWxseSBubyAnTmV3QWN0aW9uJyBvbiBEcmFmdE5vZGU/IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZT8uTmV3QWN0aW9uXG5cblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbmV3QWN0aW9uKSB7XG5cdFx0XHQvLyBBIGNvbWJpbmF0aW9uIG9mICdDcmVhdGlvblJvdycgYW5kICdOZXdBY3Rpb24nIGRvZXMgbm90IG1ha2Ugc2Vuc2Vcblx0XHRcdC8vIFRPRE86IE9yIGRvZXMgaXQ/XG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuXG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRpZiAobmF2aWdhdGlvblNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheT8udGFyZ2V0IHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/Lm91dGJvdW5kO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XCIuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJ1wiICsgbmF2aWdhdGlvblRhcmdldCArIFwiJywgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0pXCI7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdFx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0ISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCAhIXRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlLFxuXHRcdFx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0XCJBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICdcIiArXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFx0XCInLCBlZGl0YWJsZSA6IFwiICtcblx0XHRcdFx0XHQodGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdFx0OiBcInVuZGVmaW5lZFwiKSArXG5cdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LCBmYWxzZSwgdGFyZ2V0RW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUJpbmRpbmcoY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlQmluZGluZyhyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbihcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIiwgW1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XSlbMF07XG5cdFx0XHRjb25zdCBvQ29sdW1uRHJhZnRJbmRpY2F0b3IgPSBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oY29sdW1uSW5mby5uYW1lLCBzZW1hbnRpY0tleXMpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9Db2x1bW5EcmFmdEluZGljYXRvcikubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0NvbHVtbkRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51bml0ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lc1xuICogQHBhcmFtIHtBZ2dyZWdhdGlvbkhlbHBlcn0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uSGVscGVyIGZvciB0aGUgZW50aXR5XG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1ufSBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0dXNlRGF0YUZpZWxkUHJlZml4OiBib29sZWFuLFxuXHRhdmFpbGFibGVGb3JBZGFwdGF0aW9uOiBib29sZWFuLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbiB7XG5cdGNvbnN0IG5hbWUgPSB1c2VEYXRhRmllbGRQcmVmaXggPyByZWxhdGl2ZVBhdGggOiBcIlByb3BlcnR5OjpcIiArIHJlbGF0aXZlUGF0aDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk6IGJvb2xlYW4gPSBuYW1lLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTE7XG5cdGNvbnN0IGV4cG9ydFR5cGU6IHN0cmluZyA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlKTtcblx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShwcm9wZXJ0eSk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9ICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IGdldFR5cGVDb25maWcocHJvcGVydHksIGRhdGFUeXBlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHQ/IHtcblx0XHRcdFx0Y2xhc3NOYW1lOiBwcm9wZXJ0eS50eXBlIHx8IGRhdGFUeXBlLFxuXHRcdFx0XHRvRm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdG9Db25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGV4cG9ydFNldHRpbmdzOiBhbnkgPSBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChwcm9wZXJ0eSlcblx0XHQgIH1cblx0XHQ6IHtcblx0XHRcdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdFx0ZGVsaW1pdGVyOiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHR0cnVlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiWWVzXCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZhbHNlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiTm9cIiA6IHVuZGVmaW5lZFxuXHRcdCAgfTtcblxuXHRpZiAoIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5KSB7XG5cdFx0Y29uc3Qgb1VuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBzVW5pdFRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdGlmIChvVW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSBvVW5pdFByb3BlcnR5Lm5hbWU7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHR9IGVsc2UgaWYgKHNVbml0VGV4dCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IGAke3NVbml0VGV4dH1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9Db2x1bW46IGFueSA9IHtcblx0XHRrZXk6IGtleSxcblx0XHRpc0dyb3VwYWJsZTogIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmICFpc0hpZGRlbiA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogZmFsc2UsXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBfZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwocHJvcGVydHkpIDogbnVsbCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBmb3IgdGhlIFRhcmdldFZhbHVlIHVzZWQgb24gRGF0YVBvaW50cywgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuIGFuZCBub24gc29ydGFibGVcblx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdFx0PyAocHJvcGVydHkgYXMgYW55KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGggfHwgKHByb3BlcnR5IGFzIGFueSkuVmFsdWUucGF0aFxuXHRcdFx0OiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6ICFpc0hpZGRlbiAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkXG5cdH07XG5cdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAocHJvcGVydHkpO1xuXHRpZiAoc1Rvb2x0aXApIHtcblx0XHRvQ29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXG5cdHJldHVybiBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtEYXRhTW9kZWxPYmplY3RQYXRofSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKiBAcGFyYW0ge0ZpZWxkRm9ybWF0T3B0aW9uc30gW2Zvcm1hdE9wdGlvbnNdIEZvcm1hdE9wdGlvbnMgaXMgb3B0aW9uYWwsIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGFuYWx5dGljIHRhYmxlIGhhcyBHcm91cEhlYWRlciBleHBhbmRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybkV4cHJlc3Npb25dIFJldHVybkV4cHJlc3Npb24gb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmb3JtYXRPcHRpb25zPzogYW55LFxuXHRyZXR1cm5FeHByZXNzaW9uOiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRsZXQgcHJvcGVydHlWYWx1ZTtcblx0aWYgKHRhcmdldE9iamVjdCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0T2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHQvLyBpZiBpdCBpcyBhIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQ/LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6IGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gZXF1YWwoVUkuTm9kZUxldmVsLCAwKSA6IGNvbnN0YW50KGZhbHNlKTtcblxuXHQvLyBBIGRhdGEgZmllbGQgaXMgdmlzaWJsZSBpZjpcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIG9yaWdpbmFsIGFubm90YXRpb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSB0YXJnZXQgcHJvcGVydHkgZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gaW4gY2FzZSBvZiBBbmFseXRpY3MgaXQncyBub3QgdmlzaWJsZSBmb3IgYW4gZXhwYW5kZWQgR3JvdXBIZWFkZXJcblx0Y29uc3QgZXhwcmVzc2lvbiA9IGFuZChcblx0XHQuLi5bXG5cdFx0XHRub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdGlmRWxzZSghIXByb3BlcnR5VmFsdWUsIHByb3BlcnR5VmFsdWUgJiYgbm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksIHRydWUpLFxuXHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdF1cblx0KTtcblx0cmV0dXJuIHJldHVybkV4cHJlc3Npb24gPyAoKGV4cHJlc3Npb24gYXMgYW55KSBhcyBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+KSA6IGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSB7RmllbGRGb3JtYXRPcHRpb25zfSBbZmllbGRGb3JtYXRPcHRpb25zXSBGb3JtYXRPcHRpb25zIGlzIG9wdGlvbmFsLCB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhbmFseXRpYyB0YWJsZSBoYXMgR3JvdXBIZWFkZXIgZXhwYW5kZWQuXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gQ29tcGlsZSBiaW5kaW5nIG9mIGZpZWxkIGdyb3VwIGV4cHJlc3Npb25zLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uKFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBhbnlcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0KSB7XG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMpID0+IHtcblx0XHRcdGFGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMucHVzaChcblx0XHRcdFx0X2dldFZpc2libGVFeHByZXNzaW9uKHsgdGFyZ2V0T2JqZWN0OiBpbm5lckRhdGFGaWVsZCB9IGFzIERhdGFNb2RlbE9iamVjdFBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSlcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0aWZFbHNlKG9yKC4uLigoYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBhcyBhbnkpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKSksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5fSBbcHJvcGVydHldIFByb3BlcnR5IG9yIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIHtzdHJpbmd9IExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRMYWJlbCA9IGZ1bmN0aW9uKHByb3BlcnR5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHksIGlzR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0aWYgKGRhdGFGaWVsZERlZmF1bHQgJiYgIWRhdGFGaWVsZERlZmF1bHQucXVhbGlmaWVyICYmIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5hbm5vdGF0aW9ucy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKHNvdXJjZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IGRhdGFwb2ludFRhcmdldCA9IHNvdXJjZS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50O1xuXHRcdHJldHVybiBkYXRhcG9pbnRUYXJnZXQ/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dTdGF0dXNWaXNpYmlsaXR5KCk6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtiaW5kaW5nRXhwcmVzc2lvbihgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksIGJpbmRpbmdFeHByZXNzaW9uKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgZWFjaCBpZGVudGlmaWVkIHByb3BlcnR5IGNvbnN1bWVkIGJ5IGEgTGluZUl0ZW0uXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT59IGNvbHVtbnNUb0JlQ3JlYXRlZCBJZGVudGlmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW4gbmFtZXMgd2hpY2ggY2Fubm90IGJlIHNvcnRlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBmb3IgdGhlIExpbmVJdGVtXG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1uW119IFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRPYmplY3Qua2V5cyhjb2x1bW5zVG9CZUNyZWF0ZWQpLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2FzZSAxOiBLZXkgY29udGFpbnMgRGF0YUZpZWxkIHByZWZpeCB0byBlbnN1cmUgYWxsIHByb3BlcnR5IGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSBrZXkgZm9ybWF0LlxuXHRcdFx0Ly8gTmV3IGNyZWF0ZWQgcHJvcGVydHkgY29sdW1uIGlzIHNldCB0byBoaWRkZW4uXG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fFxuXHRcdFx0KHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcyAmJiByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5kZXhPZihuYW1lKSAhPT0gLTEpXG5cdFx0KSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW4gYW5kXG5cdFx0XHQvLyBib3RoIGNhc2VzIHJlcXVpcmUgYSBkdW1teSBQcm9wZXJ0eUluZm8gZm9yIHNldHRpbmcgY29ycmVjdCBleHBvcnQgc2V0dGluZ3MuXG5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBcIlByb3BlcnR5OjpcIiArIG5hbWU7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgcHJvcGVydHkgY29sdW1uIHdpdGggJ1Byb3BlcnR5OjonIHByZWZpeCxcblx0XHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiBhcyBpdCBpcyBvbmx5IGNvbnN1bWVkIGJ5IENvbXBsZXggcHJvcGVydHkgaW5mb3MuXG5cdFx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcblx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAocHJvcGVydHlJbmZvID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0cHJvcGVydHlJbmZvID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHQpO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZEdyb3VwTmFtZSBUaGUgYERhdGFGaWVsZGAgbmFtZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IGBzaG93RGF0YUZpZWxkc0xhYmVsYCB2YWx1ZSBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbihmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24oa2V5OiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBrZXkgPT09IGZpZWxkR3JvdXBOYW1lICYmIG9Db2x1bW5zW2tleV0uc2hvd0RhdGFGaWVsZHNMYWJlbDtcblx0XHR9KVxuXHQpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgZW50aXR5LlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgYERhdGFGaWVsZGAgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHJlbGF0aXZlIHBhdGhcbiAqL1xuY29uc3QgX2dldFJlbGF0aXZlUGF0aCA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGUuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgQ29sbGVjdGlvbiBvZiBub24tc29ydGFibGUgY29sdW1uIG5hbWVzIGFzIHBlciBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRpZiAobm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHQvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGlzU29ydGFibGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Ly8gQWN0aW9uIGNvbHVtbnMgYXJlIG5vdCBzb3J0YWJsZVxuXHRcdFx0XHRpc1NvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaXNTb3J0YWJsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGZpbHRlcmluZyBvbiB0aGUgdGFibGUgaXMgY2FzZSBzZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdHJldHVybiB7XG5cdFx0dGV4dExpbmVzRWRpdDogNFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgZGVmYXVsdCBmb3JtYXQgb3B0aW9ucyB3aXRoIGRyYWZ0SW5kaWNhdG9yIGZvciBhIGNvbHVtbi5cbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcmV0dXJucyB7Rm9ybWF0T3B0aW9uc1R5cGV9IENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZTogc3RyaW5nLCBzZW1hbnRpY0tleXM6IGFueVtdKSB7XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdGlmIChiU2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogdHJ1ZSxcblx0XHRcdHNlbWFudGlja2V5czogYVNlbWFudGljS2V5VmFsdWVzLFxuXHRcdFx0b2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHk6IGNvbXBpbGVCaW5kaW5nKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkoKSlcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGFuIGFubm90YXRpb24gY29sdW1uLlxuICogSWYgaXQgaXMgbm90IHNldCBleHBsaWNpdGx5IHZpYSBhbm5vdGF0aW9ucywgdGhlIGRlZmF1bHQgYW5ub3RhdGlvbiBpbXBvcnRhbmNlIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbVxuICogQHBhcmFtIHNlbWFudGljS2V5c1xuICogQHJldHVybnMge0ltcG9ydGFuY2V9IFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIF9nZXRBbm5vdGF0aW9uSW1wb3J0YW5jZShsaW5lSXRlbTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2Uge1xuXHRzd2l0Y2ggKGxpbmVJdGVtLmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSkge1xuXHRcdGNhc2UgXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCI6XG5cdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5IaWdoO1xuXHRcdGNhc2UgXCJVSS5JbXBvcnRhbmNlVHlwZS9NZWRpdW1cIjpcblx0XHRcdHJldHVybiBJbXBvcnRhbmNlLk1lZGl1bTtcblx0XHRjYXNlIFwiVUkuSW1wb3J0YW5jZVR5cGUvTG93XCI6XG5cdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5Mb3c7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBfZ2V0RGVmYXVsdEFubm90YXRpb25JbXBvcnRhbmNlKGxpbmVJdGVtLCBzZW1hbnRpY0tleXMpO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVmYXVsdCBpbXBvcnRhbmNlIHZhbHVlIGZvciBhbiBhbm5vdGF0aW9uIGNvbHVtbiBhcyBpbmZlcnJlZCBieSBzZW1hbnRpYyBrZXkgY29uZmlndXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcmV0dXJucyB7SW1wb3J0YW5jZX0gVGhlIGltcG9ydGFuY2UgdmFsdWVcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRBbm5vdGF0aW9uSW1wb3J0YW5jZShsaW5lSXRlbTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2Uge1xuXHQvL0NoZWNrIGlmIHNlbWFudGljS2V5cyBhcmUgZGVmaW5lZCBhdCB0aGUgRW50aXR5U2V0IGxldmVsXG5cdGlmICghc2VtYW50aWNLZXlzIHx8IHNlbWFudGljS2V5cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xuXHR9XG5cblx0aWYgKGxpbmVJdGVtLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RGF0YUZpZWxkID0gKGxpbmVJdGVtIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldDtcblxuXHRcdC8vSWYgYSBGaWVsZEdyb3VwIGNvbnRhaW5zIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHRpZiAodGFyZ2V0RGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0cmV0dXJuICgodGFyZ2V0RGF0YUZpZWxkIGFzIHVua25vd24pIGFzIEZpZWxkR3JvdXBUeXBlKS5EYXRhLnNvbWUoKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdCgoZGF0YUZpZWxkIGFzIHVua25vd24pIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZSAmJlxuXHRcdFx0XHRcdCgoZGF0YUZpZWxkIGFzIHVua25vd24pIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoICYmXG5cdFx0XHRcdFx0c2VtYW50aWNLZXlzLmZpbmQoc2VtYW50aWNLZXkgPT4gc2VtYW50aWNLZXkudmFsdWUgPT09ICgoZGF0YUZpZWxkIGFzIHVua25vd24pIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdFx0PyBJbXBvcnRhbmNlLkhpZ2hcblx0XHRcdFx0OiBJbXBvcnRhbmNlLk5vbmU7XG5cdFx0fVxuXHR9XG5cblx0Ly9JZiBjdXJyZW50IGZpZWxkIGlzIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0cmV0dXJuIHNlbWFudGljS2V5cy5maW5kKHNlbWFudGljS2V5ID0+IHNlbWFudGljS2V5LnZhbHVlID09PSAobGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlPy5wYXRoKVxuXHRcdD8gSW1wb3J0YW5jZS5IaWdoXG5cdFx0OiBJbXBvcnRhbmNlLk5vbmU7XG59XG5cbi8qKlxuICogUmV0dXJucyBsaW5lIGl0ZW1zIGZyb20gbWV0YWRhdGEgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge30sXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSxcblx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHR0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiLCBbXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XSlbMF07XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChsaW5lSXRlbSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgcHJvcGVydGllcyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhpcyBMaW5lSXRlbS5cblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KGxpbmVJdGVtLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZVR5cGUpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nID0gX3NsaWNlQXRTbGFzaChyZWxhdGl2ZVBhdGgsIHRydWUsIGZhbHNlKTtcblx0XHRcdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcmVsYXRpdmVQYXRoO1xuXHRcdFx0Y29uc3Qgc0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBfZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4gPSBncm91cFBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID4gLTE7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4uZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpLFxuXHRcdFx0XHQuLi5nZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzKVxuXHRcdFx0fTtcblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxpbmVJdGVtLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRcdGxpbmVJdGVtLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyhsaW5lSXRlbSwgZm9ybWF0T3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBleHBvcnRTZXR0aW5nczogYW55ID0ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzVGVtcGxhdGUsXG5cdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nLFxuXHRcdFx0XHR0eXBlOiBkYXRhVHlwZSA/IF9nZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGlucHV0Rm9ybWF0OiBzRGF0ZUlucHV0Rm9ybWF0LFxuXHRcdFx0XHRkZWxpbWl0ZXI6IGRhdGFUeXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHR0cnVlVmFsdWU6IGRhdGFUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgPyBcIlllc1wiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRmYWxzZVZhbHVlOiBkYXRhVHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiID8gXCJOb1wiIDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nKSB7XG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGRhdGFUeXBlICYmIGdldFR5cGVDb25maWcobGluZUl0ZW0sIGRhdGFUeXBlKTtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gcHJvcGVydHlUeXBlQ29uZmlnXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiBkYXRhVHlwZSxcblx0XHRcdFx0XHRcdG9Gb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b0NvbnN0cmFpbnRzOiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHZpc3VhbFNldHRpbmdzOiBWaXN1YWxTZXR0aW5ncyA9IHt9O1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby52aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbiB3aXRoIGRpc3BsYXkgbW9kZSBhcyB0ZXh0IG9ubHksIGV4Y2x1ZGUgdGV4dCBwcm9wZXJ0eSBmcm9tIHRoZSB3aWR0aCBjYWxjdWxhdGlvblxuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0XHRleGNsdWRlUHJvcGVydGllczogW1wiUHJvcGVydHk6OlwiICsgcmVsYXRlZFByb3BlcnRpZXNJbmZvLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIWRhdGFUeXBlIHx8ICFvVHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUT0RPOiBGb3Igc2l0dWF0aW9uIFBPQyAtIGluY3JlYXNlIHdpZHRoIG9mIHRoZSBjb2x1bW4gd2l0aCB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgLSB3b3JrcyBmb3IgdGhlIHNpdHVhdGlvbnMgZGVtbyBhcHAgb25seSFcblx0XHRcdC8vIE1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIG1vdmUgdGhlIGNvbXBsZXRlIGNvbHVtbiB3aWR0aCBkZXRlcm1pbmF0aW9uIHRvIHRoZSBjb252ZXJ0ZXIsIHRoYXQgd291bGQgYWxsb3cgdXMgdG8gd2lkZW5cblx0XHRcdC8vIHRoZSBjb2x1bW5zIGFzIG5lZWRlZC4gVGhpcyB3b3JrYXJvdW5kIG9ubHkgZGVhbHMgd2l0aCBEYXRlIGNvbHVtbnMuXG5cdFx0XHRjb25zdCB7IGhhc0RyYWZ0SW5kaWNhdG9yIH0gPSBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzKTtcblx0XHRcdGNvbnN0IHdpZHRoT3ZlcnJpZGUgPVxuXHRcdFx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMgYXMgYW55KS5GRT8uU2l0dWF0aW9ucyAmJlxuXHRcdFx0XHRoYXNEcmFmdEluZGljYXRvciAmJlxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkICYmXG5cdFx0XHRcdGxpbmVJdGVtLlZhbHVlLiR0YXJnZXQudHlwZSA9PT0gXCJFZG0uRGF0ZVwiXG5cdFx0XHRcdFx0PyBcIjExZW1cIlxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0XHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IF9nZXRMYWJlbChsaW5lSXRlbSkgOiBudWxsLFxuXHRcdFx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbihsaW5lSXRlbSkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbDogc2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBfaXNDb2x1bW5Tb3J0YWJsZShsaW5lSXRlbSwgcmVsYXRpdmVQYXRoLCBub25Tb3J0YWJsZUNvbHVtbnMpLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gcmVsYXRlZFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zOiBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gYWRkaXRpb25hbFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBleHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0d2lkdGg6IGxpbmVJdGVtLmFubm90YXRpb25zPy5IVE1MNT8uQ3NzRGVmYXVsdHM/LndpZHRoIHx8IHdpZHRoT3ZlcnJpZGUgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBfZ2V0QW5ub3RhdGlvbkltcG9ydGFuY2UobGluZUl0ZW0sIHNlbWFudGljS2V5cyksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRleHBvcnRDb250YWN0UHJvcGVydHk6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiBvVHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc1Rvb2x0aXAgPSBfZ2V0VG9vbHRpcChsaW5lSXRlbSk7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0b0NvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gob0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdGxldCB0YWJsZUNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlXG5cdCk7XG5cdHRhYmxlQ29sdW1ucyA9IHRhYmxlQ29sdW1ucy5jb25jYXQoYW5ub3RhdGlvbkNvbHVtbnMpO1xuXG5cdC8vIENyZWF0ZSBhIHByb3BlcnR5SW5mbyBmb3IgZWFjaCByZWxhdGVkIHByb3BlcnR5LlxuXHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhjb2x1bW5zVG9CZUNyZWF0ZWQsIHRhYmxlQ29sdW1ucywgbm9uU29ydGFibGVDb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gcHJvcGVydGllc1xuICogQHBhcmFtIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbihcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZChmdW5jdGlvbihhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKHByb3BlcnR5ID0+IHtcblx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHR9KVxuXHRcdC5qb2luKGAke1wiXFxuXCJ9YCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGFibGUgY29sdW1uIHByb3BlcnR5IHZhbHVlIGJhc2VkIG9uIGNlcnRhaW4gY29uZGl0aW9ucy5cbiAqXG4gKiBNYW5pZmVzdCBkZWZpbmVkIHByb3BlcnR5IHZhbHVlIGZvciBjdXN0b20gLyBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSBjb2x1bW4gaWYgbm90IG92ZXJ3cml0dGVuIGluIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSB7YW55fSBwcm9wZXJ0eSBUaGUgY29sdW1uIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0ge2FueX0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtib29sZWFufSBpc0Fubm90YXRpb25Db2x1bW4gV2hldGhlciB0aGUgY29sdW1uLCBkZWZpbmVkIGluIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGNvbHVtbi5cbiAqIEByZXR1cm5zIHthbnl9IERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbihwcm9wZXJ0eTogYW55LCBkZWZhdWx0VmFsdWU6IGFueSwgaXNBbm5vdGF0aW9uQ29sdW1uOiBib29sZWFuKTogYW55IHtcblx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGNvbHVtbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgY29sdW1uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogZGVmYXVsdFZhbHVlO1xuXHR9XG5cdC8vIFJldHVybiB3aGF0IGlzIGRlZmluZWQgaW4gbWFuaWZlc3QuXG5cdHJldHVybiBwcm9wZXJ0eTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj59IFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbihcblx0Y29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RUYWJsZUNvbHVtbj4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBjb2x1bW4gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZVxuXHRcdCk7XG5cdFx0aWYgKCFtYW5pZmVzdENvbHVtbj8udGVtcGxhdGUgJiYgbWFuaWZlc3RDb2x1bW4/LnR5cGUgIT09IFwiU2xvdFwiICYmICFpc0Fubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdGNvbnN0IE1lc3NhZ2UgPSBcIlRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnXCIgKyBrZXkgKyBcIicgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kXCI7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdE1lc3NhZ2UsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0ge1xuXHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0aWQ6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdFx0bmFtZTogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0XHRoZWFkZXI6IG1hbmlmZXN0Q29sdW1uLmhlYWRlcixcblx0XHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsIEltcG9ydGFuY2UuTm9uZSwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sIGlzQW5ub3RhdGlvbkNvbHVtbiksXG5cdFx0XHRcdHR5cGU6IG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IFwiU2xvdFwiID8gQ29sdW1uVHlwZS5TbG90IDogQ29sdW1uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IF9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlKG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksIEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0XHRcdC4uLm1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbkNvbHVtblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiBwcm9wZXJ0eUluZm9zID8gX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZpZWxkTGFiZWw6IHByb3BlcnR5SW5mb3MgPyBtYW5pZmVzdENvbHVtbi5oZWFkZXIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0d3JhcDogcHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBiQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHJldHVybiBiQW5hbHl0aWNhbFRhYmxlID8gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCIgOiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZ3JvdXAgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgfHwgX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0Ly8gT3Igd2hlbiB0aGUgTFIgZmlsdGVyIGJhciBpcyBoaWRkZW4gdmlhIG1hbmlmZXN0IHNldHRpbmdcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0aWYgKGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBib29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKlxuICogQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cbiAqIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cbiAqXG4gKiBAcGFyYW0ge01hbmlmZXN0V3JhcHBlcn0gbWFuaWZlc3RXcmFwcGVyIE1hbmlmZXN0IHNldHRpbmdzIGdldHRlciBmb3IgdGhlIHBhZ2VcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gQm9vbGVhbiBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICovXG5mdW5jdGlvbiBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goY29uZGl0aW9uID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5ICYmIG5vblNvcnRhYmxlUHJvcGVydGllcy5pbmRleE9mKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQ/Lm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IGluZm9OYW1lLFxuXHRcdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwYXRocy5mb3JFYWNoKGN1cnJlbnRQYXRoID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWUpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRjb25zdCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnkgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKGluZm9OYW1lID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goaW5mb05hbWUgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gVGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGNvbXBpbGVCaW5kaW5nKGNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uXG5cdCk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKSBhcyBudW1iZXI7XG5cdH1cblxuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgaXNTZWFyY2hhYmxlID0gaXNQYXRoU2VhcmNoYWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdFwiZGVsZXRlXCI6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGlvblJvdzogZ2V0Q3JlYXRpb25Sb3coY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dClcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGhcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGU6IHN0cmluZywgaXNDb21wbGV4UHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZTogc3RyaW5nID0gXCJTdHJpbmdcIjtcblx0aWYgKGlzQ29tcGxleFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlT2ZUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJCb29sZWFuXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2goUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cblxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRyZXR1cm4gbXVsdGlTZWxlY3RNb2RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVUeXBlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlVHlwZSB7XG5cdGxldCB0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdGlmICh0YWJsZVNldHRpbmdzPy50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHR0YWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiO1xuXHRcdH1cblx0XHRpZiAoIXRhYmxlU2V0dGluZ3M/LnR5cGUpIHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0dGFibGVUeXBlID0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0YWJsZVR5cGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdLFxuXHRxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0cGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGFueSB7XG5cdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRxdWlja0ZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHF1aWNrRmlsdGVyczoge1xuXHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIns9ICR7cGFnZUludGVybmFsPmhhc1BlbmRpbmdGaWx0ZXJzfSAhPT0gdHJ1ZX1cIiA6IHRydWUsXG5cdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYW55IHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnk7XG5cdGxldCBmaWx0ZXJzO1xuXHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoXCJAXCIgKyBwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRmaWx0ZXJzID0gX2dldEZpbHRlcnModGFibGVTZXR0aW5ncywgcXVpY2tGaWx0ZXJQYXRocywgcXVpY2tTZWxlY3Rpb25WYXJpYW50LCBwYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSAodGFibGVNYW5pZmVzdFNldHRpbmdzICYmIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzKSB8fCB7fTtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzUGhvbmUoKTtcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIjsgLy8gUGFzdGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBleGNlcHRlZCBmb3IgT1Bcblx0Y29uc3QgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCA/IFwiQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlclwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBvRmlsdGVyQ29uZmlndXJhdGlvbiA9IF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKHRhYmxlU2V0dGluZ3MsIGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCA6IGZhbHNlO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IF9nZXRUYWJsZVR5cGUodGFibGVTZXR0aW5ncywgYWdncmVnYXRpb25IZWxwZXIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IHtcblx0XHRjcmVhdGVBdEVuZDogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlLFxuXHRcdGNyZWF0aW9uTW9kZTogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLFxuXHRcdC8vIGlmIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkLCBpLmUuIHNldCB0byBmYWxzZVxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2UsXG5cdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBlbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0ZW5hYmxlRXhwb3J0OiBfZ2V0RW5hYmxlRXhwb3J0KHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIGVuYWJsZVBhc3RlKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0aGVhZGVyVmlzaWJsZTogdHJ1ZSxcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMCxcblxuXHRcdHNob3dSb3dDb3VudDpcblx0XHRcdCF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0fTtcblxuXHRyZXR1cm4geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4ub0ZpbHRlckNvbmZpZ3VyYXRpb24gfTtcbn1cblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb25maWcob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRsZXQgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGlmICghb1RhcmdldE1hcHBpbmcgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnRhcmdldFR5cGUgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZT8uX3R5cGUgPT09IFwiVHlwZURlZmluaXRpb25cIikge1xuXHRcdG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1soKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZSBhcyBUeXBlRGVmaW5pdGlvbikudW5kZXJseWluZ1R5cGVdO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSkge1xuXHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cyA9IHtcblx0XHRcdHNjYWxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFNjYWxlID8gb1Byb3BlcnR5LnNjYWxlIDogdW5kZWZpbmVkLFxuXHRcdFx0cHJlY2lzaW9uOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiA/IG9Qcm9wZXJ0eS5wcmVjaXNpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRtYXhMZW5ndGg6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoID8gb1Byb3BlcnR5Lm1heExlbmd0aCA6IHVuZGVmaW5lZCxcblx0XHRcdG51bGxhYmxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE51bGxhYmxlID8gb1Byb3BlcnR5Lm51bGxhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0bWluaW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4aW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0aXNEaWdpdFNlcXVlbmNlOlxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0KG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG4iXX0=
|
|
2612
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJpbXBvcnRhbmNlIiwiYXZhaWxhYmlsaXR5Iiwic2V0dGluZ3MiLCJob3Jpem9udGFsQWxpZ24iLCJmb3JtYXRPcHRpb25zIiwiZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJ0YWJsZUNvbHVtbnMiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZmluZENvbHVtbkZyb21QYXRoIiwicGF0aCIsImZpbmQiLCJjb2x1bW4iLCJhbm5vdGF0aW9uQ29sdW1uIiwicHJvcGVydHlJbmZvcyIsInVuZGVmaW5lZCIsInJlbGF0aXZlUGF0aCIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwibUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJvQ29sdW1uIiwib1RhYmxlQ29sdW1uIiwidW5pdCIsImFkZCIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwibVJhd0RlZmluaXRpb25zIiwiYW5ub3RhdGlvbiIsIm9BZ2dyZWdhdGVkUHJvcGVydHkiLCJfZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJvUHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsIm9DdHhEZWZQcm9wZXJ0eSIsInZhbHVlIiwibVJlc3VsdCIsImFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJkZWZhdWx0QWdncmVnYXRlIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwicHVzaCIsImxlbmd0aCIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJ1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiYWdncmVnYXRlcyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzU2VhcmNoIiwiaW5kZXhPZiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwibmF2Q29uZmlnRm9yQ29udGV4dFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJmaW5kQ29sdW1uQnlQYXRoIiwib1Byb3AiLCJvVW5pdCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0IiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiQ29tbW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJhZGRUb01hcCIsImtleSIsImRhdGFGaWVsZCIsIiRUeXBlIiwiYWN0aW9uTmFtZSIsIkFjdGlvbiIsIkRldGVybWluaW5nIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lIiwic2l6ZSIsInRpdGxlUHJvcGVydHkiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJpc0JvdW5kIiwic291cmNlRW50aXR5VHlwZSIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsInZhbHVlT2YiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwidmlzaWJsZSIsInNQYXRoIiwic3Vic3RyaW5nIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic05hdmlnYXRpb25QYXRoIiwidGFyZ2V0T2JqZWN0IiwicGFydG5lciIsImJpbmRpbmdFeHByZXNzaW9uIiwic2xpY2UiLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiZ2V0U2VsZWN0aW9uTW9kZSIsInRhcmdldENhcGFiaWxpdGllcyIsImRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwibWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiIsIlNlbGVjdGlvbk1vZGUiLCJOb25lIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwic2VsZWN0aW9uTW9kZSIsInRhYmxlU2V0dGluZ3MiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJjb21waWxlQmluZGluZyIsImJNYXNzRWRpdEVuYWJsZWQiLCJpZkVsc2UiLCJhbmQiLCJJc0VkaXRhYmxlIiwiTXVsdGkiLCJBdXRvIiwiU2luZ2xlIiwiYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJvciIsImVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjb25jYXQiLCJ0YWJsZUFjdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwibm90IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkRlZmF1bHQiLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJNZXNzYWdlVHlwZSIsImdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSIsImFNaXNzaW5nS2V5cyIsImZvcm1hdFJlc3VsdCIsIkVudGl0eSIsIkhhc0FjdGl2ZSIsIklzQWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJEcmFmdE5vZGUiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0YWJsZVR5cGUiLCJwcm9wZXJ0eSIsImV4aXN0cyIsInRhcmdldFR5cGUiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJyZWxhdGVkUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2x1bW5JbmZvIiwiZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSIsInNlbWFudGljS2V5cyIsImdldEFubm90YXRpb25zQnlUZXJtIiwib0NvbHVtbkRyYWZ0SW5kaWNhdG9yIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwiZXhwb3J0U2V0dGluZ3MiLCJ0ZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzVGVtcGxhdGUiLCJ3cmFwIiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImV4cG9ydFVuaXROYW1lIiwidW5pdFByb3BlcnR5IiwiZXhwb3J0VW5pdFN0cmluZyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSIsImV4cG9ydFR5cGUiLCJfZ2V0RXhwb3J0RGF0YVR5cGUiLCJzRGF0ZUlucHV0Rm9ybWF0IiwiZGF0YVR5cGUiLCJnZXREYXRhRmllbGREYXRhVHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJvVHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaW5wdXRGb3JtYXQiLCJzY2FsZSIsImRlbGltaXRlciIsInRydWVWYWx1ZSIsImZhbHNlVmFsdWUiLCJvVW5pdFByb3BlcnR5Iiwic1VuaXRUZXh0IiwiaXNHcm91cGFibGUiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiQW5ub3RhdGlvbiIsImxhYmVsIiwiX2dldExhYmVsIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwic2VtYW50aWNPYmplY3RQYXRoIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJEYXRhRmllbGREZWZhdWx0IiwiVGFyZ2V0IiwiJHRhcmdldCIsInNvcnRhYmxlIiwiaXNLZXkiLCJjYXNlU2Vuc2l0aXZlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidHlwZUNvbmZpZyIsInZpc3VhbFNldHRpbmdzIiwid2lkdGhDYWxjdWxhdGlvbiIsImdldEltcG9ydGFuY2UiLCJzVG9vbHRpcCIsIl9nZXRUb29sdGlwIiwidG9vbHRpcCIsIl9pc1ZhbGlkQ29sdW1uIiwiX2dldFZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkTW9kZWxQYXRoIiwicmV0dXJuRXhwcmVzc2lvbiIsInByb3BlcnR5VmFsdWUiLCJpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkIiwiaXNBbmFseXRpY3MiLCJJc0V4cGFuZGVkIiwiaXNBbmFseXRpY2FsTGVhZiIsIk5vZGVMZXZlbCIsIl9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJkYXRhRmllbGRHcm91cCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsImFGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJEYXRhIiwiaW5uZXJEYXRhRmllbGQiLCJpc1Byb3BlcnR5IiwiZGF0YUZpZWxkRGVmYXVsdCIsIkxhYmVsIiwiaXNEYXRhRmllbGRUeXBlcyIsIlF1aWNrSW5mbyIsImRhdGFwb2ludFRhcmdldCIsImdldFJvd1N0YXR1c1Zpc2liaWxpdHkiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZENvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsInJlbGF0ZWRDb2x1bW4iLCJuZXdOYW1lIiwicHJvcGVydHlJbmZvIiwiX2dldEFubm90YXRpb25Db2x1bW5OYW1lIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImlzU29ydGFibGUiLCJmaWx0ZXJGdW5jdGlvbnMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJpc0FycmF5IiwiZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwidmFsdWVzIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImhhc0RyYWZ0SW5kaWNhdG9yIiwic2VtYW50aWNrZXlzIiwib2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHkiLCJGaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGaWVsZEdyb3VwTmFtZSIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiaW5jbHVkZXMiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsIl9nZXRNYXhJbXBvcnRhbmNlIiwiZmllbGRzIiwibWF4SW1wTnVtYmVyIiwiaW1wTnVtYmVyIiwiRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UiLCJmaWVsZCIsImZpZWxkc1dpdGhJbXBvcnRhbmNlIiwibWFwU2VtYW50aWNLZXlzIiwiZmllbGRHcm91cERhdGEiLCJmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiSGlnaCIsImZpbHRlciIsIml0ZW0iLCJnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5Iiwic0xhYmVsIiwiZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwidmlzdWFsU2V0dGluZ3NUb0JlRXhjbHVkZWQiLCJleGNsdWRlUHJvcGVydGllcyIsIndpZHRoT3ZlcnJpZGUiLCJGRSIsIlNpdHVhdGlvbnMiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbiIsIkhUTUw1IiwiQ3NzRGVmYXVsdHMiLCJleHBvcnRDb250YWN0UHJvcGVydHkiLCJleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSIsIl9nZXRQcm9wZXJ0eU5hbWVzIiwibWF0Y2hlZFByb3BlcnRpZXMiLCJyZXNvbHZlUGF0aCIsIl9hcHBlbmRDdXN0b21UZW1wbGF0ZSIsIl9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaW50ZXJuYWxDb2x1bW5zIiwibWFuaWZlc3RDb2x1bW4iLCJ2YWxpZGF0ZUtleSIsIk1lc3NhZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbkNvbHVtbnMiLCJJbnZhbGlkS2V5IiwiaWQiLCJoZWFkZXIiLCJIb3Jpem9udGFsQWxpZ24iLCJCZWdpbiIsIlNsb3QiLCJwb3NpdGlvbiIsImFuY2hvciIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJmaWVsZExhYmVsIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImJBbmFseXRpY2FsVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiTGlzdFJlcG9ydCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwYXRocyIsImluZm9OYW1lcyIsImN1cnJlbnRQYXRoIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwiYUdyb3VwTGV2ZWxzIiwiZ3JvdXBMZXZlbHMiLCJUb3RhbCIsImFUb3RhbHMiLCJ0aXRsZSIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsIlRhYmxlSUQiLCJjcmVhdGlvbkJlaGF2aW91ciIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJnZXREZWxldGVWaXNpYmlsaXR5IiwiY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRDcmVhdGVWaXNpYmlsaXR5IiwibWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJzdGFuZGFyZEFjdGlvbnMiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwicGFzdGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwibWFzc0VkaXQiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwiY3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsImVudGl0eU5hbWUiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsIm5hdmlnYXRpb25QYXRoIiwicm93IiwiaXNJbkRpc3BsYXlNb2RlIiwiYXV0b0JpbmRPbkluaXQiLCJzZWFyY2hhYmxlIiwiaXNDb21wbGV4UHJvcGVydHkiLCJleHBvcnREYXRhVHlwZSIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eVBhdGgiLCJ0ZXh0IiwiX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlIiwiaXNJcGhvbmUiLCJlbmFibGVGdWxsU2NyZWVuIiwiSXNzdWVUeXBlIiwiRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQiLCJfZ2V0TXVsdGlTZWxlY3RNb2RlIiwibXVsdGlTZWxlY3RNb2RlIiwic2VsZWN0QWxsIiwidXNlSWNvblRhYkJhciIsIl9nZXRUYWJsZVR5cGUiLCJpc0Rlc2t0b3AiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJzIiwiaGlkZVRhYmxlVGl0bGUiLCJoZWFkZXJWaXNpYmxlIiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJvRmlsdGVyQ29uZmlndXJhdGlvbiIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImNvbmRlbnNlZFRhYmxlTGF5b3V0Iiwib0NvbmZpZ3VyYXRpb24iLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlTWFzc0VkaXQiLCJzZWxlY3Rpb25MaW1pdCIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUEwTktBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7S0FBQUEsVSxL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QUFBQSxrQkFBa0IsQ0FBRTlSLElBQXBCLGtGQUEwQk8sT0FBMUIsQ0FBa0MsZ0NBQWxDLE9BQXdFLENBRHhFLEdBRUcsRUFGSCxHQUdHL0MsU0FWOEI7QUFXbEMrb0IsTUFBQUEscUJBQXFCLEVBQUV6VSxrQkFBa0IsQ0FBQzlSLElBQW5CLEtBQTRCLGdDQUE1QixHQUErRCxJQUEvRCxHQUFzRXhDO0FBWDNELEtBQW5DO0FBYUEsV0FBT3NVLGtCQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5LCBUeXBlRGVmaW5pdGlvbiB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0RW51bVZhbHVlLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0TGluZUl0ZW0sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0UHJvcGVydHlQYXRoLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ29tbW9uXCI7XG5pbXBvcnQgeyBTZW1hbnRpY0tleSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy90eXBlcy9nZW5lcmF0ZWQvQ29tbW9uXCI7XG5pbXBvcnQge1xuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMsXG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5LFxuXHRDb21wbGV4UHJvcGVydHlJbmZvLFxuXHRnZXREYXRhRmllbGREYXRhVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbixcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRUeXBlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgRW50aXR5LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlQ2F0ZWdvcnlUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IERpc3BsYXlNb2RlLCBFRE1fVFlQRV9NQVBQSU5HLCBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50LFxuXHRpc1BhdGhFeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgVGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdEltcG9ydGFuY2UsXG5cdE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB7XG5cdGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Z2V0Q3JlYXRlVmlzaWJpbGl0eSxcblx0Z2V0Q3JlYXRpb25Sb3csXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0LFxuXHRnZXRTdGFuZGFyZEFjdGlvblBhc3RlLFxuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQsXG5cdGlzSW5EaXNwbGF5TW9kZSxcblx0U3RhbmRhcmRBY3Rpb25Db25maWdUeXBlXG59IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbjtcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0aWQ6IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0cDEzbk1vZGU/OiBzdHJpbmc7XG5cdHJvdz86IHtcblx0XHRhY3Rpb24/OiBzdHJpbmc7XG5cdFx0cHJlc3M/OiBzdHJpbmc7XG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBCaW5kaW5nRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0cm93TmF2aWdhdGVkOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0fTtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGU+O1xuXHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBib29sZWFuO1xuXHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR9O1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogc3RyaW5nO1xuXHRncm91cENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBzdHJpbmc7XG5cblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZztcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvciA9IHtcblx0bW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRhcHBlbmQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGVUb1RhcmdldD86IHN0cmluZztcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG50eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0cGF0aHM6IFtcblx0XHR7XG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdH1cblx0XTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tLFxuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdHNldHRpbmdzPzogVGFibGVDb2x1bW5TZXR0aW5ncztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zVHlwZTtcblx0aW1wb3J0YW5jZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93RGF0YUZpZWxkc0xhYmVsPzogYm9vbGVhbjtcblx0aXNLZXk/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0ZXhwb3J0U2V0dGluZ3M/OiB7XG5cdFx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0ZmllbGRMYWJlbD86IHN0cmluZztcblx0XHR3cmFwPzogYm9vbGVhbjtcblx0XHR0eXBlPzogc3RyaW5nO1xuXHRcdGlucHV0Rm9ybWF0Pzogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0XHRzY2FsZT86IG51bWJlcjtcblx0XHRkZWxpbWl0ZXI/OiBib29sZWFuO1xuXHRcdHRydWVWYWx1ZT86IGJvb2xlYW47XG5cdFx0ZmFsc2VWYWx1ZT86IGJvb2xlYW47XG5cdFx0dW5pdD86IHN0cmluZztcblx0XHR1bml0UHJvcGVydHk/OiBzdHJpbmc7XG5cdH07XG5cdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5PzogYm9vbGVhbjtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRleHBvcnRDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdHR5cGVDb25maWc/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBWaXN1YWxTZXR0aW5ncyA9IHtcblx0d2lkdGhDYWxjdWxhdGlvbj86IFdpZHRoQ2FsY3VsYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdGluY2x1ZGVMYWJlbD86IGJvb2xlYW47XG5cdGdhcD86IG51bWJlcjtcblx0Ly8gb25seSByZWxldmFudCBmb3IgY29tcGxleCB0eXBlc1xuXHRleGNsdWRlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR2ZXJ0aWNhbEFycmFuZ2VtZW50PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29sdW1uID0gQ3VzdG9tVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUNvbHVtbiA9IEN1c3RvbUVsZW1lbnQ8VGFibGVDb2x1bW4+O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVBbmFseXRpY3NTZWFyY2g/OiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xufTtcblxudHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFubm90YXRpb24tYmFzZWQgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtCYXNlQWN0aW9ufSBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhVGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnM7XG5cdGNvbnN0IGFIaWRkZW5BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHR0cnVlLFxuXHRcdFx0YUhpZGRlbkFjdGlvbnNcblx0XHQpLFxuXHRcdHtcblx0XHRcdGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlZDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIlxuXHRcdH1cblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjb2x1bW5zLCBhbm5vdGF0aW9uLWJhc2VkIGFzIHdlbGwgYXMgbWFuaWZlc3QgYmFzZWQuXG4gKiBUaGV5IGFyZSBzb3J0ZWQgYW5kIHNvbWUgcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gdmlhIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBrZXlzIHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuKS5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RDb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmNvbHVtbnMsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25Db2x1bW5zLCBtYW5pZmVzdENvbHVtbnMsIHtcblx0XHR3aWR0aDogXCJvdmVyd3JpdGVcIixcblx0XHRpbXBvcnRhbmNlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGF2YWlsYWJpbGl0eTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHRob3Jpem9udGFsQWxpZ246IFwib3ZlcndyaXRlXCIsXG5cdFx0Zm9ybWF0T3B0aW9uczogXCJvdmVyd3JpdGVcIlxuXHR9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VzdG9tIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRmdW5jdGlvbiBmaW5kQ29sdW1uRnJvbVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBLZWVwIGEgc2V0IG9mIGFsbCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMsIGFzIHdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIgdGhlbSBhcyBhZ2dyZWdhdGVzXG5cdC8vIFRoZXkgYXJlIGFnZ3JlZ2F0ZXMgZm9yIHRlY2huaWNhbCByZWFzb25zICh0byBtYW5hZ2UgbXVsdGktdW5pdHMgc2l0dWF0aW9ucykgYnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgdXNlciBzdGFuZHBvaW50XG5cdGNvbnN0IG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi51bml0KSB7XG5cdFx0XHRtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZChvVGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBtUmF3RGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZWRQcm9wZXJ0eSA9IGFnZ3JlZ2F0aW9uSGVscGVyLl9lbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gb1Byb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdH0pO1xuXG5cdFx0aWYgKG9BZ2dyZWdhdGVkUHJvcGVydHkpIHtcblx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gYW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRtUmF3RGVmaW5pdGlvbnNbb0FnZ3JlZ2F0ZWRQcm9wZXJ0eS5uYW1lXSA9IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdD8gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChvQ3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ3R4RGVmUHJvcGVydHkudmFsdWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBtUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3QgYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBtUmF3RGVmaW5pdGlvbnNbb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aF07XG5cblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlIGFuZCBkdW1teSBjcmVhdGVkIHByb3BlcnR5IGZvciBkYXRhcG9pbnQgdGFyZ2V0IFZhbHVlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdCFtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyhvVGFibGVDb2x1bW4ubmFtZSkgJiZcblx0XHRcdFx0IW9UYWJsZUNvbHVtbi5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eVxuXHRcdFx0KSB7XG5cdFx0XHRcdG1SZXN1bHRbb1RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaCgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbHVtbiA9IGZpbmRDb2x1bW5Gcm9tUGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChvQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKG9Db2x1bW4ubmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bVJlc3VsdFtvVGFibGVDb2x1bW4ubmFtZV0uZGVmYXVsdEFnZ3JlZ2F0ZS5jb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBtUmVzdWx0O1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5mdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MoXG5cdHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXNcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0aWYgKGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucykge1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyA9IHRydWU7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblxuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljc1NlYXJjaCA9IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPyBhbGxvd2VkVHJhbnNmb3JtYXRpb25zLmluZGV4T2YoXCJzZWFyY2hcIikgPj0gMCA6IHRydWU7XG5cblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zKTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbmF2Q29uZmlnRm9yQ29udGV4dFBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oY29udGV4dFBhdGgpO1xuXHRpZiAobmF2Q29uZmlnRm9yQ29udGV4dFBhdGggJiYgT2JqZWN0LmtleXMobmF2Q29uZmlnRm9yQ29udGV4dFBhdGgpLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY29udGV4dFBhdGg7XG5cdH1cblxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuXG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5CeVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKG9Qcm9wOiBQcm9wZXJ0eSkgPT4gb1Byb3AubmFtZSA9PT0gb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IG9Vbml0ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGlmIChvVW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Vbml0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVW5pdC5uYW1lKTtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdCA9IG9Vbml0Q29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHNVbml0ID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRcdGlmIChzVW5pdCkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXRUZXh0ID0gYCR7c1VuaXR9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRpZiAoaXNQYXRoRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncykpLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKHt9LCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgW10sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAodW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZywgY29sdW1ucyksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dClcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGxpbmUgaXRlbVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRjb25zdCBhZGRUb01hcCA9IGZ1bmN0aW9uIChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcFtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRpZiAoYWN0aW9uTmFtZT8uaW5kZXhPZihcIi9cIikgPCAwICYmICFkYXRhRmllbGQuRGV0ZXJtaW5pbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXHRcdFx0XHRcdGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gZXhwbGljaXRseSBjb25maWd1cmVkIHdpdGggbnVsbCAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsYXRlZClcblx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0RXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpXG5cdFx0XHRcdFx0XHRcdCkgYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPHN0cmluZz47XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRFeHByZXNzaW9uPy5wYXRoKSB7XG5cdFx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIHRhcmdldEV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIHRhcmdldEV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcbn1cblxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHk6IGFueSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IChlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgYXMgYW55KT8ucGF0aDtcblxuXHRyZXR1cm4gaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA/ICh1cGRhdGFibGVQcm9wZXJ0eVBhdGggYXMgc3RyaW5nKSA6IFwiXCI7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHByb3BlcnRpZXMuc2l6ZSkge1xuXHRcdC8vIFNvbWUgYWN0aW9ucyBoYXZlIGFuIG9wZXJhdGlvbiBhdmFpbGFibGUgYmFzZWQgb24gcHJvcGVydHkgLS0+IHdlIG5lZWQgdG8gbG9hZCB0aGUgSGVhZGVySW5mby5UaXRsZSBwcm9wZXJ0eVxuXHRcdC8vIHNvIHRoYXQgdGhlIGRpYWxvZyBvbiBwYXJ0aWFsIGFjdGlvbnMgaXMgZGlzcGxheWVkIHByb3Blcmx5IChCQ1AgMjE4MDI3MTQyNSlcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgdGl0bGVQcm9wZXJ0eSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aDtcblx0XHRpZiAodGl0bGVQcm9wZXJ0eSkge1xuXHRcdFx0cHJvcGVydGllcy5hZGQodGl0bGVQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRcdGlzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0c291cmNlOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxhbnk+IHtcblx0bGV0IHNFeHByZXNzaW9uOiBhbnkgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0KSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9IGVsc2Uge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlO1xuXHR9XG5cdGxldCBzUGF0aDogc3RyaW5nO1xuXHRpZiAoc0V4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kIGNoZWNrXG4gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciAoYW5kIHJlcXVpcmVzIGEgY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiAmJiBhY3Rpb24udmlzaWJsZT8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIGN1c3RvbSBhY3Rpb25zICh3aXRoIGtleSByZXF1aXJlc1NlbGVjdGlvbikgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBsaW5lIGl0ZW0gYW5kIHJldHVybnMgYWxsIHRoZVxuICogdmlzaWJsZSBrZXkgdmFsdWVzIGFzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbn0gVGhlIHRhYmxlIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogRXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXSxcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucyk7XG5cblx0Ly8gTm8gYWN0aW9uIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdGlmIChcblx0XHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdChkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCBiTWFzc0VkaXRFbmFibGVkKVxuXHQpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdFx0Ly8gQnVpbGRpbmcgZXhwcmVzc2lvbiBmb3IgZGVsZXRlIGFuZCBtYXNzIGVkaXRcblx0XHRcdFx0Y29uc3QgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBvcihcblx0XHRcdFx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCB0cnVlLCAvLyBkZWZhdWx0IGRlbGV0ZSB2aXNpYmlsaXR5IGFzIHRydWVcblx0XHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzRWRpdGFibGUsIGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFwiTm9uZVwiKSkpO1xuXHRcdFx0Ly8gRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0fVxuXHRcdC8vIFRoZXJlIGFyZSBhY3Rpb25zIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdH0gZWxzZSBpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gVXNlIHNlbGVjdGlvbk1vZGUgaW4gZWRpdCBtb2RlIGlmIGRlbGV0ZSBpcyBlbmFibGVkIG9yIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0XHRjb25zdCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0XHRiTWFzc0VkaXRFbmFibGVkICYmICF0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUsXG5cdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL0VudGl0eVNldCBkZWxldGFibGU6XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBFeGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdC8vRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyksIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPEJhc2VBY3Rpb24sIEJhc2VBY3Rpb24+fSBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0IShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5EZXRlcm1pbmluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uczogaGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhTWlzc2luZ0tleXM6IGFueVtdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcblx0XHRpZiAoa2V5Lm5hbWUgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YU1pc3NpbmdLZXlzLnB1c2goYmluZGluZ0V4cHJlc3Npb24oa2V5Lm5hbWUsIHVuZGVmaW5lZCkpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdGJpbmRpbmdFeHByZXNzaW9uKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290ICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdCAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdH1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHwgdGFyZ2V0QW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjsgLy8gVE9ETzogSXMgdGhlcmUgcmVhbGx5IG5vICdOZXdBY3Rpb24nIG9uIERyYWZ0Tm9kZT8gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlPy5OZXdBY3Rpb25cblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0Ly8gVE9ETzogT3IgZG9lcyBpdD9cblx0XHRcdHRocm93IEVycm9yKGBDcmVhdGlvbiBtb2RlICcke0NyZWF0aW9uTW9kZS5DcmVhdGlvblJvd30nIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgY3VzdG9tICduZXcnIGFjdGlvbiAoJHtuZXdBY3Rpb259KWApO1xuXHRcdH1cblx0XHRpZiAobmF2aWdhdGlvbj8ucm91dGUpIHtcblx0XHRcdC8vIHJvdXRlIHNwZWNpZmllZFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0bmF2aWdhdGVUb1RhcmdldDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSA/IG5hdmlnYXRpb24ucm91dGUgOiB1bmRlZmluZWQgLy8gbmF2aWdhdGUgb25seSBpbiBOZXdQYWdlIG1vZGVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0Ly8gbm8gbmF2aWdhdGlvbiBvciBubyByb3V0ZSBzcGVjaWZpZWQgLSBmYWxsYmFjayB0byBpbmxpbmUgY3JlYXRlIGlmIG9yaWdpbmFsIGNyZWF0aW9uIG1vZGUgd2FzICdOZXdQYWdlJ1xuXHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRpZiAobmF2aWdhdGlvblNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheT8udGFyZ2V0IHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/Lm91dGJvdW5kO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XCIuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJ1wiICsgbmF2aWdhdGlvblRhcmdldCArIFwiJywgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0pXCI7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdFx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0ISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCAhIXRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlLFxuXHRcdFx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0XCJBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICdcIiArXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFx0XCInLCBlZGl0YWJsZSA6IFwiICtcblx0XHRcdFx0XHQodGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdFx0OiBcInVuZGVmaW5lZFwiKSArXG5cdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LCBmYWxzZSwgdGFyZ2V0RW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUJpbmRpbmcoY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlQmluZGluZyhyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGVcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRdKVswXTtcblx0XHRcdGNvbnN0IG9Db2x1bW5EcmFmdEluZGljYXRvciA9IGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihjb2x1bW5JbmZvLm5hbWUsIHNlbWFudGljS2V5cywgZmFsc2UsIG51bGwpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9Db2x1bW5EcmFmdEluZGljYXRvcikubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0NvbHVtbkRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51bml0ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIHtib29sZWFufSBhdmFpbGFibGVGb3JBZGFwdGF0aW9uIERlY2lkZXMgd2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSB7QWdncmVnYXRpb25IZWxwZXJ9IGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbn0gVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IFwiUHJvcGVydHk6OlwiICsgcmVsYXRpdmVQYXRoO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eTogYm9vbGVhbiA9IG5hbWUuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMTtcblx0Y29uc3QgZXhwb3J0VHlwZTogc3RyaW5nID0gX2dldEV4cG9ydERhdGFUeXBlKHByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ID8gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHQ/IHtcblx0XHRcdFx0Y2xhc3NOYW1lOiBwcm9wZXJ0eS50eXBlIHx8IGRhdGFUeXBlLFxuXHRcdFx0XHRvRm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdG9Db25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGV4cG9ydFNldHRpbmdzOiBhbnkgPSBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChwcm9wZXJ0eSlcblx0XHQgIH1cblx0XHQ6IHtcblx0XHRcdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdFx0ZGVsaW1pdGVyOiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHR0cnVlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiWWVzXCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZhbHNlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiTm9cIiA6IHVuZGVmaW5lZFxuXHRcdCAgfTtcblxuXHRpZiAoIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5KSB7XG5cdFx0Y29uc3Qgb1VuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBzVW5pdFRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdGlmIChvVW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSBvVW5pdFByb3BlcnR5Lm5hbWU7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHR9IGVsc2UgaWYgKHNVbml0VGV4dCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IGAke3NVbml0VGV4dH1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9Db2x1bW46IGFueSA9IHtcblx0XHRrZXk6IGtleSxcblx0XHRpc0dyb3VwYWJsZTogIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmICFpc0hpZGRlbiA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogZmFsc2UsXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBfZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwocHJvcGVydHkpIDogbnVsbCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBmb3IgdGhlIFRhcmdldFZhbHVlIHVzZWQgb24gRGF0YVBvaW50cywgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuIGFuZCBub24gc29ydGFibGVcblx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdFx0PyAocHJvcGVydHkgYXMgYW55KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGggfHwgKHByb3BlcnR5IGFzIGFueSkuVmFsdWUucGF0aFxuXHRcdFx0OiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6ICFpc0hpZGRlbiAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpXG5cdH07XG5cdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAocHJvcGVydHkpO1xuXHRpZiAoc1Rvb2x0aXApIHtcblx0XHRvQ29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXG5cdHJldHVybiBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmV0dXJuICEhZGF0YUZpZWxkLklubGluZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdC8vIFRvZG86IFJlcGxhY2Ugd2l0aCBwcm9wZXIgTG9nIHN0YXRlbWVudCBvbmNlIGF2YWlsYWJsZVxuXHRcdC8vICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgRGF0YUZpZWxkIEFic3RyYWN0IHR5cGU6IFwiICsgZGF0YUZpZWxkLiRUeXBlKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKlxuICogU0FQIEZpb3JpIGVsZW1lbnRzIHdpbGwgZXZhbHVhdGUgZWl0aGVyIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBkZWZpbmVkIG9uIHRoZSBhbm5vdGF0aW9uIGl0c2VsZiBvciBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gZGF0YUZpZWxkTW9kZWxQYXRoIFRoZSBtZXRhcGF0aCByZWZlcnJpbmcgdG8gdGhlIGFubm90YXRpb24gdGhhdCBpcyBldmFsdWF0ZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICogQHBhcmFtIHtvYmplY3R9IFtmb3JtYXRPcHRpb25zXSBGb3JtYXRPcHRpb25zIG9wdGlvbmFsLlxuICogQHBhcmFtIHtib29sZWFufSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhbmFseXRpYyB0YWJsZSBoYXMgR3JvdXBIZWFkZXIgZXhwYW5kZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FeHByZXNzaW9uXSBSZXR1cm5FeHByZXNzaW9uIG9wdGlvbmFsLlxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdE9wdGlvbnM/OiBhbnksXG5cdHJldHVybkV4cHJlc3Npb246IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDogY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRjb25zdCBleHByZXNzaW9uID0gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0aWZFbHNlKCEhcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlWYWx1ZSAmJiBub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSwgdHJ1ZSksXG5cdFx0XHRvcihub3QoaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCksIGlzQW5hbHl0aWNhbExlYWYpXG5cdFx0XVxuXHQpO1xuXHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbiA/IChleHByZXNzaW9uIGFzIGFueSBhcyBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+KSA6IGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWVsZEZvcm1hdE9wdGlvbnMgRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmllbGRGb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhbmFseXRpYyB0YWJsZSBoYXMgR3JvdXBIZWFkZXIgZXhwYW5kZWQuXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gQ29tcGlsZSBiaW5kaW5nIG9mIGZpZWxkIGdyb3VwIGV4cHJlc3Npb25zLlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogYW55XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMsIHRydWUpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGlmRWxzZShvciguLi4oYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBhcyBhbnkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KGZhbHNlKSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHl9IFtwcm9wZXJ0eV0gUHJvcGVydHkgb3IgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0gaXNHcm91cFxuICogQHJldHVybnMge3N0cmluZ30gTGFiZWwgb2YgdGhlIHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldExhYmVsID0gZnVuY3Rpb24gKHByb3BlcnR5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHksIGlzR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0aWYgKGRhdGFGaWVsZERlZmF1bHQgJiYgIWRhdGFGaWVsZERlZmF1bHQucXVhbGlmaWVyICYmIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24gKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSkge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oc291cmNlLmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMoc291cmNlKSkge1xuXHRcdHJldHVybiBzb3VyY2UuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihzb3VyY2UuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFwb2ludFRhcmdldC5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSgpOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbYmluZGluZ0V4cHJlc3Npb24oYHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JgLCBcImludGVybmFsXCIpLCBiaW5kaW5nRXhwcmVzc2lvbihgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXG5cdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUHJvcGVydHk+fSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1uIG5hbWVzIHdoaWNoIGNhbm5vdCBiZSBzb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gY29sdW1uc1RvQmVDcmVhdGVkW25hbWVdLFxuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgobmFtZSksXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSByZWxhdGVkIGNvbHVtbiBhbHJlYWR5IGV4aXN0cy5cblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2FzZSAxOiBLZXkgY29udGFpbnMgRGF0YUZpZWxkIHByZWZpeCB0byBlbnN1cmUgYWxsIHByb3BlcnR5IGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSBrZXkgZm9ybWF0LlxuXHRcdFx0Ly8gTmV3IGNyZWF0ZWQgcHJvcGVydHkgY29sdW1uIGlzIHNldCB0byBoaWRkZW4uXG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fFxuXHRcdFx0KHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcyAmJiByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5kZXhPZihuYW1lKSAhPT0gLTEpXG5cdFx0KSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW4gYW5kXG5cdFx0XHQvLyBib3RoIGNhc2VzIHJlcXVpcmUgYSBkdW1teSBQcm9wZXJ0eUluZm8gZm9yIHNldHRpbmcgY29ycmVjdCBleHBvcnQgc2V0dGluZ3MuXG5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBcIlByb3BlcnR5OjpcIiArIG5hbWU7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChcblx0XHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZEdyb3VwTmFtZSBUaGUgYERhdGFGaWVsZGAgbmFtZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IGBzaG93RGF0YUZpZWxkc0xhYmVsYCB2YWx1ZSBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbiAoZmllbGRHcm91cE5hbWU6IHN0cmluZywgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29sdW1ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk/LmNvbHVtbnM7XG5cdGNvbnN0IGFDb2x1bW5LZXlzID0gb0NvbHVtbnMgJiYgT2JqZWN0LmtleXMob0NvbHVtbnMpO1xuXHRyZXR1cm4gKFxuXHRcdGFDb2x1bW5LZXlzICYmXG5cdFx0ISFhQ29sdW1uS2V5cy5maW5kKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBlbnRpdHkuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKSB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cblx0aWYgKGlTbGFzaEluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBwYXRoO1xuXHR9XG5cdHJldHVybiBpc0xhc3RQYXJ0ID8gcGF0aC5zdWJzdHJpbmcoaVNsYXNoSW5kZXggKyAxLCBwYXRoLmxlbmd0aCkgOiBwYXRoLnN1YnN0cmluZygwLCBpU2xhc2hJbmRleCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdGxldCBpc1NvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cdGlmIChub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdC8vIENvbHVtbiBpcyBub3QgbWFya2VkIGFzIG5vbi1zb3J0YWJsZSB2aWEgYW5ub3RhdGlvblxuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0aXNTb3J0YWJsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHQvLyBBY3Rpb24gY29sdW1ucyBhcmUgbm90IHNvcnRhYmxlXG5cdFx0XHRcdGlzU29ydGFibGUgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpc1NvcnRhYmxlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdHJldHVybiB7XG5cdFx0dGV4dExpbmVzRWRpdDogNFxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogYW55W10sIG5hbWU6IHN0cmluZyk6IGFueSB7XG5cdGNvbnN0IGFTZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IGJTZW1hbnRpY0tleUZvdW5kID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0dmFsdWVzOiBhU2VtYW50aWNLZXlWYWx1ZXMsXG5cdFx0c2VtYW50aWNLZXlGb3VuZDogYlNlbWFudGljS2V5Rm91bmRcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBhbnlbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IGFueVtdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluZGV4T2YodG1wKSA+PSAwKSkge1xuXHRcdFx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5VmFsdWVzW2ldO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eVBhdGhcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBbXSk6IGFueSB7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBhbnkgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEBwYXJhbSBpc0ZpZWxkR3JvdXBDb2x1bW5cbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKFxuXHRuYW1lOiBzdHJpbmcsXG5cdHNlbWFudGljS2V5czogYW55W10sXG5cdGlzRmllbGRHcm91cENvbHVtbjogYm9vbGVhbixcblx0ZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBudWxsXG4pIHtcblx0aWYgKCFzZW1hbnRpY0tleXMpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3Qgc2VtYW50aWNLZXkgPSBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5cywgbmFtZSk7XG5cdGNvbnN0IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cCwgc2VtYW50aWNLZXkudmFsdWVzKTtcblx0aWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzZW1hbnRpY2tleXM6IHNlbWFudGljS2V5LnZhbHVlcyxcblx0XHRcdG9iamVjdFN0YXR1c1RleHRWaXNpYmlsaXR5OiBjb21waWxlQmluZGluZyhnZXRSb3dTdGF0dXNWaXNpYmlsaXR5KCkpXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRpZiAoIXNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0RmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdEZpZWxkR3JvdXBOYW1lOiBuYW1lXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIHtJbXBvcnRhbmNlfSBUaGUgaW1wb3J0YW5jZSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0YW5jZShkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHNlbWFudGljS2V5czogU2VtYW50aWNLZXkpOiBJbXBvcnRhbmNlIHwgdW5kZWZpbmVkIHtcblx0Ly9FdmFsdWF0ZSBkZWZhdWx0IEltcG9ydGFuY2UgaXMgbm90IHNldCBleHBsaWNpdGx5XG5cdGxldCBmaWVsZHNXaXRoSW1wb3J0YW5jZSwgbWFwU2VtYW50aWNLZXlzOiBhbnk7XG5cdC8vQ2hlY2sgaWYgc2VtYW50aWNLZXlzIGFyZSBkZWZpbmVkIGF0IHRoZSBFbnRpdHlTZXQgbGV2ZWxcblx0aWYgKHNlbWFudGljS2V5cyAmJiBzZW1hbnRpY0tleXMubGVuZ3RoID4gMCkge1xuXHRcdG1hcFNlbWFudGljS2V5cyA9IHNlbWFudGljS2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGtleS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhID0gKGRhdGFGaWVsZCBhcyBhbnkpLlRhcmdldFtcIiR0YXJnZXRcIl1bXCJEYXRhXCJdIGFzIEZpZWxkR3JvdXBUeXBlLFxuXHRcdFx0ZmllbGRHcm91cEhhc1NlbWFudGljS2V5ID1cblx0XHRcdFx0ZmllbGRHcm91cERhdGEgJiZcblx0XHRcdFx0KGZpZWxkR3JvdXBEYXRhIGFzIGFueSkuc29tZShmdW5jdGlvbiAoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0XHRcdG1hcFNlbWFudGljS2V5cyAmJlxuXHRcdFx0XHRcdFx0bWFwU2VtYW50aWNLZXlzLmluY2x1ZGVzKChmaWVsZEdyb3VwRGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHQvL0lmIGEgRmllbGRHcm91cCBjb250YWlucyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0aWYgKGZpZWxkR3JvdXBIYXNTZW1hbnRpY0tleSkge1xuXHRcdFx0cmV0dXJuIEltcG9ydGFuY2UuSGlnaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9JZiB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgYW4gSW1wb3J0YW5jZSB3ZSB0YWtlIGl0XG5cdFx0XHRpZiAoZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UpIHtcblx0XHRcdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0XHRcdH1cblx0XHRcdC8vIGVsc2UgdGhlIGhpZ2hlc3QgaW1wb3J0YW5jZSAoaWYgYW55KSBpcyByZXR1cm5lZFxuXHRcdFx0ZmllbGRzV2l0aEltcG9ydGFuY2UgPVxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YSAmJlxuXHRcdFx0XHQoZmllbGRHcm91cERhdGEgYXMgYW55KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW06IERhdGFGaWVsZFR5cGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW0/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0fVxuXHRcdC8vSWYgdGhlIGN1cnJlbnQgZmllbGQgaXMgYSBzZW1hbnRpY0tleSwgaW1wb3J0YW5jZSBzZXQgdG8gSGlnaFxuXHR9XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZSAmJlxuXHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aCAmJlxuXHRcdG1hcFNlbWFudGljS2V5cyAmJlxuXHRcdG1hcFNlbWFudGljS2V5cy5pbmNsdWRlcygoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoKVxuXHRcdD8gSW1wb3J0YW5jZS5IaWdoXG5cdFx0OiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG59XG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHdpdGggdGhlaXIgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgdmlzdWFsaXphdGlvbiBwYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGxpbmVJdGVtKSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgcHJvcGVydGllcyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhpcyBMaW5lSXRlbS5cblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KGxpbmVJdGVtLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZVR5cGUpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nID0gX3NsaWNlQXRTbGFzaChyZWxhdGl2ZVBhdGgsIHRydWUsIGZhbHNlKTtcblx0XHRcdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcmVsYXRpdmVQYXRoO1xuXHRcdFx0Y29uc3Qgc0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBfZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4gPSBncm91cFBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID4gLTE7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4uZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpLFxuXHRcdFx0XHQuLi5nZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzLCBpc0ZpZWxkR3JvdXBDb2x1bW4sIGxpbmVJdGVtKVxuXHRcdFx0fTtcblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxpbmVJdGVtLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRcdGxpbmVJdGVtLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyhsaW5lSXRlbSwgZm9ybWF0T3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBleHBvcnRTZXR0aW5nczogYW55ID0ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzVGVtcGxhdGUsXG5cdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nLFxuXHRcdFx0XHR0eXBlOiBkYXRhVHlwZSA/IF9nZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGlucHV0Rm9ybWF0OiBzRGF0ZUlucHV0Rm9ybWF0LFxuXHRcdFx0XHRkZWxpbWl0ZXI6IGRhdGFUeXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHR0cnVlVmFsdWU6IGRhdGFUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgPyBcIlllc1wiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRmYWxzZVZhbHVlOiBkYXRhVHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiID8gXCJOb1wiIDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nKSB7XG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGRhdGFUeXBlICYmIGdldFR5cGVDb25maWcobGluZUl0ZW0sIGRhdGFUeXBlKTtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gcHJvcGVydHlUeXBlQ29uZmlnXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiBkYXRhVHlwZSxcblx0XHRcdFx0XHRcdG9Gb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b0NvbnN0cmFpbnRzOiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHZpc3VhbFNldHRpbmdzOiBWaXN1YWxTZXR0aW5ncyA9IHt9O1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby52aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbiB3aXRoIGRpc3BsYXkgbW9kZSBhcyB0ZXh0IG9ubHksIGV4Y2x1ZGUgdGV4dCBwcm9wZXJ0eSBmcm9tIHRoZSB3aWR0aCBjYWxjdWxhdGlvblxuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0XHRleGNsdWRlUHJvcGVydGllczogW1wiUHJvcGVydHk6OlwiICsgcmVsYXRlZFByb3BlcnRpZXNJbmZvLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIWRhdGFUeXBlIHx8ICFvVHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUT0RPOiBGb3Igc2l0dWF0aW9uIFBPQyAtIGluY3JlYXNlIHdpZHRoIG9mIHRoZSBjb2x1bW4gd2l0aCB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgLSB3b3JrcyBmb3IgdGhlIHNpdHVhdGlvbnMgZGVtbyBhcHAgb25seSFcblx0XHRcdC8vIE1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIG1vdmUgdGhlIGNvbXBsZXRlIGNvbHVtbiB3aWR0aCBkZXRlcm1pbmF0aW9uIHRvIHRoZSBjb252ZXJ0ZXIsIHRoYXQgd291bGQgYWxsb3cgdXMgdG8gd2lkZW5cblx0XHRcdC8vIHRoZSBjb2x1bW5zIGFzIG5lZWRlZC4gVGhpcyB3b3JrYXJvdW5kIG9ubHkgZGVhbHMgd2l0aCBEYXRlIGNvbHVtbnMuXG5cdFx0XHRjb25zdCB7IGhhc0RyYWZ0SW5kaWNhdG9yIH0gPSBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzLCBpc0ZpZWxkR3JvdXBDb2x1bW4sIGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHdpZHRoT3ZlcnJpZGUgPVxuXHRcdFx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMgYXMgYW55KS5GRT8uU2l0dWF0aW9ucyAmJlxuXHRcdFx0XHRoYXNEcmFmdEluZGljYXRvciAmJlxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkICYmXG5cdFx0XHRcdGxpbmVJdGVtLlZhbHVlLiR0YXJnZXQudHlwZSA9PT0gXCJFZG0uRGF0ZVwiXG5cdFx0XHRcdFx0PyBcIjExZW1cIlxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0XHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IF9nZXRMYWJlbChsaW5lSXRlbSkgOiBudWxsLFxuXHRcdFx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbihsaW5lSXRlbSkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbDogc2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBfaXNDb2x1bW5Tb3J0YWJsZShsaW5lSXRlbSwgcmVsYXRpdmVQYXRoLCBub25Tb3J0YWJsZUNvbHVtbnMpLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gcmVsYXRlZFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zOiBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gYWRkaXRpb25hbFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBleHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0d2lkdGg6IGxpbmVJdGVtLmFubm90YXRpb25zPy5IVE1MNT8uQ3NzRGVmYXVsdHM/LndpZHRoIHx8IHdpZHRoT3ZlcnJpZGUgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGxpbmVJdGVtIGFzIERhdGFGaWVsZFR5cGVzLCBzZW1hbnRpY0tleXMpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0ZXhwb3J0Q29udGFjdFByb3BlcnR5OiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHksXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dHlwZUNvbmZpZzogb1R5cGVDb25maWcsXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzOiB2aXN1YWxTZXR0aW5nc1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAobGluZUl0ZW0pO1xuXHRcdFx0aWYgKHNUb29sdGlwKSB7XG5cdFx0XHRcdG9Db2x1bW4udG9vbHRpcCA9IHNUb29sdGlwO1xuXHRcdFx0fVxuXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblxuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0bGV0IHRhYmxlQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZVR5cGVcblx0KTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChhbm5vdGF0aW9uQ29sdW1ucyk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKGNvbHVtbnNUb0JlQ3JlYXRlZCwgdGFibGVDb2x1bW5zLCBub25Tb3J0YWJsZUNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHR0YWJsZUNvbHVtbnMgPSB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMge3N0cmluZ1tdfSBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoZnVuY3Rpb24gKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0YWJsZSBjb2x1bW4gcHJvcGVydHkgdmFsdWUgYmFzZWQgb24gY2VydGFpbiBjb25kaXRpb25zLlxuICpcbiAqIE1hbmlmZXN0IGRlZmluZWQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSAvIGFubm90YXRpb24gY29sdW1uc1xuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgY3VzdG9tIGNvbHVtbiBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHByb3BlcnR5IFRoZSBjb2x1bW4gcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSB7YW55fSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQW5ub3RhdGlvbkNvbHVtbiBXaGV0aGVyIHRoZSBjb2x1bW4sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gY29sdW1uLlxuICogQHJldHVybnMge2FueX0gRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55LCBkZWZhdWx0VmFsdWU6IGFueSwgaXNBbm5vdGF0aW9uQ29sdW1uOiBib29sZWFuKTogYW55IHtcblx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGNvbHVtbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgY29sdW1uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogZGVmYXVsdFZhbHVlO1xuXHR9XG5cdC8vIFJldHVybiB3aGF0IGlzIGRlZmluZWQgaW4gbWFuaWZlc3QuXG5cdHJldHVybiBwcm9wZXJ0eTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj59IFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0VGFibGVDb2x1bW4+LFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj4ge1xuXHRjb25zdCBpbnRlcm5hbENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb2x1bW4gPSBjb2x1bW5zW2tleV07XG5cdFx0Ly8gVG8gaWRlbnRpZnkgdGhlIGFubm90YXRpb24gY29sdW1uIHByb3BlcnR5IG92ZXJ3cml0ZSB2aWEgbWFuaWZlc3QgdXNlLWNhc2UuXG5cdFx0Y29uc3QgaXNBbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZVxuXHRcdCk7XG5cdFx0aWYgKCFtYW5pZmVzdENvbHVtbj8udGVtcGxhdGUgJiYgbWFuaWZlc3RDb2x1bW4/LnR5cGUgIT09IFwiU2xvdFwiICYmICFpc0Fubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdGNvbnN0IE1lc3NhZ2UgPSBcIlRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnXCIgKyBrZXkgKyBcIicgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kXCI7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdE1lc3NhZ2UsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0ge1xuXHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0aWQ6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdFx0bmFtZTogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0XHRoZWFkZXI6IG1hbmlmZXN0Q29sdW1uLmhlYWRlcixcblx0XHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsIEltcG9ydGFuY2UuTm9uZSwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sIGlzQW5ub3RhdGlvbkNvbHVtbiksXG5cdFx0XHRcdHR5cGU6IG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IFwiU2xvdFwiID8gQ29sdW1uVHlwZS5TbG90IDogQ29sdW1uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IF9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlKG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksIEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0XHRcdC4uLm1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbkNvbHVtblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiBwcm9wZXJ0eUluZm9zID8gX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZpZWxkTGFiZWw6IHByb3BlcnR5SW5mb3MgPyBtYW5pZmVzdENvbHVtbi5oZWFkZXIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0d3JhcDogcHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBiQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHJldHVybiBiQW5hbHl0aWNhbFRhYmxlID8gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCIgOiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZ3JvdXAgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGJvb2xlYW4gc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICpcbiAqIEBwYXJhbSB7TWFuaWZlc3RXcmFwcGVyfSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgc2V0dGluZ3MgZ2V0dGVyIGZvciB0aGUgcGFnZVxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmXG5cdFx0IWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpICYmXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBDdXJyZW50bHkgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkIGFzIHNvcnRlclxuXHRjb25zdCBub25Tb3J0YWJsZVByb3BlcnRpZXMgPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdGxldCBzb3J0Q29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlNvcnRPcmRlcikge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlclR5cGVbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSB7XG5cdFx0XHRzb3J0ZXJzOiBzb3J0ZXJzXG5cdFx0fTtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Tb3J0T3JkZXIuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25Qcm9wZXJ0eSA9IGNvbmRpdGlvbi5Qcm9wZXJ0eTtcblx0XHRcdGlmIChjb25kaXRpb25Qcm9wZXJ0eSAmJiBub25Tb3J0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihjb25kaXRpb25Qcm9wZXJ0eS4kdGFyZ2V0Py5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWUpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRyZXR1cm4gIWFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0aW5mb05hbWVzLnB1c2gocHJvcGVydHlJbmZvLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGluZm9OYW1lcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBncm91cCBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGNvbnN0IGFHcm91cEJ5ID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uR3JvdXBCeSBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRjb25zdCBhR3JvdXBMZXZlbHMgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFHcm91cEJ5LCBjb2x1bW5zKS5tYXAoKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBpbmZvTmFtZSB9O1xuXHRcdH0pO1xuXG5cdFx0Z3JvdXBDb25kaXRpb25zID0gYUdyb3VwTGV2ZWxzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHsgZ3JvdXBMZXZlbHM6IGFHcm91cExldmVscyB9KSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZ3JvdXBDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbCBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gVGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGNvbXBpbGVCaW5kaW5nKGNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uXG5cdCk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKSBhcyBudW1iZXI7XG5cdH1cblxuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgaXNTZWFyY2hhYmxlID0gaXNQYXRoU2VhcmNoYWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdFwiZGVsZXRlXCI6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGlvblJvdzogZ2V0Q3JlYXRpb25Sb3coY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dClcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGhcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGU6IHN0cmluZywgaXNDb21wbGV4UHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZTogc3RyaW5nID0gXCJTdHJpbmdcIjtcblx0aWYgKGlzQ29tcGxleFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlT2ZUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJCb29sZWFuXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2goUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cblxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRyZXR1cm4gbXVsdGlTZWxlY3RNb2RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVUeXBlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlVHlwZSB7XG5cdGxldCB0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdGlmICh0YWJsZVNldHRpbmdzPy50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHR0YWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiO1xuXHRcdH1cblx0XHRpZiAoIXRhYmxlU2V0dGluZ3M/LnR5cGUpIHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0dGFibGVUeXBlID0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0YWJsZVR5cGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdLFxuXHRxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0cGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGFueSB7XG5cdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRxdWlja0ZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHF1aWNrRmlsdGVyczoge1xuXHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIns9ICR7cGFnZUludGVybmFsPmhhc1BlbmRpbmdGaWx0ZXJzfSAhPT0gdHJ1ZX1cIiA6IHRydWUsXG5cdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYW55IHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnk7XG5cdGxldCBmaWx0ZXJzO1xuXHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoXCJAXCIgKyBwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRmaWx0ZXJzID0gX2dldEZpbHRlcnModGFibGVTZXR0aW5ncywgcXVpY2tGaWx0ZXJQYXRocywgcXVpY2tTZWxlY3Rpb25WYXJpYW50LCBwYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSAodGFibGVNYW5pZmVzdFNldHRpbmdzICYmIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzKSB8fCB7fTtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzUGhvbmUoKTtcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIjsgLy8gUGFzdGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBleGNlcHRlZCBmb3IgT1Bcblx0Y29uc3QgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCA/IFwiQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlclwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBvRmlsdGVyQ29uZmlndXJhdGlvbiA9IF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKHRhYmxlU2V0dGluZ3MsIGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHRhYmxlVHlwZTogVGFibGVUeXBlID0gX2dldFRhYmxlVHlwZSh0YWJsZVNldHRpbmdzLCBhZ2dyZWdhdGlvbkhlbHBlciwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID1cblx0XHR0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCA6IGZhbHNlO1xuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IHtcblx0XHRjcmVhdGVBdEVuZDogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlLFxuXHRcdGNyZWF0aW9uTW9kZTogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLFxuXHRcdC8vIGlmIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkLCBpLmUuIHNldCB0byBmYWxzZVxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2UsXG5cdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBlbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0ZW5hYmxlRXhwb3J0OiBfZ2V0RW5hYmxlRXhwb3J0KHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIGVuYWJsZVBhc3RlKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0aGVhZGVyVmlzaWJsZTogdHJ1ZSxcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMCxcblxuXHRcdHNob3dSb3dDb3VudDpcblx0XHRcdCF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0fTtcblxuXHRyZXR1cm4geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4ub0ZpbHRlckNvbmZpZ3VyYXRpb24gfTtcbn1cblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb25maWcob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRsZXQgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGlmICghb1RhcmdldE1hcHBpbmcgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnRhcmdldFR5cGUgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZT8uX3R5cGUgPT09IFwiVHlwZURlZmluaXRpb25cIikge1xuXHRcdG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1soKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZSBhcyBUeXBlRGVmaW5pdGlvbikudW5kZXJseWluZ1R5cGVdO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSkge1xuXHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cyA9IHtcblx0XHRcdHNjYWxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFNjYWxlID8gb1Byb3BlcnR5LnNjYWxlIDogdW5kZWZpbmVkLFxuXHRcdFx0cHJlY2lzaW9uOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiA/IG9Qcm9wZXJ0eS5wcmVjaXNpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRtYXhMZW5ndGg6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoID8gb1Byb3BlcnR5Lm1heExlbmd0aCA6IHVuZGVmaW5lZCxcblx0XHRcdG51bGxhYmxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE51bGxhYmxlID8gb1Byb3BlcnR5Lm51bGxhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0bWluaW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4aW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0aXNEaWdpdFNlcXVlbmNlOlxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0KG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG4iXX0=
|