@veloceapps/sdk 6.0.0-9 → 6.0.0-90
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +10 -2
- package/bundles/veloceapps-sdk-cms.umd.js +1268 -798
- package/bundles/veloceapps-sdk-cms.umd.js.map +1 -1
- package/bundles/veloceapps-sdk-core.umd.js +821 -713
- package/bundles/veloceapps-sdk-core.umd.js.map +1 -1
- package/bundles/veloceapps-sdk-runtime.umd.js +216 -150
- package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -1
- package/bundles/veloceapps-sdk.umd.js +385 -302
- package/bundles/veloceapps-sdk.umd.js.map +1 -1
- package/cms/cms.actions.d.ts +2 -4
- package/cms/components/element-children/element-children.component.d.ts +13 -3
- package/cms/components/element-children/element-children.module.d.ts +4 -2
- package/cms/components/element-drop-handle/element-drop-handle.component.d.ts +12 -0
- package/cms/components/element-drop-handle/element-drop-handle.module.d.ts +9 -0
- package/cms/components/element-renderer/element-renderer.component.d.ts +3 -3
- package/cms/components/preview/index.d.ts +1 -0
- package/cms/components/preview/preview.component.d.ts +9 -8
- package/cms/components/preview/preview.module.d.ts +2 -1
- package/cms/components/preview/preview.types.d.ts +11 -0
- package/cms/index.d.ts +2 -0
- package/cms/launcher.module.d.ts +3 -1
- package/cms/modules/migrations/index.d.ts +2 -0
- package/cms/modules/migrations/migrations.d.ts +2 -0
- package/cms/modules/migrations/migrations.module.d.ts +6 -0
- package/cms/modules/migrations/services/migrations.service.d.ts +10 -0
- package/cms/modules/migrations/types/migrations.types.d.ts +2 -0
- package/cms/modules/runtime/index.d.ts +2 -0
- package/cms/modules/runtime/runtime.module.d.ts +8 -0
- package/cms/modules/runtime/services/compilation.service.d.ts +18 -0
- package/cms/modules/runtime/services/runtime-editor.service.d.ts +18 -0
- package/cms/modules/runtime/services/runtime.service.d.ts +27 -0
- package/cms/modules/runtime/tokens.d.ts +3 -0
- package/cms/{types → modules/runtime/types}/compilation.types.d.ts +1 -1
- package/cms/modules/runtime/types/runtime.actions.d.ts +9 -0
- package/cms/services/index.d.ts +1 -1
- package/cms/services/io-provider.service.d.ts +3 -3
- package/cms/services/resources.service.d.ts +10 -0
- package/cms/types/common.types.d.ts +1 -1
- package/cms/types/configuration.types.d.ts +1 -0
- package/cms/types/index.d.ts +1 -1
- package/cms/utils/elements-resolver.d.ts +3 -2
- package/cms/utils/index.d.ts +1 -0
- package/cms/utils/path.utils.d.ts +0 -1
- package/cms/utils/ui-definition.utils.d.ts +6 -0
- package/cms/vendor-map.d.ts +50 -31
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +2 -4
- package/core/modules/configuration/services/configuration.service.d.ts +6 -4
- package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -2
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +3 -2
- package/core/modules/flow-configuration/services/flow-update.service.d.ts +3 -2
- package/core/services/metric-calculation/metric-calculation.service.d.ts +5 -1
- package/core/services/quote-draft.service.d.ts +2 -2
- package/core/types/index.d.ts +0 -1
- package/core/types/ui-definition.types.d.ts +19 -4
- package/core/utils/index.d.ts +1 -0
- package/core/utils/line-item.utils.d.ts +2 -0
- package/core/utils/ui-definition.utils.d.ts +2 -0
- package/esm2015/cms/cms.actions.js +1 -6
- package/esm2015/cms/components/element-children/element-children.component.js +24 -8
- package/esm2015/cms/components/element-children/element-children.module.js +8 -6
- package/esm2015/cms/components/element-drop-handle/element-drop-handle.component.js +32 -0
- package/esm2015/cms/components/element-drop-handle/element-drop-handle.module.js +19 -0
- package/esm2015/cms/components/element-renderer/element-renderer.component.js +9 -9
- package/esm2015/cms/components/element-renderer/element-renderer.module.js +4 -4
- package/esm2015/cms/components/plugin.component.js +3 -3
- package/esm2015/cms/components/preview/index.js +2 -1
- package/esm2015/cms/components/preview/preview.component.js +21 -36
- package/esm2015/cms/components/preview/preview.module.js +7 -6
- package/esm2015/cms/components/preview/preview.types.js +2 -0
- package/esm2015/cms/directives/custom-template.directive.js +3 -3
- package/esm2015/cms/index.js +3 -1
- package/esm2015/cms/launcher.module.js +11 -10
- package/esm2015/cms/modules/federated/federated.component.js +3 -3
- package/esm2015/cms/modules/federated/federated.module.js +4 -4
- package/esm2015/cms/modules/migrations/index.js +3 -0
- package/esm2015/cms/modules/migrations/migrations.js +11 -0
- package/esm2015/cms/modules/migrations/migrations.module.js +15 -0
- package/esm2015/cms/modules/migrations/services/migrations.service.js +43 -0
- package/esm2015/cms/modules/migrations/types/migrations.types.js +2 -0
- package/esm2015/cms/modules/runtime/index.js +3 -0
- package/esm2015/cms/modules/runtime/runtime.module.js +32 -0
- package/esm2015/cms/modules/runtime/services/compilation.service.js +84 -0
- package/esm2015/cms/modules/runtime/services/runtime-editor.service.js +27 -0
- package/esm2015/cms/modules/runtime/services/runtime.service.js +74 -0
- package/esm2015/cms/modules/runtime/tokens.js +3 -0
- package/esm2015/cms/modules/runtime/types/compilation.types.js +2 -0
- package/esm2015/cms/modules/runtime/types/runtime.actions.js +2 -0
- package/esm2015/cms/plugins/configuration.plugin.js +12 -4
- package/esm2015/cms/plugins/io.plugin.js +3 -3
- package/esm2015/cms/plugins/script.plugin.js +3 -3
- package/esm2015/cms/services/element-context.service.js +3 -3
- package/esm2015/cms/services/index.js +2 -2
- package/esm2015/cms/services/integration.state.js +3 -3
- package/esm2015/cms/services/io-provider.service.js +9 -9
- package/esm2015/cms/services/resources.service.js +50 -0
- package/esm2015/cms/services/templates.service.js +3 -3
- package/esm2015/cms/types/common.types.js +1 -1
- package/esm2015/cms/types/configuration.types.js +1 -1
- package/esm2015/cms/types/index.js +2 -2
- package/esm2015/cms/utils/elements-resolver.js +18 -8
- package/esm2015/cms/utils/index.js +2 -1
- package/esm2015/cms/utils/path.utils.js +2 -13
- package/esm2015/cms/utils/ui-definition.utils.js +82 -0
- package/esm2015/cms/vendor-map.js +25 -10
- package/esm2015/core/core.module.js +4 -4
- package/esm2015/core/modules/configuration/configuration.module.js +4 -4
- package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +5 -10
- package/esm2015/core/modules/configuration/services/configuration.service.js +38 -34
- package/esm2015/core/modules/configuration/services/runtime-context.service.js +3 -3
- package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +1 -1
- package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +4 -4
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +11 -10
- package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +9 -9
- package/esm2015/core/services/context.service.js +3 -3
- package/esm2015/core/services/metric-calculation/metric-calculation.service.js +18 -9
- package/esm2015/core/services/product-images.service.js +3 -3
- package/esm2015/core/services/quote-draft.service.js +7 -7
- package/esm2015/core/types/index.js +1 -2
- package/esm2015/core/types/ui-definition.types.js +2 -2
- package/esm2015/core/utils/index.js +2 -1
- package/esm2015/core/utils/line-item.utils.js +27 -11
- package/esm2015/core/utils/ui-definition.utils.js +9 -0
- package/esm2015/runtime/components/component-preview/component-preview.component.js +4 -4
- package/esm2015/runtime/components/section-renderer/section-renderer.component.js +3 -3
- package/esm2015/runtime/components/ui-runtime/runtime.component.js +3 -3
- package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +3 -3
- package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +6 -6
- package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +3 -3
- package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +3 -3
- package/esm2015/runtime/execution/components/federated/federated.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +3 -3
- package/esm2015/runtime/execution/directives/section-script.directive.js +3 -3
- package/esm2015/runtime/execution/directives/sf-query.directive.js +3 -3
- package/esm2015/runtime/execution/directives/velo-attribute.directive.js +3 -3
- package/esm2015/runtime/execution/directives/velo-port.directive.js +18 -18
- package/esm2015/runtime/execution/directives/vl-approval.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-quote.directive.js +4 -4
- package/esm2015/runtime/execution/directives/vl-ramp.directive.js +3 -3
- package/esm2015/runtime/execution/runtime-execution.module.js +4 -4
- package/esm2015/runtime/runtime.module.js +4 -4
- package/esm2015/runtime/services/cart.service.js +3 -3
- package/esm2015/runtime/services/collapsible-state.service.js +3 -3
- package/esm2015/runtime/services/configuration.service.js +11 -12
- package/esm2015/runtime/services/current-state.service.js +3 -3
- package/esm2015/runtime/services/form-scope.service.js +3 -3
- package/esm2015/runtime/services/product-model-cache.service.js +3 -3
- package/esm2015/runtime/services/runtime-context.service.js +3 -3
- package/esm2015/runtime/services/runtime-form.service.js +3 -3
- package/esm2015/runtime/services/runtime.service.js +4 -4
- package/esm2015/runtime/services/section-helper.service.js +3 -3
- package/esm2015/runtime/services/section-scope.service.js +3 -3
- package/esm2015/runtime/services/section-store.service.js +3 -3
- package/esm2015/runtime/services/section.service.js +6 -6
- package/esm2015/runtime/types/index.js +2 -1
- package/esm2015/runtime/types/quote-states.types.js +2 -0
- package/esm2015/src/components/dialog/dialog.component.js +16 -6
- package/esm2015/src/components/dialog/dialog.module.js +4 -4
- package/esm2015/src/components/dialog/dialog.types.js +1 -1
- package/esm2015/src/components/doc-gen/doc-gen.component.js +3 -3
- package/esm2015/src/components/doc-gen/doc-gen.module.js +4 -4
- package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +3 -3
- package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +4 -4
- package/esm2015/src/components/header/header.component.js +20 -12
- package/esm2015/src/components/header/header.module.js +4 -4
- package/esm2015/src/components/header/metrics/metrics.component.js +79 -67
- package/esm2015/src/components/header/metrics/metrics.definitions.js +1 -8
- package/esm2015/src/components/header/metrics/metrics.module.js +4 -4
- package/esm2015/src/flow-routing.module.js +4 -4
- package/esm2015/src/flow.component.js +3 -3
- package/esm2015/src/flow.module.js +4 -4
- package/esm2015/src/guards/context.guard.js +3 -3
- package/esm2015/src/guards/product-unload.guard.js +5 -5
- package/esm2015/src/guards/root.guard.js +3 -3
- package/esm2015/src/pages/catalog/catalog.component.js +3 -3
- package/esm2015/src/pages/catalog/catalog.module.js +4 -4
- package/esm2015/src/pages/debug/debug.component.js +3 -3
- package/esm2015/src/pages/debug/debug.module.js +4 -4
- package/esm2015/src/pages/empty-account/empty-account.component.js +3 -3
- package/esm2015/src/pages/empty-account/empty-account.module.js +4 -4
- package/esm2015/src/pages/legacy-product/legacy-product.component.js +4 -4
- package/esm2015/src/pages/legacy-product/legacy-product.module.js +4 -4
- package/esm2015/src/pages/product/product.component.js +5 -12
- package/esm2015/src/pages/product/product.module.js +4 -4
- package/esm2015/src/pages/record-not-found/record-not-found.component.js +3 -3
- package/esm2015/src/pages/record-not-found/record-not-found.module.js +4 -4
- package/esm2015/src/pages/remote/remote.component.js +5 -8
- package/esm2015/src/pages/remote/remote.module.js +4 -4
- package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +3 -3
- package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +4 -4
- package/esm2015/src/resolvers/flow.resolver.js +3 -3
- package/esm2015/src/resolvers/quote.resolver.js +8 -8
- package/esm2015/src/services/doc-gen.service.js +3 -3
- package/esm2015/src/services/flow-dialog.service.js +5 -4
- package/esm2015/src/services/flow-router.service.js +3 -3
- package/esm2015/src/services/flow.service.js +3 -3
- package/esm2015/src/utils/flow.utils.js +3 -3
- package/fesm2015/veloceapps-sdk-cms.js +1072 -718
- package/fesm2015/veloceapps-sdk-cms.js.map +1 -1
- package/fesm2015/veloceapps-sdk-core.js +568 -534
- package/fesm2015/veloceapps-sdk-core.js.map +1 -1
- package/fesm2015/veloceapps-sdk-runtime.js +145 -146
- package/fesm2015/veloceapps-sdk-runtime.js.map +1 -1
- package/fesm2015/veloceapps-sdk.js +270 -255
- package/fesm2015/veloceapps-sdk.js.map +1 -1
- package/package.json +5 -3
- package/runtime/services/configuration.service.d.ts +2 -1
- package/runtime/services/runtime.service.d.ts +2 -1
- package/runtime/types/index.d.ts +1 -0
- package/src/components/dialog/dialog.types.d.ts +1 -0
- package/src/components/header/header.component.d.ts +4 -2
- package/src/components/header/metrics/metrics.component.d.ts +15 -6
- package/src/components/header/metrics/metrics.definitions.d.ts +0 -3
- package/src/pages/product/product.component.d.ts +0 -1
- package/cms/services/dynamic-module.service.d.ts +0 -15
- package/cms/services/launcher.service.d.ts +0 -18
- package/esm2015/cms/services/dynamic-module.service.js +0 -33
- package/esm2015/cms/services/launcher.service.js +0 -58
- package/esm2015/cms/types/compilation.types.js +0 -2
- package/esm2015/core/types/quote-states.types.js +0 -2
- /package/{core → runtime}/types/quote-states.types.d.ts +0 -0
@@ -2,15 +2,14 @@ import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ViewChild } from '@angular/core';
|
3
3
|
import { FormControl, Validators } from '@angular/forms';
|
4
4
|
import { invalidCharactersValidator, requiredValidator, reservedIdentifierValidator, standardCharSetWithSpaceRegExp, } from '@veloceapps/core/forms';
|
5
|
-
import {
|
6
|
-
import { cloneDeep, isEqual, uniq } from 'lodash';
|
5
|
+
import { cloneDeep, uniq } from 'lodash';
|
7
6
|
import { OverlayPanel } from 'primeng/overlaypanel';
|
8
|
-
import {
|
9
|
-
import { takeUntil, tap } from 'rxjs/operators';
|
10
|
-
import { METRICS_STORAGE_KEY
|
7
|
+
import { startWith, Subject } from 'rxjs';
|
8
|
+
import { takeUntil, tap, withLatestFrom } from 'rxjs/operators';
|
9
|
+
import { METRICS_STORAGE_KEY } from './metrics.definitions';
|
11
10
|
import * as i0 from "@angular/core";
|
12
|
-
import * as i1 from "@veloceapps/sdk/
|
13
|
-
import * as i2 from "@veloceapps/
|
11
|
+
import * as i1 from "@veloceapps/sdk/core";
|
12
|
+
import * as i2 from "@veloceapps/api";
|
14
13
|
import * as i3 from "primeng/overlaypanel";
|
15
14
|
import * as i4 from "primeng/sidebar";
|
16
15
|
import * as i5 from "primeng/button";
|
@@ -22,12 +21,13 @@ import * as i10 from "@angular/forms";
|
|
22
21
|
import * as i11 from "primeng/inputtext";
|
23
22
|
import * as i12 from "@angular/cdk/drag-drop";
|
24
23
|
export class MetricsComponent {
|
25
|
-
constructor(
|
26
|
-
this.integrationState = integrationState;
|
24
|
+
constructor(contextService, quoteDraftService, cdr, metricsCalculationService, flowConfiguration, shoppingCartSettingsApiService) {
|
27
25
|
this.contextService = contextService;
|
28
26
|
this.quoteDraftService = quoteDraftService;
|
29
27
|
this.cdr = cdr;
|
30
28
|
this.metricsCalculationService = metricsCalculationService;
|
29
|
+
this.flowConfiguration = flowConfiguration;
|
30
|
+
this.shoppingCartSettingsApiService = shoppingCartSettingsApiService;
|
31
31
|
this.emptyStateMetrics = [
|
32
32
|
{ name: 'MRR', value: 0 },
|
33
33
|
{ name: 'E.MRR', value: 0 },
|
@@ -46,35 +46,26 @@ export class MetricsComponent {
|
|
46
46
|
reservedIdentifierValidator,
|
47
47
|
Validators.maxLength(80),
|
48
48
|
]);
|
49
|
-
this.
|
50
|
-
this.
|
49
|
+
this.activeMetricRules = [];
|
50
|
+
this.activeMetricRuleNames = [];
|
51
|
+
this.defaultMetricRuleNames = [];
|
51
52
|
this.metricKeys = [];
|
52
53
|
this.lastSavedMetrics = [];
|
53
54
|
this.destroyed$ = new Subject();
|
54
55
|
}
|
55
56
|
ngOnInit() {
|
56
|
-
this.
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
}, []);
|
65
|
-
this.collectAvailableMetrics();
|
66
|
-
}))
|
67
|
-
.subscribe();
|
68
|
-
this.integrationState
|
69
|
-
.listen$(FlowAction.SET_DEFAULT_METRICS)
|
70
|
-
.pipe(tap(({ metrics }) => {
|
71
|
-
if (isEqual(this.storedDefaultMetrics, metrics)) {
|
72
|
-
return;
|
73
|
-
}
|
74
|
-
this.storedDefaultMetrics = metrics;
|
75
|
-
this.collectAvailableMetrics();
|
57
|
+
this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
|
58
|
+
const activeMetricRuleNames = this.activeMetricRules.map(metricRule => metricRule.title);
|
59
|
+
this.shoppingCartSettingsApiService
|
60
|
+
.getSettingsMap()
|
61
|
+
.pipe(withLatestFrom(this.quoteDraftService.currentState$), tap(([settings, lineItems]) => {
|
62
|
+
this.defaultMetricRuleNames = ((settings === null || settings === void 0 ? void 0 : settings.DEFAULT_HEADER_METRICS) || []).filter(ruleName => activeMetricRuleNames.includes(ruleName));
|
63
|
+
this.metricKeys = this.collectMetricKeys(lineItems);
|
64
|
+
this.activeMetricRuleNames = this.getActiveMetricRuleNames();
|
76
65
|
}), takeUntil(this.destroyed$))
|
77
|
-
.subscribe()
|
66
|
+
.subscribe(() => {
|
67
|
+
this.collectAvailableMetrics();
|
68
|
+
});
|
78
69
|
this.searchControl.valueChanges.pipe(takeUntil(this.destroyed$), startWith('')).subscribe(query => {
|
79
70
|
this.filteredMetrics = this.metrics.filter(({ name }) => {
|
80
71
|
return (name || '').toLowerCase().includes(query === null || query === void 0 ? void 0 : query.toLowerCase());
|
@@ -152,42 +143,27 @@ export class MetricsComponent {
|
|
152
143
|
this.restSelectedMetrics = metrics.slice(4);
|
153
144
|
}
|
154
145
|
collectAvailableMetrics(resetToDefault = false) {
|
155
|
-
this.metrics = [];
|
156
|
-
this.defaultMetrics = this.storedDefaultMetrics.length ? this.storedDefaultMetrics : defaultMetrics;
|
157
146
|
const storedMetrics = JSON.parse(localStorage.getItem(METRICS_STORAGE_KEY) || '[]');
|
158
|
-
const metricKeys =
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
metricKeys.splice(metricKeyIndex, 1);
|
171
|
-
}
|
172
|
-
});
|
173
|
-
}
|
174
|
-
else {
|
175
|
-
this.metrics = [
|
176
|
-
...storedMetrics.reduce((result, metric) => {
|
177
|
-
const metricKeyIndex = metricKeys.findIndex(key => key === metric.key);
|
178
|
-
if (metricKeyIndex >= 0) {
|
179
|
-
metricKeys.splice(metricKeyIndex, 1);
|
180
|
-
}
|
181
|
-
return [...result, metric];
|
182
|
-
}, []),
|
183
|
-
];
|
184
|
-
}
|
147
|
+
const metricKeys = this.metricKeys.slice();
|
148
|
+
const isDefaultConfiguration = !storedMetrics.length || resetToDefault;
|
149
|
+
this.metrics = (isDefaultConfiguration ? this.activeMetricRuleNames : storedMetrics).reduce((result, metric) => {
|
150
|
+
const metricKeyIndex = metricKeys.findIndex(key => key === metric.key);
|
151
|
+
if (metricKeyIndex >= 0) {
|
152
|
+
metricKeys.splice(metricKeyIndex, 1);
|
153
|
+
}
|
154
|
+
if (isDefaultConfiguration && this.defaultMetricRuleNames.includes(metric.name)) {
|
155
|
+
metric.visible = true;
|
156
|
+
}
|
157
|
+
return [...result, metric];
|
158
|
+
}, []);
|
185
159
|
this.metrics = [
|
186
160
|
...this.metrics,
|
187
161
|
...metricKeys.map(metricKey => {
|
188
162
|
return { key: metricKey, name: this.getMetricName(metricKey), visible: false };
|
189
163
|
}),
|
190
164
|
];
|
165
|
+
// sort the metrics by the order of default metric rule names from the shopping cart settings
|
166
|
+
this.metrics = this.sortMetrics();
|
191
167
|
this.metrics = cloneDeep(this.metrics);
|
192
168
|
this.searchControl.setValue('');
|
193
169
|
if (!resetToDefault) {
|
@@ -197,15 +173,51 @@ export class MetricsComponent {
|
|
197
173
|
this.cdr.markForCheck();
|
198
174
|
}
|
199
175
|
getMetricName(key) {
|
200
|
-
|
176
|
+
var _a;
|
177
|
+
return (((_a = this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === key))) === null || _a === void 0 ? void 0 : _a.title) ||
|
178
|
+
key);
|
201
179
|
}
|
202
180
|
toNumber(value) {
|
203
181
|
return +(value || 0);
|
204
182
|
}
|
183
|
+
getActiveMetricRuleNames() {
|
184
|
+
return this.activeMetricRules.reduce((result, metricRule) => {
|
185
|
+
const name = metricRule.title;
|
186
|
+
const visible = this.defaultMetricRuleNames.includes(name);
|
187
|
+
metricRule.metrics.forEach(metric => {
|
188
|
+
result.push({
|
189
|
+
key: metric.totalName || metric.name,
|
190
|
+
name,
|
191
|
+
visible,
|
192
|
+
});
|
193
|
+
});
|
194
|
+
return result;
|
195
|
+
}, []);
|
196
|
+
}
|
197
|
+
/**
|
198
|
+
* Sorts the Metrics array by the order of the default metric rule names from the shopping cart settings.
|
199
|
+
* If a metric is included in the list of default metrics, it raises the metric to the top of the metrics array.
|
200
|
+
*/
|
201
|
+
sortMetrics() {
|
202
|
+
return this.metrics.slice().sort((a, b) => {
|
203
|
+
const indexA = this.defaultMetricRuleNames.indexOf(a.name);
|
204
|
+
const indexB = this.defaultMetricRuleNames.indexOf(b.name);
|
205
|
+
if (indexA === -1 && indexB === -1) {
|
206
|
+
return 0;
|
207
|
+
}
|
208
|
+
if (indexA === -1) {
|
209
|
+
return 1;
|
210
|
+
}
|
211
|
+
if (indexB === -1) {
|
212
|
+
return -1;
|
213
|
+
}
|
214
|
+
return indexA - indexB;
|
215
|
+
});
|
216
|
+
}
|
205
217
|
}
|
206
|
-
MetricsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
207
|
-
MetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: MetricsComponent, selector: "vl-metrics", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<div class=\"header-metrics\" (click)=\"overlayPanel.toggle($event)\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span class=\"name\" [vlHiddenTextTooltip]=\"metric.name\" tooltipStyleClass=\"metric-tooltip\" tooltipPosition=\"bottom\">\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ getMetricValue(metric.key) | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ getMetricValue(metric.key) | number: '1.2-2' }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ metric.value | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ metric.value | number: '1.2-2' }}\n </span>\n </div>\n </ng-container>\n</div>\n\n<p-overlayPanel\n styleClass=\"metrics-overlay-container center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ getMetricValue(metric.key) | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ getMetricValue(metric.key) | number: '1.2-2' }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-icon-chevron-down\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '360px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-icon-close\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <div class=\"search-container\">\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-icon-reorder\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error: 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-icon-edit-sm\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-icon-checkmark\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{cursor:pointer;min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;grid-gap:0 16px;gap:0 16px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0 24px;height:100%}::ng-deep .metrics-overlay-container{max-width:300px}::ng-deep .metrics-overlay-container .p-overlaypanel-content{padding:0}::ng-deep .metrics-overlay-container .overlay-metrics{max-height:110px;overflow:auto}::ng-deep .metrics-overlay-container .metric{display:flex;padding:0 12px;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .metrics-overlay-container .metric .name{max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric:not(:last-of-type){margin-bottom:4px}::ng-deep .metrics-overlay-container .metric:first-of-type{margin-top:12px}::ng-deep .metrics-overlay-container .metric:last-of-type{margin-bottom:12px}::ng-deep .metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;padding:0 12px;cursor:pointer;background:var(--vl-color-light-blue);outline:none;border:none;width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .metrics-overlay-container .config .vl-icon-chevron-down{color:var(--vl-text-color-accent-light);transform:rotate(-90deg)}.filler{flex:1;margin:0 4px 3px;min-width:5px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,var(--vl-text-color-accent-light) 1px,transparent 0);background-size:3px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{margin:15px 0 23px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:18px;line-height:26px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer;font-size:15px}.container .search-container{margin-bottom:12px}.container .search-container input{width:100%}.container .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:60px;padding:0 20px;margin:0 -16px;border-top:1px solid var(--vl-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{width:100%}.container .footer p-button:not(:last-child){margin-right:16px}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;padding-left:8px;border-radius:2px}.sidebar-metric:hover:not(.edit){background:var(--vl-color-light-blue)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;color:var(--vl-text-color-secondary)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{width:100%}.sidebar-metric .action{cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .edit i{color:var(--vl-text-color-deep-accent);width:12px;height:12px}.sidebar-metric .save{background:var(--vl-primary-color);border-radius:2px}.sidebar-metric .save i{color:#fff}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"], components: [{ type: i3.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i6.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { type: i7.ErrorTooltipComponent, selector: "vl-error-tooltip", inputs: ["tooltip", "visible"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.AppHiddenTextTooltipDirective, selector: "[vlHiddenTextTooltip]", inputs: ["vlHiddenTextTooltip"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.InputText, selector: "[pInputText]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "number": i8.DecimalPipe, "error": i7.ErrorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
218
|
+
MetricsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i0.ChangeDetectorRef }, { token: i1.MetricsCalculationService }, { token: i1.FlowConfigurationService }, { token: i2.ShoppingCartSettingsApiService }], target: i0.ɵɵFactoryTarget.Component });
|
219
|
+
MetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MetricsComponent, selector: "vl-metrics", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<div class=\"header-metrics\" (click)=\"overlayPanel.toggle($event)\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span class=\"name\" [vlHiddenTextTooltip]=\"metric.name\" tooltipStyleClass=\"metric-tooltip\" tooltipPosition=\"bottom\">\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ getMetricValue(metric.key) | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ getMetricValue(metric.key) | number: '1.2-2' }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ metric.value | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ metric.value | number: '1.2-2' }}\n </span>\n </div>\n </ng-container>\n</div>\n\n<p-overlayPanel\n styleClass=\"metrics-overlay-container center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"${{ getMetricValue(metric.key) | number: '1.2-2' }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n ${{ getMetricValue(metric.key) | number: '1.2-2' }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-icon-chevron-down\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '360px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-icon-close\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <div class=\"search-container\">\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-icon-reorder\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error: 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-icon-edit-sm\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-icon-checkmark\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{cursor:pointer;min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;grid-gap:0 16px;gap:0 16px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0 24px;height:100%}::ng-deep .metrics-overlay-container{max-width:300px}::ng-deep .metrics-overlay-container .p-overlaypanel-content{padding:0}::ng-deep .metrics-overlay-container .overlay-metrics{max-height:110px;overflow:auto}::ng-deep .metrics-overlay-container .metric{display:flex;padding:0 12px;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .metrics-overlay-container .metric .name{max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric:not(:last-of-type){margin-bottom:4px}::ng-deep .metrics-overlay-container .metric:first-of-type{margin-top:12px}::ng-deep .metrics-overlay-container .metric:last-of-type{margin-bottom:12px}::ng-deep .metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;padding:0 12px;cursor:pointer;background:var(--vl-color-light-blue);outline:none;border:none;width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .metrics-overlay-container .config .vl-icon-chevron-down{color:var(--vl-text-color-accent-light);transform:rotate(-90deg)}.filler{flex:1;margin:0 4px 3px;min-width:5px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,var(--vl-text-color-accent-light) 1px,transparent 0);background-size:3px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{margin:15px 0 23px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:18px;line-height:26px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer;font-size:15px}.container .search-container{margin-bottom:12px}.container .search-container input{width:100%}.container .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:60px;padding:0 20px;margin:0 -16px;border-top:1px solid var(--vl-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{width:100%}.container .footer p-button:not(:last-child){margin-right:16px}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;padding-left:8px;border-radius:2px}.sidebar-metric:hover:not(.edit){background:var(--vl-color-light-blue)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;user-select:text;cursor:text;color:var(--vl-text-color-secondary)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{width:100%}.sidebar-metric .action{cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .edit i{color:var(--vl-text-color-deep-accent);width:12px;height:12px}.sidebar-metric .save{background:var(--vl-primary-color);border-radius:2px}.sidebar-metric .save i{color:#fff}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"], components: [{ type: i3.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i6.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { type: i7.ErrorTooltipComponent, selector: "vl-error-tooltip", inputs: ["tooltip", "visible", "top"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.AppHiddenTextTooltipDirective, selector: "[vlHiddenTextTooltip]", inputs: ["vlHiddenTextTooltip"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.InputText, selector: "[pInputText]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "number": i8.DecimalPipe, "error": i7.ErrorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsComponent, decorators: [{
|
209
221
|
type: Component,
|
210
222
|
args: [{
|
211
223
|
selector: 'vl-metrics',
|
@@ -213,8 +225,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
213
225
|
styleUrls: ['./metrics.component.scss'],
|
214
226
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
215
227
|
}]
|
216
|
-
}], ctorParameters: function () { return [{ type: i1.
|
228
|
+
}], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i0.ChangeDetectorRef }, { type: i1.MetricsCalculationService }, { type: i1.FlowConfigurationService }, { type: i2.ShoppingCartSettingsApiService }]; }, propDecorators: { overlayPanel: [{
|
217
229
|
type: ViewChild,
|
218
230
|
args: [OverlayPanel]
|
219
231
|
}] } });
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0IsOEJBQThCLEdBQy9CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBNEIsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVFqRyxNQUFNLE9BQU8sZ0JBQWdCO0lBNkIzQixZQUNVLGdCQUFrQyxFQUNsQyxjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsR0FBc0IsRUFDdEIseUJBQW9EO1FBSnBELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQS9CdkQsc0JBQWlCLEdBQUc7WUFDekIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDekIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDM0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDekIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7U0FDNUIsQ0FBQztRQUNLLDJCQUFzQixHQUFhLEVBQUUsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFDbkMsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUUvQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixrQkFBYSxHQUFnQixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxnQkFBVyxHQUFnQixJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsaUJBQWlCO1lBQ2pCLDBCQUEwQixDQUFDLDhCQUE4QixDQUFDO1lBQzFELDJCQUEyQjtZQUMzQixVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFFSyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFDcEMsZUFBVSxHQUFhLEVBQUUsQ0FBQztRQUMxQixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFDaEMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFRdEMsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYTthQUNqQyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN6RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUM7aUJBQ2pDO2dCQUNELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxFQUFjLENBQUMsQ0FBQztZQUVuQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO2FBQ3ZDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUMvQyxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzNCO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDdEQsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0I7YUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sY0FBYyxDQUFDLEdBQVc7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkg7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFTSxJQUFJO1FBQ1QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQTRCO1FBQ25ELGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRU0sVUFBVSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ2xELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sVUFBVTs7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSywwQ0FBRSxJQUFJLEVBQUUsQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsU0FBcUI7UUFDN0MsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsY0FBYyxHQUFHLEtBQUs7UUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUNwRyxNQUFNLGFBQWEsR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM5RixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLGNBQWMsRUFBRTtZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRTlFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLFlBQVksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLGNBQWMsSUFBSSxDQUFDLEVBQUU7b0JBQ3ZCLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUc7Z0JBQ2IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUN6QyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFdkUsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFO3dCQUN2QixVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDdEM7b0JBRUQsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixDQUFDLEVBQUUsRUFBYyxDQUFDO2FBQ25CLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ2YsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDakYsQ0FBQyxDQUFDO1NBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQy9CLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUF5QjtRQUN4QyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7OEdBbE5VLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLGdHQUNoQixZQUFZLGdEQ3pCekIsMm9LQXNKQTs0RkQ5SGEsZ0JBQWdCO2tCQU41QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzRPQUVpQyxZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMaW5lSXRlbSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHtcbiAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3IsXG4gIHJlcXVpcmVkVmFsaWRhdG9yLFxuICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gIHN0YW5kYXJkQ2hhclNldFdpdGhTcGFjZVJlZ0V4cCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZS9mb3Jtcyc7XG5pbXBvcnQgeyBGbG93QWN0aW9uLCBJbnRlZ3JhdGlvblN0YXRlLCBNZXRyaWMgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY21zJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlLCBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLCBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTUVUUklDU19TVE9SQUdFX0tFWSwgZGVmYXVsdE1ldHJpY3MsIGVmZmVjdGl2ZU1ldHJpY0tleXMgfSBmcm9tICcuL21ldHJpY3MuZGVmaW5pdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1tZXRyaWNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21ldHJpY3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXRyaWNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZXRyaWNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKE92ZXJsYXlQYW5lbCkgcHVibGljIG92ZXJsYXlQYW5lbCE6IE92ZXJsYXlQYW5lbDtcblxuICBwdWJsaWMgZW1wdHlTdGF0ZU1ldHJpY3MgPSBbXG4gICAgeyBuYW1lOiAnTVJSJywgdmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6ICdFLk1SUicsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiAnTlJSJywgdmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6ICdFLk5SUicsIHZhbHVlOiAwIH0sXG4gIF07XG4gIHB1YmxpYyB2aXNpYmxlU2VsZWN0ZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgcmVzdFNlbGVjdGVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIG1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyBlZGl0aW5nTWV0cmljOiBNZXRyaWMgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBzaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICBwdWJsaWMgc2VhcmNoQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwdWJsaWMgbmFtZUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgcmVxdWlyZWRWYWxpZGF0b3IsXG4gICAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3Ioc3RhbmRhcmRDaGFyU2V0V2l0aFNwYWNlUmVnRXhwKSxcbiAgICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoODApLFxuICBdKTtcblxuICBwcml2YXRlIGRlZmF1bHRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwcml2YXRlIHN0b3JlZERlZmF1bHRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwcml2YXRlIG1ldHJpY0tleXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGFzdFNhdmVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGludGVncmF0aW9uU3RhdGU6IEludGVncmF0aW9uU3RhdGUsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbWV0cmljc0NhbGN1bGF0aW9uU2VydmljZTogTWV0cmljc0NhbGN1bGF0aW9uU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmN1cnJlbnRTdGF0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgICAgdGFwKGxpbmVJdGVtcyA9PiB7XG4gICAgICAgICAgdGhpcy5tZXRyaWNLZXlzID0gdGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXMpLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAoZWZmZWN0aXZlTWV0cmljS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGBFZmZlY3RpdmVfJHtrZXl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sIFtdIGFzIHN0cmluZ1tdKTtcblxuICAgICAgICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MoKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uU0VUX0RFRkFVTFRfTUVUUklDUylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHsgbWV0cmljcyB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5zdG9yZWREZWZhdWx0TWV0cmljcywgbWV0cmljcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdG9yZWREZWZhdWx0TWV0cmljcyA9IG1ldHJpY3M7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0QXZhaWxhYmxlTWV0cmljcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksIHN0YXJ0V2l0aCgnJykpLnN1YnNjcmliZShxdWVyeSA9PiB7XG4gICAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uU2VydmljZS5vbk1ldHJpY3NVcGRhdGUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgICB0aGlzLnNpZGViYXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZVNpZGViYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMubWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLmxhc3RTYXZlZE1ldHJpY3MpO1xuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGdldE1ldHJpY1ZhbHVlKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKCdFZmZlY3RpdmVfJykpIHtcbiAgICAgIGNvbnN0IGNvcnJlY3RLZXkgPSBrZXkucmVwbGFjZSgnRWZmZWN0aXZlXycsICcnKTtcbiAgICAgIHJldHVybiB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tjb3JyZWN0S2V5XSkgLSB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tgUHJldmlvdXMke2NvcnJlY3RLZXl9YF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLmdldE1ldHJpY1ZhbHVlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5tZXRyaWNzKSk7XG4gICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRNZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcyk7XG4gICAgdGhpcy5jbG9zZVNpZGViYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VNZXRyaWNPcmRlcihldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KTogdm9pZCB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubWV0cmljcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcztcbiAgfVxuXG4gIHB1YmxpYyBlZGl0TWV0cmljKG1ldHJpYzogTWV0cmljKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ01ldHJpYyAmJiB0aGlzLm5hbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gbWV0cmljO1xuICAgIHRoaXMubmFtZUNvbnRyb2wuc2V0VmFsdWUobWV0cmljLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmVNZXRyaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmFtZUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0aW5nTWV0cmljKSB7XG4gICAgICB0aGlzLmVkaXRpbmdNZXRyaWMubmFtZSA9IHRoaXMubmFtZUNvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlc2V0VG9EZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3ModHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxpbmVJdGVtcy5mb3JFYWNoKGxpbmVJdGVtID0+IHtcbiAgICAgIGtleXMucHVzaCguLi5PYmplY3Qua2V5cyhsaW5lSXRlbS50b3RhbE1ldHJpY3MgfHwge30pKTtcbiAgICAgIGtleXMucHVzaCguLi50aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtLmxpbmVJdGVtcykpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmlxKGtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXRyaWNzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzLmZpbHRlcigoeyB2aXNpYmxlIH0pID0+IHZpc2libGUpKTtcblxuICAgIHRoaXMudmlzaWJsZVNlbGVjdGVkTWV0cmljcyA9IG1ldHJpY3Muc2xpY2UoMCwgNCk7XG4gICAgdGhpcy5yZXN0U2VsZWN0ZWRNZXRyaWNzID0gbWV0cmljcy5zbGljZSg0KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MocmVzZXRUb0RlZmF1bHQgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMubWV0cmljcyA9IFtdO1xuICAgIHRoaXMuZGVmYXVsdE1ldHJpY3MgPSB0aGlzLnN0b3JlZERlZmF1bHRNZXRyaWNzLmxlbmd0aCA/IHRoaXMuc3RvcmVkRGVmYXVsdE1ldHJpY3MgOiBkZWZhdWx0TWV0cmljcztcbiAgICBjb25zdCBzdG9yZWRNZXRyaWNzOiBNZXRyaWNbXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSkgfHwgJ1tdJyk7XG4gICAgY29uc3QgbWV0cmljS2V5cyA9IFsuLi50aGlzLm1ldHJpY0tleXNdO1xuICAgIGlmICghc3RvcmVkTWV0cmljcy5sZW5ndGggfHwgcmVzZXRUb0RlZmF1bHQpIHtcbiAgICAgIHRoaXMuZGVmYXVsdE1ldHJpY3MuZm9yRWFjaChkZWZhdWx0TWV0cmljID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljS2V5SW5kZXggPSBtZXRyaWNLZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBkZWZhdWx0TWV0cmljLmtleSk7XG5cbiAgICAgICAgY29uc3Qgc3RvcmVkTWV0cmljID0gc3RvcmVkTWV0cmljcy5maW5kKCh7IGtleSB9KSA9PiBrZXkgPT09IGRlZmF1bHRNZXRyaWMua2V5KTtcbiAgICAgICAgaWYgKHN0b3JlZE1ldHJpYyAmJiAhcmVzZXRUb0RlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLm1ldHJpY3MucHVzaChzdG9yZWRNZXRyaWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWV0cmljcy5wdXNoKGRlZmF1bHRNZXRyaWMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRyaWNLZXlJbmRleCA+PSAwKSB7XG4gICAgICAgICAgbWV0cmljS2V5cy5zcGxpY2UobWV0cmljS2V5SW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRyaWNzID0gW1xuICAgICAgICAuLi5zdG9yZWRNZXRyaWNzLnJlZHVjZSgocmVzdWx0LCBtZXRyaWMpID0+IHtcbiAgICAgICAgICBjb25zdCBtZXRyaWNLZXlJbmRleCA9IG1ldHJpY0tleXMuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IG1ldHJpYy5rZXkpO1xuXG4gICAgICAgICAgaWYgKG1ldHJpY0tleUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIG1ldHJpY0tleXMuc3BsaWNlKG1ldHJpY0tleUluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gWy4uLnJlc3VsdCwgbWV0cmljXTtcbiAgICAgICAgfSwgW10gYXMgTWV0cmljW10pLFxuICAgICAgXTtcbiAgICB9XG4gICAgdGhpcy5tZXRyaWNzID0gW1xuICAgICAgLi4udGhpcy5tZXRyaWNzLFxuICAgICAgLi4ubWV0cmljS2V5cy5tYXAobWV0cmljS2V5ID0+IHtcbiAgICAgICAgcmV0dXJuIHsga2V5OiBtZXRyaWNLZXksIG5hbWU6IHRoaXMuZ2V0TWV0cmljTmFtZShtZXRyaWNLZXkpLCB2aXNpYmxlOiBmYWxzZSB9O1xuICAgICAgfSksXG4gICAgXTtcbiAgICB0aGlzLm1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIGlmICghcmVzZXRUb0RlZmF1bHQpIHtcbiAgICAgIHRoaXMubGFzdFNhdmVkTWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRyaWNOYW1lKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoL1ZETV98VG90YWxfL2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsodmFsdWUgfHwgMCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXItbWV0cmljc1wiIChjbGljayk9XCJvdmVybGF5UGFuZWwudG9nZ2xlKCRldmVudClcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIHZpc2libGVTZWxlY3RlZE1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCIgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxuICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cIiR7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IG51bWJlcjogJzEuMi0yJyB9fVwiXG4gICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgPlxuICAgICAgJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpc2libGVTZWxlY3RlZE1ldHJpY3MubGVuZ3RoXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGVtcHR5U3RhdGVNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWMgZW1wdHktc3RhdGUtbWV0cmljXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICBbdmxIaWRkZW5UZXh0VG9vbHRpcF09XCJtZXRyaWMubmFtZVwiXG4gICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgPlxuICAgICAgICB7eyBtZXRyaWMubmFtZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cIiR7eyBtZXRyaWMudmFsdWUgfCBudW1iZXI6ICcxLjItMicgfX1cIlxuICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAgJHt7IG1ldHJpYy52YWx1ZSB8IG51bWJlcjogJzEuMi0yJyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48cC1vdmVybGF5UGFuZWxcbiAgc3R5bGVDbGFzcz1cIm1ldHJpY3Mtb3ZlcmxheS1jb250YWluZXIgY2VudGVyIG5vLXBhZGRpbmdcIlxuICBzaG93VHJhbnNpdGlvbk9wdGlvbnM9XCIwbXNcIlxuICBoaWRlVHJhbnNpdGlvbk9wdGlvbnM9XCIwbXNcIlxuPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LW1ldHJpY3NcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiByZXN0U2VsZWN0ZWRNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICAgIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCJcbiAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwiJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XCJcbiAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAgJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gY2xhc3M9XCJjb25maWdcIiAoY2xpY2spPVwib3BlblNpZGViYXIoKVwiPlxuICAgICAgTWV0cmljcyBDb25maWdcbiAgICAgIDxpIGNsYXNzPVwidmwtaWNvbiB2bC1pY29uLWNoZXZyb24tZG93blwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1vdmVybGF5UGFuZWw+XG5cbjxwLXNpZGViYXJcbiAgW3Zpc2libGVdPVwic2lkZWJhclZpc2libGVcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJjbG9zZVNpZGViYXIoKVwiXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxuICBbYmFzZVpJbmRleF09XCIxMDAwXCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6ICczNjBweCcgfVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICBRdW90ZSBNZXRyaWNzIENvbmZpZ1xuICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VTaWRlYmFyKClcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdC1pZD1cInNlYXJjaFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgcElucHV0VGV4dFxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgbWV0cmlj4oCmXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1tZXRyaWNzXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJjaGFuZ2VNZXRyaWNPcmRlcigkZXZlbnQpXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGZpbHRlcmVkTWV0cmljc1wiXG4gICAgICAgICAgY2xhc3M9XCJzaWRlYmFyLW1ldHJpY1wiXG4gICAgICAgICAgW2NsYXNzLmVkaXRdPVwibWV0cmljLmtleSA9PT0gZWRpdGluZ01ldHJpYz8ua2V5XCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhIXNlYXJjaENvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaWNvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tcmVvcmRlclwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1ldHJpY1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1ldHJpYzogbWV0cmljIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhZmlsdGVyZWRNZXRyaWNzLmxlbmd0aFwiPlRoZXJlIGFyZSBubyBpdGVtcyBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBsYWJlbD1cIlJlc2V0IHRvIGRlZmF1bHRcIlxuICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tc21cIlxuICAgICAgICAob25DbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uIGxhYmVsPVwiU2F2ZVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbiBwLWJ1dHRvbi1maWxsZWQgcC1idXR0b24tc21cIiAob25DbGljayk9XCJzYXZlKClcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvcC1zaWRlYmFyPlxuXG48bmctdGVtcGxhdGUgI21ldHJpY1RlbXBsYXRlIGxldC1tZXRyaWM9XCJtZXRyaWNcIj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSAhPT0gbWV0cmljLmtleVwiIGNsYXNzPVwicHJldmlldy1zdGF0ZVwiPlxuICAgIDxwLWNoZWNrYm94XG4gICAgICBbbmdNb2RlbF09XCJtZXRyaWMudmlzaWJsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJtZXRyaWMudmlzaWJsZSA9ICFtZXRyaWMudmlzaWJsZVwiXG4gICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgY2hlY2tib3hJY29uPVwidmwtaWNvbiB2bC1pY29uLWNoZWNrbWFya1wiXG4gICAgPjwvcC1jaGVja2JveD5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyBtZXRyaWMubmFtZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgY2xhc3M9XCJlZGl0LXN0YXRlXCI+XG4gICAgPGlucHV0IGRhdGEtdGVzdC1pZD1cIm5hbWVcIiBbZm9ybUNvbnRyb2xdPVwibmFtZUNvbnRyb2xcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiTWV0cmljIG5hbWVcIiBjbGFzcz1cInctZnVsbFwiIC8+XG4gICAgPHZsLWVycm9yLXRvb2x0aXAgW3Rvb2x0aXBdPVwibmFtZUNvbnRyb2wgfCBlcnJvcjogJ25hbWUnXCIgW3Zpc2libGVdPVwiISFuYW1lQ29udHJvbC5lcnJvcnNcIj48L3ZsLWVycm9yLXRvb2x0aXA+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ICE9PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cImVkaXRNZXRyaWMobWV0cmljKVwiIGNsYXNzPVwiYWN0aW9uIGVkaXRcIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1lZGl0LXNtXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSA9PT0gbWV0cmljLmtleVwiIChjbGljayk9XCJzYXZlTWV0cmljKClcIiBjbGFzcz1cImFjdGlvbiBzYXZlXCI+XG4gICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hlY2ttYXJrXCI+PC9pPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0IsOEJBQThCLEdBQy9CLE1BQU0sd0JBQXdCLENBQUM7QUFRaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVE1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBK0IzQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxHQUFzQixFQUN0Qix5QkFBb0QsRUFDcEQsaUJBQTJDLEVBQzNDLDhCQUE4RDtRQUw5RCxtQkFBYyxHQUFk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RTtnQkFDakIsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBRUQsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OEdBbFBVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLGdHQUNoQixZQUFZLGdEQy9CekIsMm9LQXNKQTs0RkR4SGEsZ0JBQWdCO2tCQU41QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO2lTQUdRLFlBQVk7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBMaW5lSXRlbSwgTWV0cmljUnVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHtcbiAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3IsXG4gIHJlcXVpcmVkVmFsaWRhdG9yLFxuICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gIHN0YW5kYXJkQ2hhclNldFdpdGhTcGFjZVJlZ0V4cCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZS9mb3Jtcyc7XG5pbXBvcnQgeyBNZXRyaWMgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY21zJztcbmltcG9ydCB7XG4gIENvbnRleHRTZXJ2aWNlLFxuICBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gIE1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2UsXG4gIFF1b3RlRHJhZnRTZXJ2aWNlLFxufSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNRVRSSUNTX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9tZXRyaWNzLmRlZmluaXRpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtbWV0cmljcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRyaWNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWV0cmljcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWV0cmljc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChPdmVybGF5UGFuZWwpXG4gIHB1YmxpYyBvdmVybGF5UGFuZWwhOiBPdmVybGF5UGFuZWw7XG5cbiAgcHVibGljIGVtcHR5U3RhdGVNZXRyaWNzID0gW1xuICAgIHsgbmFtZTogJ01SUicsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiAnRS5NUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ05SUicsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiAnRS5OUlInLCB2YWx1ZTogMCB9LFxuICBdO1xuICBwdWJsaWMgdmlzaWJsZVNlbGVjdGVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIHJlc3RTZWxlY3RlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyBtZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgZmlsdGVyZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgZWRpdGluZ01ldHJpYzogTWV0cmljIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgc2lkZWJhclZpc2libGUgPSBmYWxzZTtcbiAgcHVibGljIHNlYXJjaENvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgcHVibGljIG5hbWVDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1xuICAgIHJlcXVpcmVkVmFsaWRhdG9yLFxuICAgIGludmFsaWRDaGFyYWN0ZXJzVmFsaWRhdG9yKHN0YW5kYXJkQ2hhclNldFdpdGhTcGFjZVJlZ0V4cCksXG4gICAgcmVzZXJ2ZWRJZGVudGlmaWVyVmFsaWRhdG9yLFxuICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDgwKSxcbiAgXSk7XG5cbiAgcHJpdmF0ZSBhY3RpdmVNZXRyaWNSdWxlczogTWV0cmljUnVsZVtdID0gW107XG4gIHByaXZhdGUgYWN0aXZlTWV0cmljUnVsZU5hbWVzOiBNZXRyaWNbXSA9IFtdO1xuICBwcml2YXRlIGRlZmF1bHRNZXRyaWNSdWxlTmFtZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbWV0cmljS2V5czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0U2F2ZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2U6IE1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvbjogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlOiBTaG9wcGluZ0NhcnRTZXR0aW5nc0FwaVNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlcyA9IHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24uYWN0aXZlTWV0cmljc1NuYXBzaG90LmZpbHRlcihtZXRyaWNSdWxlID0+XG4gICAgICBtZXRyaWNSdWxlLm1ldHJpY3Muc29tZShtZXRyaWMgPT4gISFtZXRyaWMudG90YWxOYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IGFjdGl2ZU1ldHJpY1J1bGVOYW1lcyA9IHRoaXMuYWN0aXZlTWV0cmljUnVsZXMubWFwKG1ldHJpY1J1bGUgPT4gbWV0cmljUnVsZS50aXRsZSk7XG5cbiAgICB0aGlzLnNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZVxuICAgICAgLmdldFNldHRpbmdzTWFwKClcbiAgICAgIC5waXBlKFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmN1cnJlbnRTdGF0ZSQpLFxuICAgICAgICB0YXAoKFtzZXR0aW5ncywgbGluZUl0ZW1zXSkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcyA9IChzZXR0aW5ncz8uREVGQVVMVF9IRUFERVJfTUVUUklDUyB8fCBbXSkuZmlsdGVyKHJ1bGVOYW1lID0+XG4gICAgICAgICAgICBhY3RpdmVNZXRyaWNSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5tZXRyaWNLZXlzID0gdGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXMpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlTWV0cmljUnVsZU5hbWVzID0gdGhpcy5nZXRBY3RpdmVNZXRyaWNSdWxlTmFtZXMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBzdGFydFdpdGgoJycpKS5zdWJzY3JpYmUocXVlcnkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJlZE1ldHJpY3MgPSB0aGlzLm1ldHJpY3MuZmlsdGVyKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2Uub25NZXRyaWNzVXBkYXRlJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuU2lkZWJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZWJhclZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5sYXN0U2F2ZWRNZXRyaWNzKTtcbiAgICB0aGlzLmVkaXRpbmdNZXRyaWMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRyaWNWYWx1ZShrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnRWZmZWN0aXZlXycpKSB7XG4gICAgICBjb25zdCBjb3JyZWN0S2V5ID0ga2V5LnJlcGxhY2UoJ0VmZmVjdGl2ZV8nLCAnJyk7XG4gICAgICByZXR1cm4gdGhpcy50b051bWJlcihjb250ZXh0LnByb3BlcnRpZXNbY29ycmVjdEtleV0pIC0gdGhpcy50b051bWJlcihjb250ZXh0LnByb3BlcnRpZXNbYFByZXZpb3VzJHtjb3JyZWN0S2V5fWBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uU2VydmljZS5nZXRNZXRyaWNWYWx1ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMubWV0cmljcykpO1xuICAgIHRoaXMuc2V0TWV0cmljcygpO1xuICAgIHRoaXMubGFzdFNhdmVkTWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgIHRoaXMuY2xvc2VTaWRlYmFyKCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlTWV0cmljT3JkZXIoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPik6IHZvaWQge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1ldHJpY3MsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5maWx0ZXJlZE1ldHJpY3MgPSB0aGlzLm1ldHJpY3M7XG4gIH1cblxuICBwdWJsaWMgZWRpdE1ldHJpYyhtZXRyaWM6IE1ldHJpYyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRpbmdNZXRyaWMgJiYgdGhpcy5uYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IG1ldHJpYztcbiAgICB0aGlzLm5hbWVDb250cm9sLnNldFZhbHVlKG1ldHJpYy5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlTWV0cmljKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdGluZ01ldHJpYykge1xuICAgICAgdGhpcy5lZGl0aW5nTWV0cmljLm5hbWUgPSB0aGlzLm5hbWVDb250cm9sLnZhbHVlPy50cmltKCk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFRvRGVmYXVsdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxlY3RBdmFpbGFibGVNZXRyaWNzKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsaW5lSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICBrZXlzLnB1c2goLi4uT2JqZWN0LmtleXMobGluZUl0ZW0udG90YWxNZXRyaWNzIHx8IHt9KSk7XG4gICAgICBrZXlzLnB1c2goLi4udGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbS5saW5lSXRlbXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcShrZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWV0cmljcygpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcy5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKSk7XG5cbiAgICB0aGlzLnZpc2libGVTZWxlY3RlZE1ldHJpY3MgPSBtZXRyaWNzLnNsaWNlKDAsIDQpO1xuICAgIHRoaXMucmVzdFNlbGVjdGVkTWV0cmljcyA9IG1ldHJpY3Muc2xpY2UoNCk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RBdmFpbGFibGVNZXRyaWNzKHJlc2V0VG9EZWZhdWx0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZWRNZXRyaWNzOiBNZXRyaWNbXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSkgfHwgJ1tdJyk7XG4gICAgY29uc3QgbWV0cmljS2V5cyA9IHRoaXMubWV0cmljS2V5cy5zbGljZSgpO1xuICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSAhc3RvcmVkTWV0cmljcy5sZW5ndGggfHwgcmVzZXRUb0RlZmF1bHQ7XG5cbiAgICB0aGlzLm1ldHJpY3MgPSAoaXNEZWZhdWx0Q29uZmlndXJhdGlvbiA/IHRoaXMuYWN0aXZlTWV0cmljUnVsZU5hbWVzIDogc3RvcmVkTWV0cmljcykucmVkdWNlKChyZXN1bHQsIG1ldHJpYykgPT4ge1xuICAgICAgY29uc3QgbWV0cmljS2V5SW5kZXggPSBtZXRyaWNLZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBtZXRyaWMua2V5KTtcblxuICAgICAgaWYgKG1ldHJpY0tleUluZGV4ID49IDApIHtcbiAgICAgICAgbWV0cmljS2V5cy5zcGxpY2UobWV0cmljS2V5SW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEZWZhdWx0Q29uZmlndXJhdGlvbiAmJiB0aGlzLmRlZmF1bHRNZXRyaWNSdWxlTmFtZXMuaW5jbHVkZXMobWV0cmljLm5hbWUpKSB7XG4gICAgICAgIG1ldHJpYy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFsuLi5yZXN1bHQsIG1ldHJpY107XG4gICAgfSwgW10gYXMgTWV0cmljW10pO1xuXG4gICAgdGhpcy5tZXRyaWNzID0gW1xuICAgICAgLi4udGhpcy5tZXRyaWNzLFxuICAgICAgLi4ubWV0cmljS2V5cy5tYXAobWV0cmljS2V5ID0+IHtcbiAgICAgICAgcmV0dXJuIHsga2V5OiBtZXRyaWNLZXksIG5hbWU6IHRoaXMuZ2V0TWV0cmljTmFtZShtZXRyaWNLZXkpLCB2aXNpYmxlOiBmYWxzZSB9O1xuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8vIHNvcnQgdGhlIG1ldHJpY3MgYnkgdGhlIG9yZGVyIG9mIGRlZmF1bHQgbWV0cmljIHJ1bGUgbmFtZXMgZnJvbSB0aGUgc2hvcHBpbmcgY2FydCBzZXR0aW5nc1xuICAgIHRoaXMubWV0cmljcyA9IHRoaXMuc29ydE1ldHJpY3MoKTtcblxuICAgIHRoaXMubWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICBpZiAoIXJlc2V0VG9EZWZhdWx0KSB7XG4gICAgICB0aGlzLmxhc3RTYXZlZE1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzKTtcbiAgICAgIHRoaXMuc2V0TWV0cmljcygpO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRyaWNOYW1lKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5maW5kKG1ldHJpY1J1bGUgPT4gbWV0cmljUnVsZS5tZXRyaWNzLmZpbmQobWV0cmljID0+IG1ldHJpYy50b3RhbE5hbWUgPT09IGtleSkpPy50aXRsZSB8fFxuICAgICAga2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsodmFsdWUgfHwgMCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1ldHJpY1J1bGVOYW1lcygpOiBNZXRyaWNbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlTWV0cmljUnVsZXMucmVkdWNlKChyZXN1bHQsIG1ldHJpY1J1bGUpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBtZXRyaWNSdWxlLnRpdGxlO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhuYW1lKTtcblxuICAgICAgbWV0cmljUnVsZS5tZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIGtleTogbWV0cmljLnRvdGFsTmFtZSB8fCBtZXRyaWMubmFtZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10gYXMgTWV0cmljW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBNZXRyaWNzIGFycmF5IGJ5IHRoZSBvcmRlciBvZiB0aGUgZGVmYXVsdCBtZXRyaWMgcnVsZSBuYW1lcyBmcm9tIHRoZSBzaG9wcGluZyBjYXJ0IHNldHRpbmdzLlxuICAgKiBJZiBhIG1ldHJpYyBpcyBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZiBkZWZhdWx0IG1ldHJpY3MsIGl0IHJhaXNlcyB0aGUgbWV0cmljIHRvIHRoZSB0b3Agb2YgdGhlIG1ldHJpY3MgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIHNvcnRNZXRyaWNzKCk6IE1ldHJpY1tdIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgaW5kZXhBID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluZGV4T2YoYS5uYW1lKTtcbiAgICAgIGNvbnN0IGluZGV4QiA9IHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmRleE9mKGIubmFtZSk7XG5cbiAgICAgIGlmIChpbmRleEEgPT09IC0xICYmIGluZGV4QiA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleEEgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhCID09PSAtMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleEEgLSBpbmRleEI7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXItbWV0cmljc1wiIChjbGljayk9XCJvdmVybGF5UGFuZWwudG9nZ2xlKCRldmVudClcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIHZpc2libGVTZWxlY3RlZE1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCIgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxuICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cIiR7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IG51bWJlcjogJzEuMi0yJyB9fVwiXG4gICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgPlxuICAgICAgJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpc2libGVTZWxlY3RlZE1ldHJpY3MubGVuZ3RoXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGVtcHR5U3RhdGVNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWMgZW1wdHktc3RhdGUtbWV0cmljXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICBbdmxIaWRkZW5UZXh0VG9vbHRpcF09XCJtZXRyaWMubmFtZVwiXG4gICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgPlxuICAgICAgICB7eyBtZXRyaWMubmFtZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cIiR7eyBtZXRyaWMudmFsdWUgfCBudW1iZXI6ICcxLjItMicgfX1cIlxuICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAgJHt7IG1ldHJpYy52YWx1ZSB8IG51bWJlcjogJzEuMi0yJyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48cC1vdmVybGF5UGFuZWxcbiAgc3R5bGVDbGFzcz1cIm1ldHJpY3Mtb3ZlcmxheS1jb250YWluZXIgY2VudGVyIG5vLXBhZGRpbmdcIlxuICBzaG93VHJhbnNpdGlvbk9wdGlvbnM9XCIwbXNcIlxuICBoaWRlVHJhbnNpdGlvbk9wdGlvbnM9XCIwbXNcIlxuPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LW1ldHJpY3NcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiByZXN0U2VsZWN0ZWRNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICAgIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCJcbiAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwiJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XCJcbiAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAgJHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgbnVtYmVyOiAnMS4yLTInIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gY2xhc3M9XCJjb25maWdcIiAoY2xpY2spPVwib3BlblNpZGViYXIoKVwiPlxuICAgICAgTWV0cmljcyBDb25maWdcbiAgICAgIDxpIGNsYXNzPVwidmwtaWNvbiB2bC1pY29uLWNoZXZyb24tZG93blwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1vdmVybGF5UGFuZWw+XG5cbjxwLXNpZGViYXJcbiAgW3Zpc2libGVdPVwic2lkZWJhclZpc2libGVcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJjbG9zZVNpZGViYXIoKVwiXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxuICBbYmFzZVpJbmRleF09XCIxMDAwXCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6ICczNjBweCcgfVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICBRdW90ZSBNZXRyaWNzIENvbmZpZ1xuICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VTaWRlYmFyKClcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdC1pZD1cInNlYXJjaFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgcElucHV0VGV4dFxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgbWV0cmlj4oCmXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1tZXRyaWNzXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJjaGFuZ2VNZXRyaWNPcmRlcigkZXZlbnQpXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGZpbHRlcmVkTWV0cmljc1wiXG4gICAgICAgICAgY2xhc3M9XCJzaWRlYmFyLW1ldHJpY1wiXG4gICAgICAgICAgW2NsYXNzLmVkaXRdPVwibWV0cmljLmtleSA9PT0gZWRpdGluZ01ldHJpYz8ua2V5XCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhIXNlYXJjaENvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaWNvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tcmVvcmRlclwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1ldHJpY1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1ldHJpYzogbWV0cmljIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhZmlsdGVyZWRNZXRyaWNzLmxlbmd0aFwiPlRoZXJlIGFyZSBubyBpdGVtcyBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBsYWJlbD1cIlJlc2V0IHRvIGRlZmF1bHRcIlxuICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tc21cIlxuICAgICAgICAob25DbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uIGxhYmVsPVwiU2F2ZVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbiBwLWJ1dHRvbi1maWxsZWQgcC1idXR0b24tc21cIiAob25DbGljayk9XCJzYXZlKClcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvcC1zaWRlYmFyPlxuXG48bmctdGVtcGxhdGUgI21ldHJpY1RlbXBsYXRlIGxldC1tZXRyaWM9XCJtZXRyaWNcIj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSAhPT0gbWV0cmljLmtleVwiIGNsYXNzPVwicHJldmlldy1zdGF0ZVwiPlxuICAgIDxwLWNoZWNrYm94XG4gICAgICBbbmdNb2RlbF09XCJtZXRyaWMudmlzaWJsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJtZXRyaWMudmlzaWJsZSA9ICFtZXRyaWMudmlzaWJsZVwiXG4gICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgY2hlY2tib3hJY29uPVwidmwtaWNvbiB2bC1pY29uLWNoZWNrbWFya1wiXG4gICAgPjwvcC1jaGVja2JveD5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyBtZXRyaWMubmFtZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgY2xhc3M9XCJlZGl0LXN0YXRlXCI+XG4gICAgPGlucHV0IGRhdGEtdGVzdC1pZD1cIm5hbWVcIiBbZm9ybUNvbnRyb2xdPVwibmFtZUNvbnRyb2xcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiTWV0cmljIG5hbWVcIiBjbGFzcz1cInctZnVsbFwiIC8+XG4gICAgPHZsLWVycm9yLXRvb2x0aXAgW3Rvb2x0aXBdPVwibmFtZUNvbnRyb2wgfCBlcnJvcjogJ25hbWUnXCIgW3Zpc2libGVdPVwiISFuYW1lQ29udHJvbC5lcnJvcnNcIj48L3ZsLWVycm9yLXRvb2x0aXA+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ICE9PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cImVkaXRNZXRyaWMobWV0cmljKVwiIGNsYXNzPVwiYWN0aW9uIGVkaXRcIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1lZGl0LXNtXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSA9PT0gbWV0cmljLmtleVwiIChjbGljayk9XCJzYXZlTWV0cmljKClcIiBjbGFzcz1cImFjdGlvbiBzYXZlXCI+XG4gICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hlY2ttYXJrXCI+PC9pPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
@@ -1,9 +1,2 @@
|
|
1
|
-
export const defaultMetrics = [
|
2
|
-
{ key: 'Total_VDM_MRR', name: 'MRR', visible: true },
|
3
|
-
{ key: 'Effective_Total_VDM_MRR', name: 'E.MRR', visible: true },
|
4
|
-
{ key: 'Total_VDM_NRR', name: 'NRR', visible: true },
|
5
|
-
{ key: 'Effective_Total_VDM_NRR', name: 'E.NRR', visible: true },
|
6
|
-
];
|
7
|
-
export const effectiveMetricKeys = ['Total_VDM_MRR', 'Total_VDM_NRR'];
|
8
1
|
export const METRICS_STORAGE_KEY = 'vl-metrics';
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kZWZpbml0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuZGVmaW5pdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE1FVFJJQ1NfU1RPUkFHRV9LRVkgPSAndmwtbWV0cmljcyc7XG4iXX0=
|
@@ -13,8 +13,8 @@ import { MetricsComponent } from './metrics.component';
|
|
13
13
|
import * as i0 from "@angular/core";
|
14
14
|
export class MetricsModule {
|
15
15
|
}
|
16
|
-
MetricsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
17
|
-
MetricsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
16
|
+
MetricsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
17
|
+
MetricsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsModule, declarations: [MetricsComponent], imports: [CommonModule,
|
18
18
|
FormsModule,
|
19
19
|
ReactiveFormsModule,
|
20
20
|
DragDropModule,
|
@@ -27,7 +27,7 @@ MetricsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
|
|
27
27
|
VirtualScrollerModule,
|
28
28
|
ErrorTooltipModule,
|
29
29
|
HiddenTextTooltipModule], exports: [MetricsComponent] });
|
30
|
-
MetricsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
30
|
+
MetricsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsModule, imports: [[
|
31
31
|
CommonModule,
|
32
32
|
FormsModule,
|
33
33
|
ReactiveFormsModule,
|
@@ -42,7 +42,7 @@ MetricsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
|
|
42
42
|
ErrorTooltipModule,
|
43
43
|
HiddenTextTooltipModule,
|
44
44
|
]] });
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsModule, decorators: [{
|
46
46
|
type: NgModule,
|
47
47
|
args: [{
|
48
48
|
declarations: [MetricsComponent],
|
@@ -102,14 +102,14 @@ const rootRoute = {
|
|
102
102
|
};
|
103
103
|
export class FlowRoutingModule {
|
104
104
|
}
|
105
|
-
FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
106
|
-
FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
105
|
+
FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
106
|
+
FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowRoutingModule, imports: [i1.RouterModule, ProductModule,
|
107
107
|
LegacyProductModule,
|
108
108
|
ShoppingCartModule,
|
109
109
|
CatalogModule,
|
110
110
|
RemoteModule,
|
111
111
|
EmptyAccountModule], exports: [RouterModule] });
|
112
|
-
FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
112
|
+
FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver], imports: [[
|
113
113
|
RouterModule.forChild([rootRoute]),
|
114
114
|
ProductModule,
|
115
115
|
LegacyProductModule,
|
@@ -118,7 +118,7 @@ FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
|
|
118
118
|
RemoteModule,
|
119
119
|
EmptyAccountModule,
|
120
120
|
], RouterModule] });
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowRoutingModule, decorators: [{
|
122
122
|
type: NgModule,
|
123
123
|
args: [{
|
124
124
|
imports: [
|
@@ -31,9 +31,9 @@ export class FlowComponent {
|
|
31
31
|
this.docGenService.cleanup();
|
32
32
|
}
|
33
33
|
}
|
34
|
-
FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
35
|
-
FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
34
|
+
FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowComponent, deps: [{ token: i1.FlowRouterService }, { token: i2.QuoteDraftService }, { token: i3.FlowService }, { token: i4.FlowDocGenService }, { token: i5.IntegrationState }], target: i0.ɵɵFactoryTarget.Component });
|
35
|
+
FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-header *ngIf=\"showHeader$ | async\"></vl-flow-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n\n<ng-container *vlLet=\"isStandalone$ | async as isStandalone\">\n <vl-flow-doc-gen *ngIf=\"!isStandalone\"></vl-flow-doc-gen>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;left:0;right:0;top:0;bottom:0;background-color:#ffffff80;z-index:4}\n"], components: [{ type: i6.FlowHeaderComponent, selector: "vl-flow-header" }, { type: i7.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i8.DocGenComponent, selector: "vl-flow-doc-gen" }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }, { type: i7.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }], pipes: { "async": i9.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowComponent, decorators: [{
|
37
37
|
type: Component,
|
38
38
|
args: [{
|
39
39
|
selector: 'vl-flow',
|
@@ -15,8 +15,8 @@ import { FlowDialogService } from './services/flow-dialog.service';
|
|
15
15
|
import * as i0 from "@angular/core";
|
16
16
|
export class FlowModule {
|
17
17
|
}
|
18
|
-
FlowModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
19
|
-
FlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
18
|
+
FlowModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
19
|
+
FlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowModule, declarations: [FlowComponent], imports: [CommonModule,
|
20
20
|
FlowRoutingModule,
|
21
21
|
ApiModule,
|
22
22
|
LauncherModule,
|
@@ -26,7 +26,7 @@ FlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12
|
|
26
26
|
SdkCoreModule,
|
27
27
|
DocGenModule,
|
28
28
|
LetDirectiveModule] });
|
29
|
-
FlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
29
|
+
FlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowModule, providers: [FlowService, FlowDialogService, FlowDocGenService], imports: [[
|
30
30
|
CommonModule,
|
31
31
|
FlowRoutingModule,
|
32
32
|
ApiModule,
|
@@ -38,7 +38,7 @@ FlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12
|
|
38
38
|
DocGenModule,
|
39
39
|
LetDirectiveModule,
|
40
40
|
]] });
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowModule, decorators: [{
|
42
42
|
type: NgModule,
|
43
43
|
args: [{
|
44
44
|
declarations: [FlowComponent],
|
@@ -76,9 +76,9 @@ export class ContextGuard {
|
|
76
76
|
return from(this.router.navigate([parentUrl, '404'], { state: { message } })).pipe(map(() => false));
|
77
77
|
}
|
78
78
|
}
|
79
|
-
ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
80
|
-
ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
79
|
+
ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextGuard, deps: [{ token: i1.Router }, { token: i2.FlowRouterService }, { token: i3.ContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
80
|
+
ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextGuard });
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextGuard, decorators: [{
|
82
82
|
type: Injectable
|
83
83
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.FlowRouterService }, { type: i3.ContextService }]; } });
|
84
84
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9ndWFyZHMvY29udGV4dC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBd0Isd0JBQXdCLEVBQXdCLE1BQU0sa0JBQWtCLENBQUM7QUFFeEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7OztBQUtoRCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNVLE1BQWMsRUFDZCxhQUFnQyxFQUNoQyxjQUE4QjtRQUY5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUcsZUFBZSxDQUFDLEtBQTZCO1FBQ2xELE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZGLGtDQUFrQztRQUNsQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxtQkFB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UUFDNUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQzs7MEdBbkdVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Db250ZXh0LCBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUsIFJwY01lc3NhZ2UsIFZsV2luZG93IH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd1JvdXRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldERlZmF1bHRQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogVmxXaW5kb3c7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250ZXh0R3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBGbG93Um91dGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBjaGVja0FjdGl2YXRpb24ocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zIH0gPSByb3V0ZTtcbiAgICBjb25zdCB7IGFjY291bnRJZCwgcXVvdGVJZCwgb3JkZXJJZCB9ID0gcXVlcnlQYXJhbXM7XG4gICAgY29uc3QgcnBjTWVzc2FnZSA9IHdpbmRvdy5SUENfTUVTU0FHRTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRDb25maWd1cmF0aW9uQ29udGV4dE1vZGUoYWNjb3VudElkLCBxdW90ZUlkLCBvcmRlcklkLCBycGNNZXNzYWdlKTtcblxuICAgIC8vIFJlc3RyaWN0IGlmIG1vZGUgaXMgbm90IGRlZmluZWRcbiAgICBpZiAobW9kZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihyb3V0ZSwgJ01vZGUgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVySWQgPSBhY2NvdW50SWQgfHwgcXVvdGVJZCB8fCBvcmRlcklkIHx8IHRoaXMucnBjTWVzc2FnZUlkIHx8ICdlbXB0eS1mb3ItdGVzdC1tb2RlJztcblxuICAgIC8vIEFsbG93IGlmIGNvbnRleHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIHRoZSBzYW1lIGhlYWRlcklkXG4gICAgaWYgKHRoaXMuY29udGV4dFNlcnZpY2UuaXNJbml0aWFsaXplZCkge1xuICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcblxuICAgICAgaWYgKGhlYWRlcklkICYmIGN1cnJlbnRDb250ZXh0LmhlYWRlcklkID09PSBoZWFkZXJJZCkge1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjb250ZXh0XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKGhlYWRlcklkLCBtb2RlKS5waXBlKFxuICAgICAgdGFwKChjb250ZXh0OiBDb25maWd1cmF0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgY29udGV4dCB3aXRoIHF1ZXJ5UGFyYW1zXG4gICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLmNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgIC4uLihxdWVyeVBhcmFtcyA/PyB7fSksXG4gICAgICAgICAgICAuLi5nZXREZWZhdWx0UHJvcGVydGllcyh7IG1vZGUgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgPyBlLmVycm9yLm1lc3NhZ2UgOiBlO1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihyb3V0ZSwgbWVzc2FnZSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0FjdGl2YXRpb24ocm91dGUpO1xuICB9XG5cbiAgcHVibGljIGNhbkFjdGl2YXRlQ2hpbGQoY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tBY3RpdmF0aW9uKGNoaWxkUm91dGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcnBjTWVzc2FnZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF3aW5kb3cuUlBDX01FU1NBR0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBycGNNZXNzYWdlOiBScGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UpO1xuICAgIGNvbnN0IHZlbG9jZVJlZmVyZW5jZUlkID0gcnBjTWVzc2FnZS5jb25maWd1cmF0aW9uPy5WZWxvY2VSZWZlcmVuY2VJZDtcbiAgICBjb25zdCBxdW90ZUlkID0gcnBjTWVzc2FnZS5xdW90ZT8uSWQ7XG5cbiAgICByZXR1cm4gdmVsb2NlUmVmZXJlbmNlSWQgfHwgcXVvdGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlndXJhdGlvbkNvbnRleHRNb2RlKFxuICAgIGFjY291bnRJZD86IHN0cmluZyxcbiAgICBxdW90ZUlkPzogc3RyaW5nLFxuICAgIG9yZGVySWQ/OiBzdHJpbmcsXG4gICAgcnBjTWVzc2FnZT86IHN0cmluZyxcbiAgKTogQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYWNjb3VudElkKSB7XG4gICAgICByZXR1cm4gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQ7XG4gICAgfVxuXG4gICAgaWYgKHF1b3RlSWQpIHtcbiAgICAgIHJldHVybiBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUVVPVEU7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVySWQpIHtcbiAgICAgIHJldHVybiBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuT1JERVI7XG4gICAgfVxuXG4gICAgaWYgKHJwY01lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUkVNT1RFO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3Iocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHRoaXMuY29udGV4dFNlcnZpY2UuZGVsZXRlKCk7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5yb3V0ZXJTZXJ2aWNlLmdldEZsb3dSb290UGF0aChyb3V0ZSk7XG4gICAgcmV0dXJuIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhcmVudFVybCwgJzQwNCddLCB7IHN0YXRlOiB7IG1lc3NhZ2UgfSB9KSkucGlwZShtYXAoKCkgPT4gZmFsc2UpKTtcbiAgfVxufVxuIl19
|