@hitsoft/kadooglu-keops 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/enums/route-names.d.ts +2 -1
- package/esm2020/config/enums/route-names.mjs +1 -1
- package/esm2020/config/providers/route.provider.mjs +10 -1
- package/esm2020/lib/features/cost-calculation/components/cost-calculation-inputs.component.mjs +12 -10
- package/esm2020/lib/features/cost-calculation/components/cost-calculation-results.component.mjs +3 -3
- package/esm2020/lib/features/cost-calculation/components/cost-calculation.component.mjs +86 -31
- package/esm2020/lib/features/cost-calculation/engine/currency.utils.mjs +10 -10
- package/esm2020/lib/features/cost-calculation/engine/formulas.mjs +10 -10
- package/esm2020/lib/features/cost-calculation/engine/item-resolver.mjs +16 -16
- package/esm2020/lib/features/cost-calculation/engine/stage-builder.mjs +8 -8
- package/esm2020/lib/features/cost-parameter-categories/components/cost-parameter-categories.component.mjs +3 -7
- package/esm2020/lib/features/cost-parameter-categories/components/cost-parameter-category-form.component.mjs +4 -14
- package/esm2020/lib/features/cost-parameters/components/cost-parameter-form.component.mjs +5 -6
- package/esm2020/lib/features/cost-parameters/components/cost-parameters.component.mjs +7 -10
- package/esm2020/lib/features/item-classifications/components/item-classifications.component.mjs +199 -0
- package/esm2020/lib/features/item-classifications/hit-item-classifications-routing.module.mjs +29 -0
- package/esm2020/lib/features/item-classifications/hit-item-classifications.module.mjs +60 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-items.component.mjs +6 -6
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-price-lists.component.mjs +6 -6
- package/esm2020/lib/features/price-parameters/components/price-parameter-form.component.mjs +114 -46
- package/esm2020/lib/features/price-parameters/components/price-parameter-price-update-preview-modal.component.mjs +26 -0
- package/esm2020/lib/features/price-parameters/components/price-parameters.component.mjs +24 -17
- package/esm2020/lib/features/price-parameters/hit-price-parameters.module.mjs +5 -2
- package/esm2020/lib/features/price-parameters/price-parameter-cost-match.service.mjs +3 -3
- package/esm2020/lib/features/price-parameters/price-parameter-form-data.service.mjs +1 -2
- package/esm2020/lib/features/price-parameters/price-parameter-lookups.service.mjs +5 -10
- package/esm2020/lib/features/price-parameters/price-parameter-price-update.service.mjs +119 -0
- package/esm2020/lib/features/settings/components/cost-settings.component.mjs +8 -4
- package/esm2020/lib/kadooglu-keops-routing.module.mjs +3 -1
- package/esm2020/lib/shared/amount-currency-input/amount-currency-input.component.mjs +5 -3
- package/esm2020/lib/shared/cost-item-classification.utils.mjs +5 -2
- package/esm2020/lib/utils/business-region.utils.mjs +12 -0
- package/esm2020/lib/utils/currency.utils.mjs +3 -1
- package/esm2020/proxy/business-region.enum.mjs +9 -0
- package/esm2020/proxy/controllers/index.mjs +2 -1
- package/esm2020/proxy/controllers/item-classification.service.mjs +42 -0
- package/esm2020/proxy/controllers/item.service.mjs +7 -3
- package/esm2020/proxy/controllers/price-list.service.mjs +5 -5
- package/esm2020/proxy/controllers/price-parameter.service.mjs +6 -1
- package/esm2020/proxy/cost-parameter-categories/dtos/models.mjs +1 -1
- package/esm2020/proxy/cost-parameters/dtos/models.mjs +1 -1
- package/esm2020/proxy/item-classifications/dtos/index.mjs +2 -0
- package/esm2020/proxy/item-classifications/dtos/models.mjs +2 -0
- package/esm2020/proxy/price-parameters/dtos/models.mjs +1 -1
- package/esm2020/proxy/public-api.mjs +3 -2
- package/esm2020/proxy/settings/models.mjs +1 -1
- package/fesm2015/hitsoft-kadooglu-keops-config.mjs +9 -0
- package/fesm2015/hitsoft-kadooglu-keops-config.mjs.map +1 -1
- package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs +63 -14
- package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs.map +1 -1
- package/fesm2015/hitsoft-kadooglu-keops.mjs +795 -287
- package/fesm2015/hitsoft-kadooglu-keops.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops-config.mjs +9 -0
- package/fesm2020/hitsoft-kadooglu-keops-config.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs +63 -14
- package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops.mjs +776 -272
- package/fesm2020/hitsoft-kadooglu-keops.mjs.map +1 -1
- package/lib/features/cost-calculation/components/cost-calculation-inputs.component.d.ts +9 -7
- package/lib/features/cost-calculation/components/cost-calculation.component.d.ts +16 -8
- package/lib/features/cost-calculation/engine/currency.utils.d.ts +2 -2
- package/lib/features/cost-calculation/engine/formulas.d.ts +2 -2
- package/lib/features/cost-parameter-categories/components/cost-parameter-categories.component.d.ts +0 -1
- package/lib/features/cost-parameter-categories/components/cost-parameter-category-form.component.d.ts +1 -5
- package/lib/features/cost-parameters/components/cost-parameter-form.component.d.ts +2 -2
- package/lib/features/cost-parameters/components/cost-parameters.component.d.ts +1 -2
- package/lib/features/item-classifications/components/item-classifications.component.d.ts +66 -0
- package/lib/features/item-classifications/hit-item-classifications-routing.module.d.ts +7 -0
- package/lib/features/item-classifications/hit-item-classifications.module.d.ts +17 -0
- package/lib/features/price-parameters/components/price-parameter-form-items.component.d.ts +3 -3
- package/lib/features/price-parameters/components/price-parameter-form-price-lists.component.d.ts +3 -3
- package/lib/features/price-parameters/components/price-parameter-form.component.d.ts +16 -9
- package/lib/features/price-parameters/components/price-parameter-price-update-preview-modal.component.d.ts +11 -0
- package/lib/features/price-parameters/components/price-parameters.component.d.ts +5 -2
- package/lib/features/price-parameters/hit-price-parameters.module.d.ts +12 -11
- package/lib/features/price-parameters/price-parameter-cost-match.service.d.ts +2 -2
- package/lib/features/price-parameters/price-parameter-form-data.service.d.ts +0 -1
- package/lib/features/price-parameters/price-parameter-lookups.service.d.ts +0 -1
- package/lib/features/price-parameters/price-parameter-price-update.service.d.ts +30 -0
- package/lib/shared/amount-currency-input/amount-currency-input.component.d.ts +2 -2
- package/lib/shared/cost-item-classification.utils.d.ts +5 -1
- package/lib/utils/business-region.utils.d.ts +7 -0
- package/lib/utils/currency.utils.d.ts +1 -0
- package/package.json +1 -1
- package/proxy/business-region.enum.d.ts +6 -0
- package/proxy/controllers/index.d.ts +1 -0
- package/proxy/controllers/item-classification.service.d.ts +17 -0
- package/proxy/controllers/item.service.d.ts +3 -1
- package/proxy/controllers/price-list.service.d.ts +3 -2
- package/proxy/controllers/price-parameter.service.d.ts +2 -1
- package/proxy/cost-parameter-categories/dtos/models.d.ts +0 -4
- package/proxy/cost-parameters/dtos/models.d.ts +4 -3
- package/proxy/item-classifications/dtos/index.d.ts +1 -0
- package/proxy/item-classifications/dtos/models.d.ts +34 -0
- package/proxy/price-parameters/dtos/models.d.ts +38 -12
- package/proxy/public-api.d.ts +2 -1
- package/proxy/settings/models.d.ts +1 -0
- package/esm2020/lib/features/cost-parameter-categories/cost-parameter-category-l10n-helper.mjs +0 -6
- package/esm2020/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.mjs +0 -8
- package/lib/features/cost-parameter-categories/cost-parameter-category-l10n-helper.d.ts +0 -2
- package/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.d.ts +0 -5
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
3
|
import { finalize } from 'rxjs/operators';
|
|
4
|
-
import { Currency, PriceParameterStatus, } from '@hitsoft/kadooglu-keops/proxy';
|
|
4
|
+
import { CostItemSystemCode, CostGroupRole, Currency, PriceParameterStatus, } from '@hitsoft/kadooglu-keops/proxy';
|
|
5
5
|
import { statusLabels } from '../price-parameter-l10n-helper';
|
|
6
|
-
import { CURRENCY_OPTIONS,
|
|
6
|
+
import { CURRENCY_OPTIONS, CURRENCY_OPTIONS_TRY_USD } from '../../../utils/currency.utils';
|
|
7
|
+
import { BUSINESS_REGION_OPTIONS } from '../../../utils/business-region.utils';
|
|
7
8
|
import { isRateCostItem, isCustomCostItem } from '../../../shared/cost-item-classification.utils';
|
|
9
|
+
import { calculateCost } from '../../cost-calculation/engine';
|
|
10
|
+
import { parseDecimal } from '../../../utils/number.utils';
|
|
8
11
|
import * as i0 from "@angular/core";
|
|
9
12
|
import * as i1 from "@angular/forms";
|
|
10
13
|
import * as i2 from "@angular/router";
|
|
@@ -13,16 +16,17 @@ import * as i4 from "@hitsoft/kadooglu-keops/proxy";
|
|
|
13
16
|
import * as i5 from "../price-parameter-form-data.service";
|
|
14
17
|
import * as i6 from "../price-parameter-cost-match.service";
|
|
15
18
|
import * as i7 from "../../../shared/cost-item-rows.builder";
|
|
16
|
-
import * as i8 from "
|
|
17
|
-
import * as i9 from "@
|
|
18
|
-
import * as i10 from "@abp/ng.
|
|
19
|
-
import * as i11 from "@ng
|
|
20
|
-
import * as i12 from "
|
|
21
|
-
import * as i13 from "
|
|
22
|
-
import * as i14 from "
|
|
23
|
-
import * as i15 from "./price-parameter-form-
|
|
24
|
-
import * as i16 from "./price-parameter-form-
|
|
25
|
-
import * as i17 from "./price-parameter-form-
|
|
19
|
+
import * as i8 from "../price-parameter-price-update.service";
|
|
20
|
+
import * as i9 from "@angular/common";
|
|
21
|
+
import * as i10 from "@abp/ng.core";
|
|
22
|
+
import * as i11 from "@abp/ng.components/page";
|
|
23
|
+
import * as i12 from "@ng-bootstrap/ng-bootstrap";
|
|
24
|
+
import * as i13 from "devextreme-angular";
|
|
25
|
+
import * as i14 from "../../../shared/amount-currency-input/amount-currency-input.component";
|
|
26
|
+
import * as i15 from "./price-parameter-form-cost-items.component";
|
|
27
|
+
import * as i16 from "./price-parameter-form-price-lists.component";
|
|
28
|
+
import * as i17 from "./price-parameter-form-items.component";
|
|
29
|
+
import * as i18 from "./price-parameter-form-discount-rates.component";
|
|
26
30
|
const statusOptions = [
|
|
27
31
|
PriceParameterStatus.InProgress,
|
|
28
32
|
PriceParameterStatus.Active,
|
|
@@ -30,7 +34,7 @@ const statusOptions = [
|
|
|
30
34
|
].map(value => ({ value, label: statusLabels[value] }));
|
|
31
35
|
const DEFAULT_DISCOUNT_ROWS = 10;
|
|
32
36
|
export class PriceParameterFormComponent {
|
|
33
|
-
constructor(fb, route, router, toaster, service, formDataService, costMatchService, rowsBuilder) {
|
|
37
|
+
constructor(fb, route, router, toaster, service, formDataService, costMatchService, rowsBuilder, priceUpdateService) {
|
|
34
38
|
this.fb = fb;
|
|
35
39
|
this.route = route;
|
|
36
40
|
this.router = router;
|
|
@@ -39,6 +43,7 @@ export class PriceParameterFormComponent {
|
|
|
39
43
|
this.formDataService = formDataService;
|
|
40
44
|
this.costMatchService = costMatchService;
|
|
41
45
|
this.rowsBuilder = rowsBuilder;
|
|
46
|
+
this.priceUpdateService = priceUpdateService;
|
|
42
47
|
this.saving = false;
|
|
43
48
|
this.editMode = false;
|
|
44
49
|
this.docEntry = null;
|
|
@@ -47,19 +52,22 @@ export class PriceParameterFormComponent {
|
|
|
47
52
|
this.allCostItems = [];
|
|
48
53
|
this.typeOptions = [];
|
|
49
54
|
this.groupOptions = [];
|
|
50
|
-
this.regionOptions =
|
|
55
|
+
this.regionOptions = BUSINESS_REGION_OPTIONS;
|
|
51
56
|
this.autoApplyEnabled = false;
|
|
57
|
+
this.updatingPrices = false;
|
|
58
|
+
this.salesPriceExcludingPackagingTry = 0;
|
|
59
|
+
this.salesPriceExcludingPackagingUsd = 0;
|
|
60
|
+
this.effectiveRateUsd = 0;
|
|
61
|
+
this.effectiveRateEur = 0;
|
|
52
62
|
this.systemRateUsd = 0;
|
|
53
63
|
this.systemRateEur = 0;
|
|
54
|
-
this.rateCurrency = Currency.USD;
|
|
55
64
|
this.businessPartnersDataSource = null;
|
|
56
65
|
this.selectedCustomerCode = null;
|
|
57
66
|
this.gekapCurrency = Currency.TRY;
|
|
58
67
|
this.rawOilCurrency = Currency.USD;
|
|
59
|
-
this.salesPriceExcludingPackagingCurrency = Currency.USD;
|
|
60
68
|
this.statusOptions = statusOptions;
|
|
61
69
|
this.currencyOptions = CURRENCY_OPTIONS;
|
|
62
|
-
this.
|
|
70
|
+
this.tryUsdCurrencyOptions = CURRENCY_OPTIONS_TRY_USD;
|
|
63
71
|
this.customerDisplayExpr = (c) => c ? `${c.cardCode} - ${c.cardName}` : '';
|
|
64
72
|
this.isRate = isRateCostItem;
|
|
65
73
|
this.isCustom = isCustomCostItem;
|
|
@@ -70,9 +78,10 @@ export class PriceParameterFormComponent {
|
|
|
70
78
|
this.editMode = this.docEntry != null && !Number.isNaN(this.docEntry);
|
|
71
79
|
this.form = this.fb.group({
|
|
72
80
|
typeCode: [null, [Validators.required]],
|
|
73
|
-
|
|
81
|
+
region: [null, [Validators.required]],
|
|
74
82
|
groupCode: [null, [Validators.required]],
|
|
75
|
-
|
|
83
|
+
exchangeRateUsd: [0],
|
|
84
|
+
exchangeRateEur: [0],
|
|
76
85
|
fromDate: [{ value: null, disabled: this.editMode }, [Validators.required]],
|
|
77
86
|
toDate: [null, [Validators.required]],
|
|
78
87
|
status: [null, [Validators.required]],
|
|
@@ -82,13 +91,16 @@ export class PriceParameterFormComponent {
|
|
|
82
91
|
generalQuota: [0],
|
|
83
92
|
promotionalQuota: [0],
|
|
84
93
|
rawOilPrice: [0],
|
|
85
|
-
salesPriceExcludingPackaging: [0],
|
|
86
94
|
items: this.fb.array([]),
|
|
87
95
|
discounts: this.fb.array([]),
|
|
88
96
|
});
|
|
89
97
|
this.applyDiscounts(null);
|
|
90
|
-
this.form.get('
|
|
98
|
+
this.form.get('region').valueChanges.subscribe(() => this.onCombinationChange());
|
|
91
99
|
this.form.get('groupCode').valueChanges.subscribe(() => this.onCombinationChange());
|
|
100
|
+
this.form.get('rawOilPrice').valueChanges.subscribe(() => this.recalcSalesPriceExcludingPackaging());
|
|
101
|
+
this.form.get('exchangeRateUsd').valueChanges.subscribe(() => this.recalcSalesPriceExcludingPackaging());
|
|
102
|
+
this.form.get('exchangeRateEur').valueChanges.subscribe(() => this.recalcSalesPriceExcludingPackaging());
|
|
103
|
+
this.itemsArray.valueChanges.subscribe(() => this.recalcSalesPriceExcludingPackaging());
|
|
92
104
|
this.load();
|
|
93
105
|
}
|
|
94
106
|
get itemsArray() {
|
|
@@ -102,8 +114,8 @@ export class PriceParameterFormComponent {
|
|
|
102
114
|
? 'Keops::PriceParameters:EditTitle'
|
|
103
115
|
: 'Keops::PriceParameters:CreateTitle';
|
|
104
116
|
}
|
|
105
|
-
get
|
|
106
|
-
return this.form?.get('
|
|
117
|
+
get selectedRegion() {
|
|
118
|
+
return this.form?.get('region')?.value ?? null;
|
|
107
119
|
}
|
|
108
120
|
get selectedTypeCode() {
|
|
109
121
|
return this.form?.get('typeCode')?.value ?? null;
|
|
@@ -111,15 +123,10 @@ export class PriceParameterFormComponent {
|
|
|
111
123
|
get selectedGroupCode() {
|
|
112
124
|
return this.form?.get('groupCode')?.value ?? null;
|
|
113
125
|
}
|
|
114
|
-
onRateCurrencyChange() {
|
|
115
|
-
this.form
|
|
116
|
-
.get('exchangeRate')
|
|
117
|
-
.setValue(this.rateCurrency === Currency.EUR ? this.systemRateEur : this.systemRateUsd);
|
|
118
|
-
}
|
|
119
126
|
goBack() {
|
|
120
127
|
this.router.navigate(['/keops/cost/price-parameters']);
|
|
121
128
|
}
|
|
122
|
-
save() {
|
|
129
|
+
save(andUpdatePriceList = false) {
|
|
123
130
|
if (this.form.invalid) {
|
|
124
131
|
this.form.markAllAsTouched();
|
|
125
132
|
return;
|
|
@@ -130,7 +137,6 @@ export class PriceParameterFormComponent {
|
|
|
130
137
|
customerCode: this.selectedCustomerCode,
|
|
131
138
|
gekapCurrency: this.gekapCurrency,
|
|
132
139
|
rawOilCurrency: this.rawOilCurrency,
|
|
133
|
-
salesPriceExcludingPackagingCurrency: this.salesPriceExcludingPackagingCurrency,
|
|
134
140
|
items: this.rowsBuilder.toInput(this.itemsArray),
|
|
135
141
|
discounts: this.discountsArray.controls
|
|
136
142
|
.map(group => group.value)
|
|
@@ -146,15 +152,22 @@ export class PriceParameterFormComponent {
|
|
|
146
152
|
request$.pipe(finalize(() => (this.saving = false))).subscribe({
|
|
147
153
|
next: () => {
|
|
148
154
|
this.toaster.success('AbpUi::SuccessfullySaved');
|
|
149
|
-
|
|
155
|
+
if (andUpdatePriceList) {
|
|
156
|
+
this.updatePriceList();
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.goBack();
|
|
160
|
+
}
|
|
150
161
|
},
|
|
151
162
|
});
|
|
152
163
|
}
|
|
164
|
+
saveAndUpdatePriceList() {
|
|
165
|
+
this.save(true);
|
|
166
|
+
}
|
|
153
167
|
load() {
|
|
154
168
|
this.formDataService.load(this.editMode ? this.docEntry : null).subscribe(data => {
|
|
155
169
|
this.typeOptions = data.typeOptions;
|
|
156
170
|
this.groupOptions = data.groupOptions;
|
|
157
|
-
this.regionOptions = data.regionOptions;
|
|
158
171
|
this.businessPartnersDataSource = data.businessPartnersDataSource;
|
|
159
172
|
this.allCostItems = data.costItems;
|
|
160
173
|
this.systemRateUsd = data.systemRateUsd;
|
|
@@ -164,17 +177,21 @@ export class PriceParameterFormComponent {
|
|
|
164
177
|
this.patchFromCurrent(data.current);
|
|
165
178
|
}
|
|
166
179
|
else {
|
|
180
|
+
this.form.patchValue({
|
|
181
|
+
exchangeRateUsd: this.systemRateUsd,
|
|
182
|
+
exchangeRateEur: this.systemRateEur,
|
|
183
|
+
});
|
|
167
184
|
this.autoApplyEnabled = true;
|
|
168
|
-
this.onRateCurrencyChange();
|
|
169
185
|
}
|
|
170
186
|
});
|
|
171
187
|
}
|
|
172
188
|
patchFromCurrent(dto) {
|
|
173
189
|
this.form.patchValue({
|
|
174
190
|
typeCode: dto.typeCode ?? null,
|
|
175
|
-
|
|
191
|
+
region: dto.region ?? null,
|
|
176
192
|
groupCode: dto.groupCode ?? null,
|
|
177
|
-
|
|
193
|
+
exchangeRateUsd: dto.exchangeRateUsd ?? 0,
|
|
194
|
+
exchangeRateEur: dto.exchangeRateEur ?? 0,
|
|
178
195
|
fromDate: this.toDateInput(dto.fromDate),
|
|
179
196
|
toDate: this.toDateInput(dto.toDate),
|
|
180
197
|
status: dto.status ?? PriceParameterStatus.Active,
|
|
@@ -184,13 +201,10 @@ export class PriceParameterFormComponent {
|
|
|
184
201
|
generalQuota: dto.generalQuota ?? 0,
|
|
185
202
|
promotionalQuota: dto.promotionalQuota ?? 0,
|
|
186
203
|
rawOilPrice: dto.rawOilPrice ?? 0,
|
|
187
|
-
salesPriceExcludingPackaging: dto.salesPriceExcludingPackaging ?? 0,
|
|
188
204
|
}, { emitEvent: false });
|
|
189
205
|
this.selectedCustomerCode = dto.customerCode ?? null;
|
|
190
206
|
this.gekapCurrency = dto.gekapCurrency ?? Currency.TRY;
|
|
191
207
|
this.rawOilCurrency = dto.rawOilCurrency ?? Currency.USD;
|
|
192
|
-
this.salesPriceExcludingPackagingCurrency =
|
|
193
|
-
dto.salesPriceExcludingPackagingCurrency ?? Currency.USD;
|
|
194
208
|
this.applyItems(dto.items);
|
|
195
209
|
this.applyDiscounts(dto.discounts);
|
|
196
210
|
this.autoApplyEnabled = true;
|
|
@@ -214,22 +228,76 @@ export class PriceParameterFormComponent {
|
|
|
214
228
|
applyItems(source) {
|
|
215
229
|
this.costItems = this.allCostItems;
|
|
216
230
|
this.rowsBuilder.build(this.itemsArray, this.costItems, source);
|
|
231
|
+
this.recalcSalesPriceExcludingPackaging();
|
|
217
232
|
}
|
|
218
233
|
clearItems() {
|
|
219
234
|
this.costItems = [];
|
|
220
235
|
this.itemsArray.clear();
|
|
236
|
+
this.recalcSalesPriceExcludingPackaging();
|
|
237
|
+
}
|
|
238
|
+
recalcSalesPriceExcludingPackaging() {
|
|
239
|
+
const items = this.itemsArray.controls.map((control, i) => {
|
|
240
|
+
const raw = control.value;
|
|
241
|
+
const meta = this.costItems[i];
|
|
242
|
+
const isPackaging = meta?.systemCode === CostItemSystemCode.Packaging;
|
|
243
|
+
return {
|
|
244
|
+
costItemCode: raw.costItemCode,
|
|
245
|
+
costItemName: meta?.name ?? raw.costItemCode,
|
|
246
|
+
calculationType: raw.calculationType,
|
|
247
|
+
systemCode: meta?.systemCode ?? undefined,
|
|
248
|
+
currency: raw.currency,
|
|
249
|
+
value: isPackaging ? 0 : parseDecimal(raw.value),
|
|
250
|
+
};
|
|
251
|
+
});
|
|
252
|
+
const stage = {
|
|
253
|
+
groupCode: '',
|
|
254
|
+
groupName: '',
|
|
255
|
+
displayOrder: 0,
|
|
256
|
+
groupRole: CostGroupRole.None,
|
|
257
|
+
items,
|
|
258
|
+
};
|
|
259
|
+
const rateUsd = parseDecimal(this.form.get('exchangeRateUsd').value);
|
|
260
|
+
const rateEur = parseDecimal(this.form.get('exchangeRateEur').value);
|
|
261
|
+
const result = calculateCost({
|
|
262
|
+
rawOilPrice: parseDecimal(this.form.get('rawOilPrice').value),
|
|
263
|
+
rawOilCurrency: this.rawOilCurrency,
|
|
264
|
+
rateUsd,
|
|
265
|
+
rateEur,
|
|
266
|
+
stages: [stage],
|
|
267
|
+
});
|
|
268
|
+
this.salesPriceExcludingPackagingTry = result.totalSalePrice.try;
|
|
269
|
+
this.salesPriceExcludingPackagingUsd = result.totalSalePrice.usd;
|
|
270
|
+
this.effectiveRateUsd = rateUsd;
|
|
271
|
+
this.effectiveRateEur = rateEur;
|
|
272
|
+
}
|
|
273
|
+
updatePriceList() {
|
|
274
|
+
if (!this.selectedRegion || !this.selectedGroupCode || !this.selectedTypeCode) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
this.updatingPrices = true;
|
|
278
|
+
this.priceUpdateService
|
|
279
|
+
.updateFromValues({
|
|
280
|
+
region: this.selectedRegion,
|
|
281
|
+
groupCode: this.selectedGroupCode,
|
|
282
|
+
typeCode: this.selectedTypeCode,
|
|
283
|
+
salesPriceExcludingPackagingTry: this.salesPriceExcludingPackagingTry,
|
|
284
|
+
rateUsd: this.effectiveRateUsd,
|
|
285
|
+
rateEur: this.effectiveRateEur,
|
|
286
|
+
})
|
|
287
|
+
.pipe(finalize(() => (this.updatingPrices = false)))
|
|
288
|
+
.subscribe();
|
|
221
289
|
}
|
|
222
290
|
onCombinationChange() {
|
|
223
291
|
if (!this.autoApplyEnabled) {
|
|
224
292
|
return;
|
|
225
293
|
}
|
|
226
|
-
const
|
|
294
|
+
const region = this.form.get('region').value;
|
|
227
295
|
const groupCode = this.form.get('groupCode').value;
|
|
228
|
-
if (!
|
|
296
|
+
if (!region || !groupCode) {
|
|
229
297
|
this.clearItems();
|
|
230
298
|
return;
|
|
231
299
|
}
|
|
232
|
-
this.costMatchService.findMatch(
|
|
300
|
+
this.costMatchService.findMatch(region, groupCode).subscribe(match => {
|
|
233
301
|
if (!match) {
|
|
234
302
|
this.clearItems();
|
|
235
303
|
return;
|
|
@@ -243,10 +311,10 @@ export class PriceParameterFormComponent {
|
|
|
243
311
|
return value.substring(0, 10);
|
|
244
312
|
}
|
|
245
313
|
}
|
|
246
|
-
PriceParameterFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PriceParameterFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.ToasterService }, { token: i4.PriceParameterService }, { token: i5.PriceParameterFormDataService }, { token: i6.PriceParameterCostMatchService }, { token: i7.CostItemRowsBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
247
|
-
PriceParameterFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PriceParameterFormComponent, selector: "lib-price-parameter-form", ngImport: i0, template: "<abp-page [title]=\"title | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row justify-content-end mx-0\">\r\n <div class=\"col-auto px-1 pt-0 pt-md-2 pe-0 d-flex gap-2\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i>\r\n {{ 'Keops::PriceParameters:BackToList' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" [disabled]=\"true\">\r\n {{ 'Keops::PriceParameters:UpdatePriceList' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-check\"\r\n buttonClass=\"btn btn-success\"\r\n [loading]=\"saving\"\r\n [disabled]=\"form?.invalid\"\r\n (click)=\"save()\"\r\n >\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header d-flex justify-content-between align-items-center\">\r\n <small class=\"text-muted\" *ngIf=\"editMode\">\r\n {{ 'Keops::PriceParameters:DocNum' | abpLocalization }}: {{ current?.docNum ?? '-' }} \u00B7\r\n {{ 'Keops::PriceParameters:DocDate' | abpLocalization }}:\r\n {{ (current?.docDate | shortDate) ?? '-' }}\r\n </small>\r\n <small class=\"text-muted ms-auto\">\r\n {{ 'Keops::PriceParameters:SystemRates' | abpLocalization }}: USD\r\n {{ systemRateUsd | number }} \u00B7 EUR {{ systemRateEur | number }}\r\n </small>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Type' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"typeCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let type of typeOptions\" [ngValue]=\"type.code\">\r\n {{ type.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Region' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"regionCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let region of regionOptions\" [ngValue]=\"region.code\">\r\n {{ region.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Group' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"groupCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let group of groupOptions\" [ngValue]=\"group.code\">\r\n {{ group.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:ExchangeRate' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"exchangeRate\"\r\n [(currency)]=\"rateCurrency\"\r\n (currencyChange)=\"onRateCurrencyChange()\"\r\n [currencyOptions]=\"rateCurrencyOptions\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:StartDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"fromDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:EndDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"toDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:SalesPriceExcludingPackaging' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"salesPriceExcludingPackaging\"\r\n [(currency)]=\"salesPriceExcludingPackagingCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Status' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"status\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let opt of statusOptions\" [ngValue]=\"opt.value\">\r\n {{ opt.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:CustomerCode' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-select-box\r\n [dataSource]=\"businessPartnersDataSource\"\r\n valueExpr=\"cardCode\"\r\n [displayExpr]=\"customerDisplayExpr\"\r\n [searchEnabled]=\"true\"\r\n [searchExpr]=\"['cardCode', 'cardName']\"\r\n searchMode=\"contains\"\r\n [searchTimeout]=\"200\"\r\n [minSearchLength]=\"0\"\r\n [showDataBeforeSearch]=\"true\"\r\n [showClearButton]=\"true\"\r\n [(value)]=\"selectedCustomerCode\"\r\n [placeholder]=\"'Keops::SelectAnOption' | abpLocalization\"\r\n ></dx-select-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Gekap' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"gekap\"\r\n [(currency)]=\"gekapCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:GeneralQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"generalQuota\" />\r\n <span class=\"input-group-text\">{{ 'Keops::PriceParameters:Unit:Ton' | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:PromotionalQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"promotionalQuota\" />\r\n <span class=\"input-group-text\">{{ 'Keops::PriceParameters:Unit:Ton' | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:RawOilPrice' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"rawOilPrice\"\r\n [(currency)]=\"rawOilCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Description' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <textarea class=\"form-control\" rows=\"2\" formControlName=\"description\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\" [destroyOnHide]=\"false\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:CostParameters' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-cost-items-tab [costItems]=\"costItems\" [itemsArray]=\"itemsArray\">\r\n </lib-price-parameter-cost-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:PriceLists' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-price-lists-tab\r\n [cpRegionCode]=\"selectedRegionCode\"\r\n [ppTypeCode]=\"selectedTypeCode\"\r\n ></lib-price-parameter-price-lists-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Items' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-items-tab\r\n [cpRegionCode]=\"selectedRegionCode\"\r\n [cpGroupCode]=\"selectedGroupCode\"\r\n ></lib-price-parameter-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Discounts' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-discount-rates-tab [discountsArray]=\"discountsArray\">\r\n </lib-price-parameter-discount-rates-tab>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i10.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i10.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i12.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i12.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.AmountCurrencyInputComponent, selector: "lib-amount-currency-input", inputs: ["currencyOptions", "currency"], outputs: ["currencyChange"] }, { kind: "component", type: i14.PriceParameterCostItemsTabComponent, selector: "lib-price-parameter-cost-items-tab", inputs: ["costItems", "itemsArray"] }, { kind: "component", type: i15.PriceParameterPriceListsTabComponent, selector: "lib-price-parameter-price-lists-tab", inputs: ["cpRegionCode", "ppTypeCode"] }, { kind: "component", type: i16.PriceParameterItemsTabComponent, selector: "lib-price-parameter-items-tab", inputs: ["cpRegionCode", "cpGroupCode"] }, { kind: "component", type: i17.PriceParameterDiscountRatesTabComponent, selector: "lib-price-parameter-discount-rates-tab", inputs: ["discountsArray"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i9.ShortDatePipe, name: "shortDate" }] });
|
|
314
|
+
PriceParameterFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PriceParameterFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.ToasterService }, { token: i4.PriceParameterService }, { token: i5.PriceParameterFormDataService }, { token: i6.PriceParameterCostMatchService }, { token: i7.CostItemRowsBuilder }, { token: i8.PriceParameterPriceUpdateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
315
|
+
PriceParameterFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PriceParameterFormComponent, selector: "lib-price-parameter-form", ngImport: i0, template: "<abp-page>\r\n <abp-page-title-container class=\"col-auto\">\r\n <h1 class=\"content-header-title\">\r\n {{ title | abpLocalization }}\r\n <small style=\"font-size: 0.85rem; font-weight: 400\">\r\n <a href=\"javascript:void(0)\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-circle-left\"></i>\r\n {{ 'Keops::PriceParameters:BackToList' | abpLocalization }}</a\r\n >\r\n </small>\r\n </h1>\r\n </abp-page-title-container>\r\n\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"btn-group\" role=\"group\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form?.invalid || saving || updatingPrices\"\r\n (click)=\"save()\"\r\n >\r\n <span *ngIf=\"saving\" class=\"spinner-border spinner-border-sm me-1\"></span>\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </button>\r\n\r\n <div ngbDropdown class=\"d-inline-block\" container=\"body\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-primary dropdown-toggle-split\"\r\n ngbDropdownToggle\r\n [disabled]=\"form?.invalid || saving || updatingPrices\"\r\n >\r\n <span class=\"visually-hidden\">{{ 'AbpUi::Actions' | abpLocalization }}</span>\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"saveAndUpdatePriceList()\">\r\n <span *ngIf=\"updatingPrices\" class=\"spinner-border spinner-border-sm me-1\"></span>\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'Keops::PriceParameters:SaveAndUpdatePriceList' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header d-flex justify-content-between align-items-center\">\r\n <small class=\"text-muted\" *ngIf=\"editMode\">\r\n {{ 'Keops::PriceParameters:DocNum' | abpLocalization }}: {{ current?.docNum ?? '-' }} \u00B7\r\n {{ 'Keops::PriceParameters:DocDate' | abpLocalization }}:\r\n {{ (current?.docDate | shortDate) ?? '-' }}\r\n </small>\r\n <small class=\"text-muted ms-auto\">\r\n {{ 'Keops::PriceParameters:SystemRates' | abpLocalization }}: USD\r\n {{ systemRateUsd | number }} \u00B7 EUR {{ systemRateEur | number }}\r\n </small>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Type' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"typeCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let type of typeOptions\" [ngValue]=\"type.code\">\r\n {{ type.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Region' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"region\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let region of regionOptions\" [ngValue]=\"region.value\">\r\n {{ region.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Group' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"groupCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let group of groupOptions\" [ngValue]=\"group.code\">\r\n {{ group.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:ExchangeRates' | abpLocalization }}\r\n </label>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">USD</span>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"exchangeRateUsd\" />\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">EUR</span>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"exchangeRateEur\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:StartDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"fromDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:EndDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"toDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:SalesPriceExcludingPackaging' | abpLocalization }}\r\n </label>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">USD</span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [value]=\"salesPriceExcludingPackagingUsd | number: '1.2-2'\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">TRY</span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [value]=\"salesPriceExcludingPackagingTry | number: '1.2-2'\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Status' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"status\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let opt of statusOptions\" [ngValue]=\"opt.value\">\r\n {{ opt.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:CustomerCode' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-select-box\r\n [dataSource]=\"businessPartnersDataSource\"\r\n valueExpr=\"cardCode\"\r\n [displayExpr]=\"customerDisplayExpr\"\r\n [searchEnabled]=\"true\"\r\n [searchExpr]=\"['cardCode', 'cardName']\"\r\n searchMode=\"contains\"\r\n [searchTimeout]=\"200\"\r\n [minSearchLength]=\"0\"\r\n [showDataBeforeSearch]=\"true\"\r\n [showClearButton]=\"true\"\r\n [(value)]=\"selectedCustomerCode\"\r\n [placeholder]=\"'Keops::SelectAnOption' | abpLocalization\"\r\n ></dx-select-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Gekap' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"gekap\"\r\n [(currency)]=\"gekapCurrency\"\r\n [currencyOptions]=\"tryUsdCurrencyOptions\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:GeneralQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"generalQuota\" />\r\n <span class=\"input-group-text\">{{\r\n 'Keops::PriceParameters:Unit:Ton' | abpLocalization\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:PromotionalQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"promotionalQuota\" />\r\n <span class=\"input-group-text\">{{\r\n 'Keops::PriceParameters:Unit:Ton' | abpLocalization\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:RawOilPrice' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"rawOilPrice\"\r\n [(currency)]=\"rawOilCurrency\"\r\n [currencyOptions]=\"tryUsdCurrencyOptions\"\r\n (currencyChange)=\"recalcSalesPriceExcludingPackaging()\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Description' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <textarea class=\"form-control\" rows=\"2\" formControlName=\"description\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\" [destroyOnHide]=\"false\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:CostParameters' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-cost-items-tab [costItems]=\"costItems\" [itemsArray]=\"itemsArray\">\r\n </lib-price-parameter-cost-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:PriceLists' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-price-lists-tab\r\n [businessRegion]=\"selectedRegion\"\r\n [ppTypeCode]=\"selectedTypeCode\"\r\n ></lib-price-parameter-price-lists-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Items' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-items-tab\r\n [businessRegion]=\"selectedRegion\"\r\n [cpGroupCode]=\"selectedGroupCode\"\r\n ></lib-price-parameter-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Discounts' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-discount-rates-tab [discountsArray]=\"discountsArray\">\r\n </lib-price-parameter-discount-rates-tab>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "component", type: i11.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i11.PageTitleContainerComponent, selector: "abp-page-title-container" }, { kind: "component", type: i11.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "directive", type: i12.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i12.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i12.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i12.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "directive", type: i12.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i12.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i12.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i12.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "component", type: i12.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i13.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i13.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i14.AmountCurrencyInputComponent, selector: "lib-amount-currency-input", inputs: ["currencyOptions", "currency", "disabled"], outputs: ["currencyChange"] }, { kind: "component", type: i15.PriceParameterCostItemsTabComponent, selector: "lib-price-parameter-cost-items-tab", inputs: ["costItems", "itemsArray"] }, { kind: "component", type: i16.PriceParameterPriceListsTabComponent, selector: "lib-price-parameter-price-lists-tab", inputs: ["businessRegion", "ppTypeCode"] }, { kind: "component", type: i17.PriceParameterItemsTabComponent, selector: "lib-price-parameter-items-tab", inputs: ["businessRegion", "cpGroupCode"] }, { kind: "component", type: i18.PriceParameterDiscountRatesTabComponent, selector: "lib-price-parameter-discount-rates-tab", inputs: ["discountsArray"] }, { kind: "pipe", type: i9.DecimalPipe, name: "number" }, { kind: "pipe", type: i10.LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i10.ShortDatePipe, name: "shortDate" }] });
|
|
248
316
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PriceParameterFormComponent, decorators: [{
|
|
249
317
|
type: Component,
|
|
250
|
-
args: [{ selector: 'lib-price-parameter-form', template: "<abp-page [title]=\"title | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row justify-content-end mx-0\">\r\n <div class=\"col-auto px-1 pt-0 pt-md-2 pe-0 d-flex gap-2\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i>\r\n {{ 'Keops::PriceParameters:BackToList' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" [disabled]=\"true\">\r\n {{ 'Keops::PriceParameters:UpdatePriceList' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-check\"\r\n buttonClass=\"btn btn-success\"\r\n [loading]=\"saving\"\r\n [disabled]=\"form?.invalid\"\r\n (click)=\"save()\"\r\n >\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header d-flex justify-content-between align-items-center\">\r\n <small class=\"text-muted\" *ngIf=\"editMode\">\r\n {{ 'Keops::PriceParameters:DocNum' | abpLocalization }}: {{ current?.docNum ?? '-' }} \u00B7\r\n {{ 'Keops::PriceParameters:DocDate' | abpLocalization }}:\r\n {{ (current?.docDate | shortDate) ?? '-' }}\r\n </small>\r\n <small class=\"text-muted ms-auto\">\r\n {{ 'Keops::PriceParameters:SystemRates' | abpLocalization }}: USD\r\n {{ systemRateUsd | number }} \u00B7 EUR {{ systemRateEur | number }}\r\n </small>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Type' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"typeCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let type of typeOptions\" [ngValue]=\"type.code\">\r\n {{ type.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Region' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"regionCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let region of regionOptions\" [ngValue]=\"region.code\">\r\n {{ region.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Group' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"groupCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let group of groupOptions\" [ngValue]=\"group.code\">\r\n {{ group.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:ExchangeRate' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"exchangeRate\"\r\n [(currency)]=\"rateCurrency\"\r\n (currencyChange)=\"onRateCurrencyChange()\"\r\n [currencyOptions]=\"rateCurrencyOptions\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:StartDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"fromDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:EndDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"toDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:SalesPriceExcludingPackaging' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"salesPriceExcludingPackaging\"\r\n [(currency)]=\"salesPriceExcludingPackagingCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Status' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"status\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let opt of statusOptions\" [ngValue]=\"opt.value\">\r\n {{ opt.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:CustomerCode' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-select-box\r\n [dataSource]=\"businessPartnersDataSource\"\r\n valueExpr=\"cardCode\"\r\n [displayExpr]=\"customerDisplayExpr\"\r\n [searchEnabled]=\"true\"\r\n [searchExpr]=\"['cardCode', 'cardName']\"\r\n searchMode=\"contains\"\r\n [searchTimeout]=\"200\"\r\n [minSearchLength]=\"0\"\r\n [showDataBeforeSearch]=\"true\"\r\n [showClearButton]=\"true\"\r\n [(value)]=\"selectedCustomerCode\"\r\n [placeholder]=\"'Keops::SelectAnOption' | abpLocalization\"\r\n ></dx-select-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Gekap' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"gekap\"\r\n [(currency)]=\"gekapCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:GeneralQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"generalQuota\" />\r\n <span class=\"input-group-text\">{{ 'Keops::PriceParameters:Unit:Ton' | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:PromotionalQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"promotionalQuota\" />\r\n <span class=\"input-group-text\">{{ 'Keops::PriceParameters:Unit:Ton' | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:RawOilPrice' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"rawOilPrice\"\r\n [(currency)]=\"rawOilCurrency\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Description' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <textarea class=\"form-control\" rows=\"2\" formControlName=\"description\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\" [destroyOnHide]=\"false\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:CostParameters' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-cost-items-tab [costItems]=\"costItems\" [itemsArray]=\"itemsArray\">\r\n </lib-price-parameter-cost-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:PriceLists' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-price-lists-tab\r\n [cpRegionCode]=\"selectedRegionCode\"\r\n [ppTypeCode]=\"selectedTypeCode\"\r\n ></lib-price-parameter-price-lists-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Items' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-items-tab\r\n [cpRegionCode]=\"selectedRegionCode\"\r\n [cpGroupCode]=\"selectedGroupCode\"\r\n ></lib-price-parameter-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Discounts' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-discount-rates-tab [discountsArray]=\"discountsArray\">\r\n </lib-price-parameter-discount-rates-tab>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n" }]
|
|
251
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.ToasterService }, { type: i4.PriceParameterService }, { type: i5.PriceParameterFormDataService }, { type: i6.PriceParameterCostMatchService }, { type: i7.CostItemRowsBuilder }]; } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9wcmljZS1wYXJhbWV0ZXJzL2NvbXBvbmVudHMvcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9wcmljZS1wYXJhbWV0ZXJzL2NvbXBvbmVudHMvcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBSUwsUUFBUSxFQU1SLG9CQUFvQixHQUNyQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHbEcsTUFBTSxhQUFhLEdBQUc7SUFDcEIsb0JBQW9CLENBQUMsVUFBVTtJQUMvQixvQkFBb0IsQ0FBQyxNQUFNO0lBQzNCLG9CQUFvQixDQUFDLE9BQU87Q0FDN0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEVB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RSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O3dIQTdRVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixnRUNyQ3hDLCsxWkFvU0E7MkZEL1BhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCBEYXRhU291cmNlIGZyb20gJ2RldmV4dHJlbWUvZGF0YS9kYXRhX3NvdXJjZSc7XHJcbmltcG9ydCB7XHJcbiAgUHJpY2VQYXJhbWV0ZXJTZXJ2aWNlLFxyXG4gIEJ1c2luZXNzUGFydG5lckR0byxcclxuICBDb3N0SXRlbUR0byxcclxuICBDdXJyZW5jeSxcclxuICBDb3N0UGFyYW1ldGVyQ2F0ZWdvcnlEdG8sXHJcbiAgUHJpY2VQYXJhbWV0ZXJUeXBlTG9va3VwRHRvLFxyXG4gIFByaWNlUGFyYW1ldGVyRHRvLFxyXG4gIFByaWNlUGFyYW1ldGVyRGlzY291bnREdG8sXHJcbiAgQ29zdFBhcmFtZXRlckl0ZW1EdG8sXHJcbiAgUHJpY2VQYXJhbWV0ZXJTdGF0dXMsXHJcbn0gZnJvbSAnQGhpdHNvZnQva2Fkb29nbHUta2VvcHMvcHJveHknO1xyXG5pbXBvcnQgeyBzdGF0dXNMYWJlbHMgfSBmcm9tICcuLi9wcmljZS1wYXJhbWV0ZXItbDEwbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQcmljZVBhcmFtZXRlckZvcm1EYXRhU2VydmljZSB9IGZyb20gJy4uL3ByaWNlLXBhcmFtZXRlci1mb3JtLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFByaWNlUGFyYW1ldGVyQ29zdE1hdGNoU2VydmljZSB9IGZyb20gJy4uL3ByaWNlLXBhcmFtZXRlci1jb3N0LW1hdGNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDVVJSRU5DWV9PUFRJT05TLCBDVVJSRU5DWV9PUFRJT05TX0ZYX09OTFkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jdXJyZW5jeS51dGlscyc7XHJcbmltcG9ydCB7IGlzUmF0ZUNvc3RJdGVtLCBpc0N1c3RvbUNvc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Nvc3QtaXRlbS1jbGFzc2lmaWNhdGlvbi51dGlscyc7XHJcbmltcG9ydCB7IENvc3RJdGVtUm93c0J1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29zdC1pdGVtLXJvd3MuYnVpbGRlcic7XHJcblxyXG5jb25zdCBzdGF0dXNPcHRpb25zID0gW1xyXG4gIFByaWNlUGFyYW1ldGVyU3RhdHVzLkluUHJvZ3Jlc3MsXHJcbiAgUHJpY2VQYXJhbWV0ZXJTdGF0dXMuQWN0aXZlLFxyXG4gIFByaWNlUGFyYW1ldGVyU3RhdHVzLlBhc3NpdmUsXHJcbl0ubWFwKHZhbHVlID0+ICh7IHZhbHVlLCBsYWJlbDogc3RhdHVzTGFiZWxzW3ZhbHVlXSB9KSk7XHJcblxyXG5jb25zdCBERUZBVUxUX0RJU0NPVU5UX1JPV1MgPSAxMDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByaWNlLXBhcmFtZXRlci1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpY2VQYXJhbWV0ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVkaXRNb2RlID0gZmFsc2U7XHJcbiAgZG9jRW50cnk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnQ6IFByaWNlUGFyYW1ldGVyRHRvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvc3RJdGVtczogQ29zdEl0ZW1EdG9bXSA9IFtdO1xyXG4gIHByaXZhdGUgYWxsQ29zdEl0ZW1zOiBDb3N0SXRlbUR0b1tdID0gW107XHJcbiAgdHlwZU9wdGlvbnM6IFByaWNlUGFyYW1ldGVyVHlwZUxvb2t1cER0b1tdID0gW107XHJcbiAgZ3JvdXBPcHRpb25zOiBDb3N0UGFyYW1ldGVyQ2F0ZWdvcnlEdG9bXSA9IFtdO1xyXG4gIHJlZ2lvbk9wdGlvbnM6IENvc3RQYXJhbWV0ZXJDYXRlZ29yeUR0b1tdID0gW107XHJcblxyXG4gIHByaXZhdGUgYXV0b0FwcGx5RW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICBzeXN0ZW1SYXRlVXNkID0gMDtcclxuICBzeXN0ZW1SYXRlRXVyID0gMDtcclxuICByYXRlQ3VycmVuY3k6IEN1cnJlbmN5ID0gQ3VycmVuY3kuVVNEO1xyXG5cclxuICBidXNpbmVzc1BhcnRuZXJzRGF0YVNvdXJjZTogRGF0YVNvdXJjZSB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ3VzdG9tZXJDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBnZWthcEN1cnJlbmN5OiBDdXJyZW5jeSA9IEN1cnJlbmN5LlRSWTtcclxuICByYXdPaWxDdXJyZW5jeTogQ3VycmVuY3kgPSBDdXJyZW5jeS5VU0Q7XHJcbiAgc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ0N1cnJlbmN5OiBDdXJyZW5jeSA9IEN1cnJlbmN5LlVTRDtcclxuXHJcbiAgcmVhZG9ubHkgc3RhdHVzT3B0aW9ucyA9IHN0YXR1c09wdGlvbnM7XHJcbiAgcmVhZG9ubHkgY3VycmVuY3lPcHRpb25zID0gQ1VSUkVOQ1lfT1BUSU9OUztcclxuICByZWFkb25seSByYXRlQ3VycmVuY3lPcHRpb25zID0gQ1VSUkVOQ1lfT1BUSU9OU19GWF9PTkxZO1xyXG5cclxuICByZWFkb25seSBjdXN0b21lckRpc3BsYXlFeHByID0gKGM6IEJ1c2luZXNzUGFydG5lckR0byB8IG51bGwpOiBzdHJpbmcgPT5cclxuICAgIGMgPyBgJHtjLmNhcmRDb2RlfSAtICR7Yy5jYXJkTmFtZX1gIDogJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBQcmljZVBhcmFtZXRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1EYXRhU2VydmljZTogUHJpY2VQYXJhbWV0ZXJGb3JtRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvc3RNYXRjaFNlcnZpY2U6IFByaWNlUGFyYW1ldGVyQ29zdE1hdGNoU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm93c0J1aWxkZXI6IENvc3RJdGVtUm93c0J1aWxkZXIsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY0VudHJ5UGFyYW0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnZG9jRW50cnknKTtcclxuICAgIHRoaXMuZG9jRW50cnkgPSBkb2NFbnRyeVBhcmFtICE9IG51bGwgPyBOdW1iZXIoZG9jRW50cnlQYXJhbSkgOiBudWxsO1xyXG4gICAgdGhpcy5lZGl0TW9kZSA9IHRoaXMuZG9jRW50cnkgIT0gbnVsbCAmJiAhTnVtYmVyLmlzTmFOKHRoaXMuZG9jRW50cnkpO1xyXG5cclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0eXBlQ29kZTogW251bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJlZ2lvbkNvZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBncm91cENvZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBleGNoYW5nZVJhdGU6IFswXSxcclxuICAgICAgZnJvbURhdGU6IFt7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdGhpcy5lZGl0TW9kZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICB0b0RhdGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzdGF0dXM6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBkZXNjcmlwdGlvbjogW251bGwsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTQpXV0sXHJcbiAgICAgIGN1c3RvbWVyQ29kZTogW251bGxdLFxyXG4gICAgICBnZWthcDogWzBdLFxyXG4gICAgICBnZW5lcmFsUXVvdGE6IFswXSxcclxuICAgICAgcHJvbW90aW9uYWxRdW90YTogWzBdLFxyXG4gICAgICByYXdPaWxQcmljZTogWzBdLFxyXG4gICAgICBzYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nOiBbMF0sXHJcbiAgICAgIGl0ZW1zOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZGlzY291bnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlEaXNjb3VudHMobnVsbCk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmdldCgncmVnaW9uQ29kZScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Db21iaW5hdGlvbkNoYW5nZSgpKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2dyb3VwQ29kZScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Db21iaW5hdGlvbkNoYW5nZSgpKTtcclxuXHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtc0FycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzY291bnRzQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdkaXNjb3VudHMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRNb2RlXHJcbiAgICAgID8gJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RWRpdFRpdGxlJ1xyXG4gICAgICA6ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkNyZWF0ZVRpdGxlJztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFJlZ2lvbkNvZGUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtPy5nZXQoJ3JlZ2lvbkNvZGUnKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFR5cGVDb2RlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KCd0eXBlQ29kZScpPy52YWx1ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkR3JvdXBDb2RlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KCdncm91cENvZGUnKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGlzUmF0ZSA9IGlzUmF0ZUNvc3RJdGVtO1xyXG4gIHJlYWRvbmx5IGlzQ3VzdG9tID0gaXNDdXN0b21Db3N0SXRlbTtcclxuXHJcbiAgb25SYXRlQ3VycmVuY3lDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnZXhjaGFuZ2VSYXRlJykhXHJcbiAgICAgIC5zZXRWYWx1ZSh0aGlzLnJhdGVDdXJyZW5jeSA9PT0gQ3VycmVuY3kuRVVSID8gdGhpcy5zeXN0ZW1SYXRlRXVyIDogdGhpcy5zeXN0ZW1SYXRlVXNkKTtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2tlb3BzL2Nvc3QvcHJpY2UtcGFyYW1ldGVycyddKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHtcclxuICAgICAgLi4udGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksXHJcbiAgICAgIGN1c3RvbWVyQ29kZTogdGhpcy5zZWxlY3RlZEN1c3RvbWVyQ29kZSxcclxuICAgICAgZ2VrYXBDdXJyZW5jeTogdGhpcy5nZWthcEN1cnJlbmN5LFxyXG4gICAgICByYXdPaWxDdXJyZW5jeTogdGhpcy5yYXdPaWxDdXJyZW5jeSxcclxuICAgICAgc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ0N1cnJlbmN5OiB0aGlzLnNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmdDdXJyZW5jeSxcclxuICAgICAgaXRlbXM6IHRoaXMucm93c0J1aWxkZXIudG9JbnB1dCh0aGlzLml0ZW1zQXJyYXkpLFxyXG4gICAgICBkaXNjb3VudHM6IHRoaXMuZGlzY291bnRzQXJyYXkuY29udHJvbHNcclxuICAgICAgICAubWFwKGdyb3VwID0+IGdyb3VwLnZhbHVlKVxyXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUuc2FsZXNFbXBsb3llZUNvZGUgIT0gbnVsbClcclxuICAgICAgICAubWFwKHZhbHVlID0+ICh7XHJcbiAgICAgICAgICBzYWxlc0VtcGxveWVlQ29kZTogdmFsdWUuc2FsZXNFbXBsb3llZUNvZGUsXHJcbiAgICAgICAgICByYXRlOiB2YWx1ZS5yYXRlLFxyXG4gICAgICAgIH0pKSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCQgPSB0aGlzLmVkaXRNb2RlXHJcbiAgICAgID8gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmRvY0VudHJ5ISwgaW5wdXQpXHJcbiAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShpbnB1dCk7XHJcblxyXG4gICAgcmVxdWVzdCQucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5zYXZpbmcgPSBmYWxzZSkpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MoJ0FicFVpOjpTdWNjZXNzZnVsbHlTYXZlZCcpO1xyXG4gICAgICAgIHRoaXMuZ29CYWNrKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybURhdGFTZXJ2aWNlLmxvYWQodGhpcy5lZGl0TW9kZSA/IHRoaXMuZG9jRW50cnkgOiBudWxsKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSBkYXRhLnR5cGVPcHRpb25zO1xyXG4gICAgICB0aGlzLmdyb3VwT3B0aW9ucyA9IGRhdGEuZ3JvdXBPcHRpb25zO1xyXG4gICAgICB0aGlzLnJlZ2lvbk9wdGlvbnMgPSBkYXRhLnJlZ2lvbk9wdGlvbnM7XHJcbiAgICAgIHRoaXMuYnVzaW5lc3NQYXJ0bmVyc0RhdGFTb3VyY2UgPSBkYXRhLmJ1c2luZXNzUGFydG5lcnNEYXRhU291cmNlO1xyXG4gICAgICB0aGlzLmFsbENvc3RJdGVtcyA9IGRhdGEuY29zdEl0ZW1zO1xyXG4gICAgICB0aGlzLnN5c3RlbVJhdGVVc2QgPSBkYXRhLnN5c3RlbVJhdGVVc2Q7XHJcbiAgICAgIHRoaXMuc3lzdGVtUmF0ZUV1ciA9IGRhdGEuc3lzdGVtUmF0ZUV1cjtcclxuXHJcbiAgICAgIGlmIChkYXRhLmN1cnJlbnQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBkYXRhLmN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5wYXRjaEZyb21DdXJyZW50KGRhdGEuY3VycmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hdXRvQXBwbHlFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uUmF0ZUN1cnJlbmN5Q2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXRjaEZyb21DdXJyZW50KGR0bzogUHJpY2VQYXJhbWV0ZXJEdG8pOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZUNvZGU6IGR0by50eXBlQ29kZSA/PyBudWxsLFxyXG4gICAgICAgIHJlZ2lvbkNvZGU6IGR0by5yZWdpb25Db2RlID8/IG51bGwsXHJcbiAgICAgICAgZ3JvdXBDb2RlOiBkdG8uZ3JvdXBDb2RlID8/IG51bGwsXHJcbiAgICAgICAgZXhjaGFuZ2VSYXRlOiBkdG8uZXhjaGFuZ2VSYXRlID8/IDAsXHJcbiAgICAgICAgZnJvbURhdGU6IHRoaXMudG9EYXRlSW5wdXQoZHRvLmZyb21EYXRlKSxcclxuICAgICAgICB0b0RhdGU6IHRoaXMudG9EYXRlSW5wdXQoZHRvLnRvRGF0ZSksXHJcbiAgICAgICAgc3RhdHVzOiBkdG8uc3RhdHVzID8/IFByaWNlUGFyYW1ldGVyU3RhdHVzLkFjdGl2ZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogZHRvLmRlc2NyaXB0aW9uID8/IG51bGwsXHJcbiAgICAgICAgY3VzdG9tZXJDb2RlOiBkdG8uY3VzdG9tZXJDb2RlID8/IG51bGwsXHJcbiAgICAgICAgZ2VrYXA6IGR0by5nZWthcCA/PyAwLFxyXG4gICAgICAgIGdlbmVyYWxRdW90YTogZHRvLmdlbmVyYWxRdW90YSA/PyAwLFxyXG4gICAgICAgIHByb21vdGlvbmFsUXVvdGE6IGR0by5wcm9tb3Rpb25hbFF1b3RhID8/IDAsXHJcbiAgICAgICAgcmF3T2lsUHJpY2U6IGR0by5yYXdPaWxQcmljZSA/PyAwLFxyXG4gICAgICAgIHNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmc6IGR0by5zYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nID8/IDAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ3VzdG9tZXJDb2RlID0gZHRvLmN1c3RvbWVyQ29kZSA/PyBudWxsO1xyXG4gICAgdGhpcy5nZWthcEN1cnJlbmN5ID0gZHRvLmdla2FwQ3VycmVuY3kgPz8gQ3VycmVuY3kuVFJZO1xyXG4gICAgdGhpcy5yYXdPaWxDdXJyZW5jeSA9IGR0by5yYXdPaWxDdXJyZW5jeSA/PyBDdXJyZW5jeS5VU0Q7XHJcbiAgICB0aGlzLnNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmdDdXJyZW5jeSA9XHJcbiAgICAgIGR0by5zYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nQ3VycmVuY3kgPz8gQ3VycmVuY3kuVVNEO1xyXG5cclxuICAgIHRoaXMuYXBwbHlJdGVtcyhkdG8uaXRlbXMpO1xyXG4gICAgdGhpcy5hcHBseURpc2NvdW50cyhkdG8uZGlzY291bnRzKTtcclxuICAgIHRoaXMuYXV0b0FwcGx5RW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RGlzY291bnRzKFxyXG4gICAgc291cmNlOiBSZWFkb25seUFycmF5PFByaWNlUGFyYW1ldGVyRGlzY291bnREdG8+IHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzY291bnRzQXJyYXkuY2xlYXIoKTtcclxuICAgIGZvciAoY29uc3QgZGlzY291bnQgb2Ygc291cmNlID8/IFtdKSB7XHJcbiAgICAgIHRoaXMuZGlzY291bnRzQXJyYXkucHVzaChcclxuICAgICAgICB0aGlzLmNyZWF0ZURpc2NvdW50Um93KFxyXG4gICAgICAgICAgZGlzY291bnQuc2FsZXNFbXBsb3llZUNvZGUgPz8gbnVsbCxcclxuICAgICAgICAgIGRpc2NvdW50LnNhbGVzRW1wbG95ZWVOYW1lID8/IG51bGwsXHJcbiAgICAgICAgICBkaXNjb3VudC5yYXRlID8/IG51bGwsXHJcbiAgICAgICAgKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5kaXNjb3VudHNBcnJheS5sZW5ndGggPCBERUZBVUxUX0RJU0NPVU5UX1JPV1MpIHtcclxuICAgICAgdGhpcy5kaXNjb3VudHNBcnJheS5wdXNoKHRoaXMuY3JlYXRlRGlzY291bnRSb3cobnVsbCwgbnVsbCwgbnVsbCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNjb3VudFJvdyhcclxuICAgIHNhbGVzRW1wbG95ZWVDb2RlOiBudW1iZXIgfCBudWxsLFxyXG4gICAgc2FsZXNFbXBsb3llZU5hbWU6IHN0cmluZyB8IG51bGwsXHJcbiAgICByYXRlOiBudW1iZXIgfCBudWxsLFxyXG4gICk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNhbGVzRW1wbG95ZWVDb2RlOiBbc2FsZXNFbXBsb3llZUNvZGVdLFxyXG4gICAgICBzYWxlc0VtcGxveWVlTmFtZTogW3NhbGVzRW1wbG95ZWVOYW1lXSxcclxuICAgICAgcmF0ZTogW3JhdGVdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5SXRlbXMoc291cmNlOiBSZWFkb25seUFycmF5PENvc3RQYXJhbWV0ZXJJdGVtRHRvPiB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY29zdEl0ZW1zID0gdGhpcy5hbGxDb3N0SXRlbXM7XHJcbiAgICB0aGlzLnJvd3NCdWlsZGVyLmJ1aWxkKHRoaXMuaXRlbXNBcnJheSwgdGhpcy5jb3N0SXRlbXMsIHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFySXRlbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvc3RJdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5pdGVtc0FycmF5LmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ29tYmluYXRpb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b0FwcGx5RW5hYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaW9uQ29kZSA9IHRoaXMuZm9ybS5nZXQoJ3JlZ2lvbkNvZGUnKSEudmFsdWU7XHJcbiAgICBjb25zdCBncm91cENvZGUgPSB0aGlzLmZvcm0uZ2V0KCdncm91cENvZGUnKSEudmFsdWU7XHJcblxyXG4gICAgaWYgKCFyZWdpb25Db2RlIHx8ICFncm91cENvZGUpIHtcclxuICAgICAgdGhpcy5jbGVhckl0ZW1zKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvc3RNYXRjaFNlcnZpY2UuZmluZE1hdGNoKHJlZ2lvbkNvZGUsIGdyb3VwQ29kZSkuc3Vic2NyaWJlKG1hdGNoID0+IHtcclxuICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJJdGVtcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hcHBseUl0ZW1zKG1hdGNoLml0ZW1zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b0RhdGVJbnB1dCh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIDEwKTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCJ0aXRsZSB8IGFicExvY2FsaXphdGlvblwiPlxyXG4gIDxhYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lciBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIG14LTBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHB4LTEgcHQtMCBwdC1tZC0yIHBlLTAgZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkJhY2tUb0xpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VXBkYXRlUHJpY2VMaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiXHJcbiAgICAgICAgICBidXR0b25DbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiXHJcbiAgICAgICAgICBbbG9hZGluZ109XCJzYXZpbmdcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0/LmludmFsaWRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgJ0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiICpuZ0lmPVwiZWRpdE1vZGVcIj5cclxuICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkRvY051bScgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGN1cnJlbnQ/LmRvY051bSA/PyAnLScgfX0gwrdcclxuICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkRvY0RhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19OlxyXG4gICAgICAgICAge3sgKGN1cnJlbnQ/LmRvY0RhdGUgfCBzaG9ydERhdGUpID8/ICctJyB9fVxyXG4gICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBtcy1hdXRvXCI+XHJcbiAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpTeXN0ZW1SYXRlcycgfCBhYnBMb2NhbGl6YXRpb24gfX06IFVTRFxyXG4gICAgICAgICAge3sgc3lzdGVtUmF0ZVVzZCB8IG51bWJlciB9fSDCtyBFVVIge3sgc3lzdGVtUmF0ZUV1ciB8IG51bWJlciB9fVxyXG4gICAgICAgIDwvc21hbGw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlR5cGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgZGlzYWJsZWQgaGlkZGVuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6U2VsZWN0QW5PcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIHR5cGVPcHRpb25zXCIgW25nVmFsdWVdPVwidHlwZS5jb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdHlwZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpSZWdpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVnaW9uQ29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIiBkaXNhYmxlZCBoaWRkZW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpTZWxlY3RBbk9wdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHJlZ2lvbiBvZiByZWdpb25PcHRpb25zXCIgW25nVmFsdWVdPVwicmVnaW9uLmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyByZWdpb24ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6R3JvdXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIGRpc2FibGVkIGhpZGRlbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlNlbGVjdEFuT3B0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBPcHRpb25zXCIgW25nVmFsdWVdPVwiZ3JvdXAuY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkV4Y2hhbmdlUmF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1hbW91bnQtY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXhjaGFuZ2VSYXRlXCJcclxuICAgICAgICAgICAgICAgICAgWyhjdXJyZW5jeSldPVwicmF0ZUN1cnJlbmN5XCJcclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbmN5Q2hhbmdlKT1cIm9uUmF0ZUN1cnJlbmN5Q2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICBbY3VycmVuY3lPcHRpb25zXT1cInJhdGVDdXJyZW5jeU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGliLWFtb3VudC1jdXJyZW5jeS1pbnB1dD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlN0YXJ0RGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBkYXRlU2VyaWFsaXphdGlvbkZvcm1hdD1cInl5eXktTU0tZGRcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA+PC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkVuZERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgZGF0ZVNlcmlhbGl6YXRpb25Gb3JtYXQ9XCJ5eXl5LU1NLWRkXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCJcclxuICAgICAgICAgICAgICAgID48L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6U2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1hbW91bnQtY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoY3VycmVuY3kpXT1cInNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmdDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICA+PC9saWItYW1vdW50LWN1cnJlbmN5LWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpTdGF0dXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIGRpc2FibGVkIGhpZGRlbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlNlbGVjdEFuT3B0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHN0YXR1c09wdGlvbnNcIiBbbmdWYWx1ZV09XCJvcHQudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHQubGFiZWwgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkN1c3RvbWVyQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYnVzaW5lc3NQYXJ0bmVyc0RhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJjYXJkQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RXhwcl09XCJjdXN0b21lckRpc3BsYXlFeHByXCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWFyY2hFeHByXT1cIlsnY2FyZENvZGUnLCAnY2FyZE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE1vZGU9XCJjb250YWluc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWFyY2hUaW1lb3V0XT1cIjIwMFwiXHJcbiAgICAgICAgICAgICAgICAgIFttaW5TZWFyY2hMZW5ndGhdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93RGF0YUJlZm9yZVNlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwic2VsZWN0ZWRDdXN0b21lckNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0tlb3BzOjpTZWxlY3RBbk9wdGlvbicgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkdla2FwJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWFtb3VudC1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJnZWthcFwiXHJcbiAgICAgICAgICAgICAgICAgIFsoY3VycmVuY3kpXT1cImdla2FwQ3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGliLWFtb3VudC1jdXJyZW5jeS1pbnB1dD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkdlbmVyYWxRdW90YScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJnZW5lcmFsUXVvdGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj57eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpVbml0OlRvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlByb21vdGlvbmFsUXVvdGEnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvbW90aW9uYWxRdW90YVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlVuaXQ6VG9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6UmF3T2lsUHJpY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItYW1vdW50LWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhd09pbFByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgWyhjdXJyZW5jeSldPVwicmF3T2lsQ3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGliLWFtb3VudC1jdXJyZW5jeS1pbnB1dD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgY2xhc3M9XCJuYXYtdGFic1wiIFtkZXN0cm95T25IaWRlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICA8bGkgbmdiTmF2SXRlbT5cclxuICAgICAgICAgICAgPGEgbmdiTmF2TGluaz57eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpUYWI6Q29zdFBhcmFtZXRlcnMnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8bGliLXByaWNlLXBhcmFtZXRlci1jb3N0LWl0ZW1zLXRhYiBbY29zdEl0ZW1zXT1cImNvc3RJdGVtc1wiIFtpdGVtc0FycmF5XT1cIml0ZW1zQXJyYXlcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wcmljZS1wYXJhbWV0ZXItY29zdC1pdGVtcy10YWI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtPlxyXG4gICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPnt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlRhYjpQcmljZUxpc3RzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGxpYi1wcmljZS1wYXJhbWV0ZXItcHJpY2UtbGlzdHMtdGFiXHJcbiAgICAgICAgICAgICAgICBbY3BSZWdpb25Db2RlXT1cInNlbGVjdGVkUmVnaW9uQ29kZVwiXHJcbiAgICAgICAgICAgICAgICBbcHBUeXBlQ29kZV09XCJzZWxlY3RlZFR5cGVDb2RlXCJcclxuICAgICAgICAgICAgICA+PC9saWItcHJpY2UtcGFyYW1ldGVyLXByaWNlLWxpc3RzLXRhYj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VGFiOkl0ZW1zJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGxpYi1wcmljZS1wYXJhbWV0ZXItaXRlbXMtdGFiXHJcbiAgICAgICAgICAgICAgICBbY3BSZWdpb25Db2RlXT1cInNlbGVjdGVkUmVnaW9uQ29kZVwiXHJcbiAgICAgICAgICAgICAgICBbY3BHcm91cENvZGVdPVwic2VsZWN0ZWRHcm91cENvZGVcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1wcmljZS1wYXJhbWV0ZXItaXRlbXMtdGFiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICA8bGkgbmdiTmF2SXRlbT5cclxuICAgICAgICAgICAgPGEgbmdiTmF2TGluaz57eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpUYWI6RGlzY291bnRzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGxpYi1wcmljZS1wYXJhbWV0ZXItZGlzY291bnQtcmF0ZXMtdGFiIFtkaXNjb3VudHNBcnJheV09XCJkaXNjb3VudHNBcnJheVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXByaWNlLXBhcmFtZXRlci1kaXNjb3VudC1yYXRlcy10YWI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==
|
|
318
|
+
args: [{ selector: 'lib-price-parameter-form', template: "<abp-page>\r\n <abp-page-title-container class=\"col-auto\">\r\n <h1 class=\"content-header-title\">\r\n {{ title | abpLocalization }}\r\n <small style=\"font-size: 0.85rem; font-weight: 400\">\r\n <a href=\"javascript:void(0)\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-circle-left\"></i>\r\n {{ 'Keops::PriceParameters:BackToList' | abpLocalization }}</a\r\n >\r\n </small>\r\n </h1>\r\n </abp-page-title-container>\r\n\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"btn-group\" role=\"group\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form?.invalid || saving || updatingPrices\"\r\n (click)=\"save()\"\r\n >\r\n <span *ngIf=\"saving\" class=\"spinner-border spinner-border-sm me-1\"></span>\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </button>\r\n\r\n <div ngbDropdown class=\"d-inline-block\" container=\"body\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-primary dropdown-toggle-split\"\r\n ngbDropdownToggle\r\n [disabled]=\"form?.invalid || saving || updatingPrices\"\r\n >\r\n <span class=\"visually-hidden\">{{ 'AbpUi::Actions' | abpLocalization }}</span>\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"saveAndUpdatePriceList()\">\r\n <span *ngIf=\"updatingPrices\" class=\"spinner-border spinner-border-sm me-1\"></span>\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'Keops::PriceParameters:SaveAndUpdatePriceList' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header d-flex justify-content-between align-items-center\">\r\n <small class=\"text-muted\" *ngIf=\"editMode\">\r\n {{ 'Keops::PriceParameters:DocNum' | abpLocalization }}: {{ current?.docNum ?? '-' }} \u00B7\r\n {{ 'Keops::PriceParameters:DocDate' | abpLocalization }}:\r\n {{ (current?.docDate | shortDate) ?? '-' }}\r\n </small>\r\n <small class=\"text-muted ms-auto\">\r\n {{ 'Keops::PriceParameters:SystemRates' | abpLocalization }}: USD\r\n {{ systemRateUsd | number }} \u00B7 EUR {{ systemRateEur | number }}\r\n </small>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Type' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"typeCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let type of typeOptions\" [ngValue]=\"type.code\">\r\n {{ type.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Region' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"region\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let region of regionOptions\" [ngValue]=\"region.value\">\r\n {{ region.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Group' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"groupCode\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let group of groupOptions\" [ngValue]=\"group.code\">\r\n {{ group.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:ExchangeRates' | abpLocalization }}\r\n </label>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">USD</span>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"exchangeRateUsd\" />\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">EUR</span>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"exchangeRateEur\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:StartDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"fromDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:EndDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-date-box\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"toDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:SalesPriceExcludingPackaging' | abpLocalization }}\r\n </label>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">USD</span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [value]=\"salesPriceExcludingPackagingUsd | number: '1.2-2'\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">TRY</span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [value]=\"salesPriceExcludingPackagingTry | number: '1.2-2'\"\r\n readonly\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-lg-6\">\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Status' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-8\">\r\n <select class=\"form-select\" formControlName=\"status\">\r\n <option [ngValue]=\"null\" disabled hidden>\r\n {{ 'Keops::SelectAnOption' | abpLocalization }}\r\n </option>\r\n <option *ngFor=\"let opt of statusOptions\" [ngValue]=\"opt.value\">\r\n {{ opt.label | abpLocalization }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:CustomerCode' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <dx-select-box\r\n [dataSource]=\"businessPartnersDataSource\"\r\n valueExpr=\"cardCode\"\r\n [displayExpr]=\"customerDisplayExpr\"\r\n [searchEnabled]=\"true\"\r\n [searchExpr]=\"['cardCode', 'cardName']\"\r\n searchMode=\"contains\"\r\n [searchTimeout]=\"200\"\r\n [minSearchLength]=\"0\"\r\n [showDataBeforeSearch]=\"true\"\r\n [showClearButton]=\"true\"\r\n [(value)]=\"selectedCustomerCode\"\r\n [placeholder]=\"'Keops::SelectAnOption' | abpLocalization\"\r\n ></dx-select-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Gekap' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"gekap\"\r\n [(currency)]=\"gekapCurrency\"\r\n [currencyOptions]=\"tryUsdCurrencyOptions\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:GeneralQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"generalQuota\" />\r\n <span class=\"input-group-text\">{{\r\n 'Keops::PriceParameters:Unit:Ton' | abpLocalization\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:PromotionalQuota' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <div class=\"input-group\">\r\n <input type=\"number\" class=\"form-control\" formControlName=\"promotionalQuota\" />\r\n <span class=\"input-group-text\">{{\r\n 'Keops::PriceParameters:Unit:Ton' | abpLocalization\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:RawOilPrice' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <lib-amount-currency-input\r\n formControlName=\"rawOilPrice\"\r\n [(currency)]=\"rawOilCurrency\"\r\n [currencyOptions]=\"tryUsdCurrencyOptions\"\r\n (currencyChange)=\"recalcSalesPriceExcludingPackaging()\"\r\n ></lib-amount-currency-input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row align-items-center mb-3\">\r\n <label class=\"col-4 col-form-label\">\r\n {{ 'Keops::PriceParameters:Description' | abpLocalization }}\r\n </label>\r\n <div class=\"col-8\">\r\n <textarea class=\"form-control\" rows=\"2\" formControlName=\"description\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\" [destroyOnHide]=\"false\">\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:CostParameters' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-cost-items-tab [costItems]=\"costItems\" [itemsArray]=\"itemsArray\">\r\n </lib-price-parameter-cost-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:PriceLists' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-price-lists-tab\r\n [businessRegion]=\"selectedRegion\"\r\n [ppTypeCode]=\"selectedTypeCode\"\r\n ></lib-price-parameter-price-lists-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Items' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-items-tab\r\n [businessRegion]=\"selectedRegion\"\r\n [cpGroupCode]=\"selectedGroupCode\"\r\n ></lib-price-parameter-items-tab>\r\n </ng-template>\r\n </li>\r\n\r\n <li ngbNavItem>\r\n <a ngbNavLink>{{ 'Keops::PriceParameters:Tab:Discounts' | abpLocalization }}</a>\r\n <ng-template ngbNavContent>\r\n <lib-price-parameter-discount-rates-tab [discountsArray]=\"discountsArray\">\r\n </lib-price-parameter-discount-rates-tab>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n </form>\r\n</abp-page>\r\n" }]
|
|
319
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.ToasterService }, { type: i4.PriceParameterService }, { type: i5.PriceParameterFormDataService }, { type: i6.PriceParameterCostMatchService }, { type: i7.CostItemRowsBuilder }, { type: i8.PriceParameterPriceUpdateService }]; } });
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9wcmljZS1wYXJhbWV0ZXJzL2NvbXBvbmVudHMvcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9wcmljZS1wYXJhbWV0ZXJzL2NvbXBvbmVudHMvcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBS0wsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixRQUFRLEVBTVIsb0JBQW9CLEdBQ3JCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRCxNQUFNLGFBQWEsR0FBRztJQUNwQixv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dCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IERhdGFTb3VyY2UgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2RhdGFfc291cmNlJztcclxuaW1wb3J0IHtcclxuICBQcmljZVBhcmFtZXRlclNlcnZpY2UsXHJcbiAgQnVzaW5lc3NQYXJ0bmVyRHRvLFxyXG4gIEJ1c2luZXNzUmVnaW9uLFxyXG4gIENvc3RJdGVtRHRvLFxyXG4gIENvc3RJdGVtU3lzdGVtQ29kZSxcclxuICBDb3N0R3JvdXBSb2xlLFxyXG4gIEN1cnJlbmN5LFxyXG4gIENvc3RQYXJhbWV0ZXJDYXRlZ29yeUR0byxcclxuICBQcmljZVBhcmFtZXRlclR5cGVMb29rdXBEdG8sXHJcbiAgUHJpY2VQYXJhbWV0ZXJEdG8sXHJcbiAgUHJpY2VQYXJhbWV0ZXJEaXNjb3VudER0byxcclxuICBDb3N0UGFyYW1ldGVySXRlbUR0byxcclxuICBQcmljZVBhcmFtZXRlclN0YXR1cyxcclxufSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcbmltcG9ydCB7IHN0YXR1c0xhYmVscyB9IGZyb20gJy4uL3ByaWNlLXBhcmFtZXRlci1sMTBuLWhlbHBlcic7XHJcbmltcG9ydCB7IFByaWNlUGFyYW1ldGVyRm9ybURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vcHJpY2UtcGFyYW1ldGVyLWZvcm0tZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJpY2VQYXJhbWV0ZXJDb3N0TWF0Y2hTZXJ2aWNlIH0gZnJvbSAnLi4vcHJpY2UtcGFyYW1ldGVyLWNvc3QtbWF0Y2guc2VydmljZSc7XHJcbmltcG9ydCB7IFByaWNlUGFyYW1ldGVyUHJpY2VVcGRhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vcHJpY2UtcGFyYW1ldGVyLXByaWNlLXVwZGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ1VSUkVOQ1lfT1BUSU9OUywgQ1VSUkVOQ1lfT1BUSU9OU19UUllfVVNEIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY3VycmVuY3kudXRpbHMnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19SRUdJT05fT1BUSU9OUyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2J1c2luZXNzLXJlZ2lvbi51dGlscyc7XHJcbmltcG9ydCB7IGlzUmF0ZUNvc3RJdGVtLCBpc0N1c3RvbUNvc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Nvc3QtaXRlbS1jbGFzc2lmaWNhdGlvbi51dGlscyc7XHJcbmltcG9ydCB7IENvc3RJdGVtUm93c0J1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29zdC1pdGVtLXJvd3MuYnVpbGRlcic7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3QgfSBmcm9tICcuLi8uLi9jb3N0LWNhbGN1bGF0aW9uL2VuZ2luZSc7XHJcbmltcG9ydCB7IENvc3RDYWxjdWxhdGlvbkl0ZW0sIENvc3RDYWxjdWxhdGlvblN0YWdlIH0gZnJvbSAnLi4vLi4vY29zdC1jYWxjdWxhdGlvbi9jb3N0LWNhbGN1bGF0aW9uLm1vZGVscyc7XHJcbmltcG9ydCB7IHBhcnNlRGVjaW1hbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL251bWJlci51dGlscyc7XHJcblxyXG5jb25zdCBzdGF0dXNPcHRpb25zID0gW1xyXG4gIFByaWNlUGFyYW1ldGVyU3RhdHVzLkluUHJvZ3Jlc3MsXHJcbiAgUHJpY2VQYXJhbWV0ZXJTdGF0dXMuQWN0aXZlLFxyXG4gIFByaWNlUGFyYW1ldGVyU3RhdHVzLlBhc3NpdmUsXHJcbl0ubWFwKHZhbHVlID0+ICh7IHZhbHVlLCBsYWJlbDogc3RhdHVzTGFiZWxzW3ZhbHVlXSB9KSk7XHJcblxyXG5jb25zdCBERUZBVUxUX0RJU0NPVU5UX1JPV1MgPSAxMDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByaWNlLXBhcmFtZXRlci1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJpY2UtcGFyYW1ldGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpY2VQYXJhbWV0ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVkaXRNb2RlID0gZmFsc2U7XHJcbiAgZG9jRW50cnk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnQ6IFByaWNlUGFyYW1ldGVyRHRvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvc3RJdGVtczogQ29zdEl0ZW1EdG9bXSA9IFtdO1xyXG4gIHByaXZhdGUgYWxsQ29zdEl0ZW1zOiBDb3N0SXRlbUR0b1tdID0gW107XHJcbiAgdHlwZU9wdGlvbnM6IFByaWNlUGFyYW1ldGVyVHlwZUxvb2t1cER0b1tdID0gW107XHJcbiAgZ3JvdXBPcHRpb25zOiBDb3N0UGFyYW1ldGVyQ2F0ZWdvcnlEdG9bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IHJlZ2lvbk9wdGlvbnMgPSBCVVNJTkVTU19SRUdJT05fT1BUSU9OUztcclxuXHJcbiAgcHJpdmF0ZSBhdXRvQXBwbHlFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gIHVwZGF0aW5nUHJpY2VzID0gZmFsc2U7XHJcbiAgc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ1RyeSA9IDA7XHJcbiAgc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ1VzZCA9IDA7XHJcbiAgcHJpdmF0ZSBlZmZlY3RpdmVSYXRlVXNkID0gMDtcclxuICBwcml2YXRlIGVmZmVjdGl2ZVJhdGVFdXIgPSAwO1xyXG5cclxuICBzeXN0ZW1SYXRlVXNkID0gMDtcclxuICBzeXN0ZW1SYXRlRXVyID0gMDtcclxuXHJcbiAgYnVzaW5lc3NQYXJ0bmVyc0RhdGFTb3VyY2U6IERhdGFTb3VyY2UgfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3RlZEN1c3RvbWVyQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZ2VrYXBDdXJyZW5jeTogQ3VycmVuY3kgPSBDdXJyZW5jeS5UUlk7XHJcbiAgcmF3T2lsQ3VycmVuY3k6IEN1cnJlbmN5ID0gQ3VycmVuY3kuVVNEO1xyXG5cclxuICByZWFkb25seSBzdGF0dXNPcHRpb25zID0gc3RhdHVzT3B0aW9ucztcclxuICByZWFkb25seSBjdXJyZW5jeU9wdGlvbnMgPSBDVVJSRU5DWV9PUFRJT05TO1xyXG4gIHJlYWRvbmx5IHRyeVVzZEN1cnJlbmN5T3B0aW9ucyA9IENVUlJFTkNZX09QVElPTlNfVFJZX1VTRDtcclxuXHJcbiAgcmVhZG9ubHkgY3VzdG9tZXJEaXNwbGF5RXhwciA9IChjOiBCdXNpbmVzc1BhcnRuZXJEdG8gfCBudWxsKTogc3RyaW5nID0+XHJcbiAgICBjID8gYCR7Yy5jYXJkQ29kZX0gLSAke2MuY2FyZE5hbWV9YCA6ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2FzdGVyOiBUb2FzdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogUHJpY2VQYXJhbWV0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtRGF0YVNlcnZpY2U6IFByaWNlUGFyYW1ldGVyRm9ybURhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3N0TWF0Y2hTZXJ2aWNlOiBQcmljZVBhcmFtZXRlckNvc3RNYXRjaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvd3NCdWlsZGVyOiBDb3N0SXRlbVJvd3NCdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmljZVVwZGF0ZVNlcnZpY2U6IFByaWNlUGFyYW1ldGVyUHJpY2VVcGRhdGVTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkb2NFbnRyeVBhcmFtID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2RvY0VudHJ5Jyk7XHJcbiAgICB0aGlzLmRvY0VudHJ5ID0gZG9jRW50cnlQYXJhbSAhPSBudWxsID8gTnVtYmVyKGRvY0VudHJ5UGFyYW0pIDogbnVsbDtcclxuICAgIHRoaXMuZWRpdE1vZGUgPSB0aGlzLmRvY0VudHJ5ICE9IG51bGwgJiYgIU51bWJlci5pc05hTih0aGlzLmRvY0VudHJ5KTtcclxuXHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdHlwZUNvZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByZWdpb246IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBncm91cENvZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBleGNoYW5nZVJhdGVVc2Q6IFswXSxcclxuICAgICAgZXhjaGFuZ2VSYXRlRXVyOiBbMF0sXHJcbiAgICAgIGZyb21EYXRlOiBbeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRoaXMuZWRpdE1vZGUgfSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgdG9EYXRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc3RhdHVzOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZGVzY3JpcHRpb246IFtudWxsLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU0KV1dLFxyXG4gICAgICBjdXN0b21lckNvZGU6IFtudWxsXSxcclxuICAgICAgZ2VrYXA6IFswXSxcclxuICAgICAgZ2VuZXJhbFF1b3RhOiBbMF0sXHJcbiAgICAgIHByb21vdGlvbmFsUXVvdGE6IFswXSxcclxuICAgICAgcmF3T2lsUHJpY2U6IFswXSxcclxuICAgICAgaXRlbXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBkaXNjb3VudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseURpc2NvdW50cyhudWxsKTtcclxuXHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdyZWdpb24nKSEudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ29tYmluYXRpb25DaGFuZ2UoKSk7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdncm91cENvZGUnKSEudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ29tYmluYXRpb25DaGFuZ2UoKSk7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdyYXdPaWxQcmljZScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMucmVjYWxjU2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZygpLFxyXG4gICAgKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2V4Y2hhbmdlUmF0ZVVzZCcpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMucmVjYWxjU2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZygpLFxyXG4gICAgKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2V4Y2hhbmdlUmF0ZUV1cicpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMucmVjYWxjU2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZygpLFxyXG4gICAgKTtcclxuICAgIHRoaXMuaXRlbXNBcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVjYWxjU2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZygpKTtcclxuXHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtc0FycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzY291bnRzQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdkaXNjb3VudHMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRNb2RlXHJcbiAgICAgID8gJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RWRpdFRpdGxlJ1xyXG4gICAgICA6ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkNyZWF0ZVRpdGxlJztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFJlZ2lvbigpOiBCdXNpbmVzc1JlZ2lvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KCdyZWdpb24nKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFR5cGVDb2RlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KCd0eXBlQ29kZScpPy52YWx1ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkR3JvdXBDb2RlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KCdncm91cENvZGUnKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGlzUmF0ZSA9IGlzUmF0ZUNvc3RJdGVtO1xyXG4gIHJlYWRvbmx5IGlzQ3VzdG9tID0gaXNDdXN0b21Db3N0SXRlbTtcclxuXHJcbiAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2VvcHMvY29zdC9wcmljZS1wYXJhbWV0ZXJzJ10pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShhbmRVcGRhdGVQcmljZUxpc3QgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB7XHJcbiAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICBjdXN0b21lckNvZGU6IHRoaXMuc2VsZWN0ZWRDdXN0b21lckNvZGUsXHJcbiAgICAgIGdla2FwQ3VycmVuY3k6IHRoaXMuZ2VrYXBDdXJyZW5jeSxcclxuICAgICAgcmF3T2lsQ3VycmVuY3k6IHRoaXMucmF3T2lsQ3VycmVuY3ksXHJcbiAgICAgIGl0ZW1zOiB0aGlzLnJvd3NCdWlsZGVyLnRvSW5wdXQodGhpcy5pdGVtc0FycmF5KSxcclxuICAgICAgZGlzY291bnRzOiB0aGlzLmRpc2NvdW50c0FycmF5LmNvbnRyb2xzXHJcbiAgICAgICAgLm1hcChncm91cCA9PiBncm91cC52YWx1ZSlcclxuICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnNhbGVzRW1wbG95ZWVDb2RlICE9IG51bGwpXHJcbiAgICAgICAgLm1hcCh2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgc2FsZXNFbXBsb3llZUNvZGU6IHZhbHVlLnNhbGVzRW1wbG95ZWVDb2RlLFxyXG4gICAgICAgICAgcmF0ZTogdmFsdWUucmF0ZSxcclxuICAgICAgICB9KSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3QkID0gdGhpcy5lZGl0TW9kZVxyXG4gICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5kb2NFbnRyeSEsIGlucHV0KVxyXG4gICAgICA6IHRoaXMuc2VydmljZS5jcmVhdGUoaW5wdXQpO1xyXG5cclxuICAgIHJlcXVlc3QkLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuc2F2aW5nID0gZmFsc2UpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKCdBYnBVaTo6U3VjY2Vzc2Z1bGx5U2F2ZWQnKTtcclxuICAgICAgICBpZiAoYW5kVXBkYXRlUHJpY2VMaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVByaWNlTGlzdCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUFuZFVwZGF0ZVByaWNlTGlzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybURhdGFTZXJ2aWNlLmxvYWQodGhpcy5lZGl0TW9kZSA/IHRoaXMuZG9jRW50cnkgOiBudWxsKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSBkYXRhLnR5cGVPcHRpb25zO1xyXG4gICAgICB0aGlzLmdyb3VwT3B0aW9ucyA9IGRhdGEuZ3JvdXBPcHRpb25zO1xyXG4gICAgICB0aGlzLmJ1c2luZXNzUGFydG5lcnNEYXRhU291cmNlID0gZGF0YS5idXNpbmVzc1BhcnRuZXJzRGF0YVNvdXJjZTtcclxuICAgICAgdGhpcy5hbGxDb3N0SXRlbXMgPSBkYXRhLmNvc3RJdGVtcztcclxuICAgICAgdGhpcy5zeXN0ZW1SYXRlVXNkID0gZGF0YS5zeXN0ZW1SYXRlVXNkO1xyXG4gICAgICB0aGlzLnN5c3RlbVJhdGVFdXIgPSBkYXRhLnN5c3RlbVJhdGVFdXI7XHJcblxyXG4gICAgICBpZiAoZGF0YS5jdXJyZW50KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZGF0YS5jdXJyZW50O1xyXG4gICAgICAgIHRoaXMucGF0Y2hGcm9tQ3VycmVudChkYXRhLmN1cnJlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIGV4Y2hhbmdlUmF0ZVVzZDogdGhpcy5zeXN0ZW1SYXRlVXNkLFxyXG4gICAgICAgICAgZXhjaGFuZ2VSYXRlRXVyOiB0aGlzLnN5c3RlbVJhdGVFdXIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRvQXBwbHlFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhdGNoRnJvbUN1cnJlbnQoZHRvOiBQcmljZVBhcmFtZXRlckR0byk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlQ29kZTogZHRvLnR5cGVDb2RlID8/IG51bGwsXHJcbiAgICAgICAgcmVnaW9uOiBkdG8ucmVnaW9uID8/IG51bGwsXHJcbiAgICAgICAgZ3JvdXBDb2RlOiBkdG8uZ3JvdXBDb2RlID8/IG51bGwsXHJcbiAgICAgICAgZXhjaGFuZ2VSYXRlVXNkOiBkdG8uZXhjaGFuZ2VSYXRlVXNkID8/IDAsXHJcbiAgICAgICAgZXhjaGFuZ2VSYXRlRXVyOiBkdG8uZXhjaGFuZ2VSYXRlRXVyID8/IDAsXHJcbiAgICAgICAgZnJvbURhdGU6IHRoaXMudG9EYXRlSW5wdXQoZHRvLmZyb21EYXRlKSxcclxuICAgICAgICB0b0RhdGU6IHRoaXMudG9EYXRlSW5wdXQoZHRvLnRvRGF0ZSksXHJcbiAgICAgICAgc3RhdHVzOiBkdG8uc3RhdHVzID8/IFByaWNlUGFyYW1ldGVyU3RhdHVzLkFjdGl2ZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogZHRvLmRlc2NyaXB0aW9uID8/IG51bGwsXHJcbiAgICAgICAgY3VzdG9tZXJDb2RlOiBkdG8uY3VzdG9tZXJDb2RlID8/IG51bGwsXHJcbiAgICAgICAgZ2VrYXA6IGR0by5nZWthcCA/PyAwLFxyXG4gICAgICAgIGdlbmVyYWxRdW90YTogZHRvLmdlbmVyYWxRdW90YSA/PyAwLFxyXG4gICAgICAgIHByb21vdGlvbmFsUXVvdGE6IGR0by5wcm9tb3Rpb25hbFF1b3RhID8/IDAsXHJcbiAgICAgICAgcmF3T2lsUHJpY2U6IGR0by5yYXdPaWxQcmljZSA/PyAwLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfSxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEN1c3RvbWVyQ29kZSA9IGR0by5jdXN0b21lckNvZGUgPz8gbnVsbDtcclxuICAgIHRoaXMuZ2VrYXBDdXJyZW5jeSA9IGR0by5nZWthcEN1cnJlbmN5ID8/IEN1cnJlbmN5LlRSWTtcclxuICAgIHRoaXMucmF3T2lsQ3VycmVuY3kgPSBkdG8ucmF3T2lsQ3VycmVuY3kgPz8gQ3VycmVuY3kuVVNEO1xyXG5cclxuICAgIHRoaXMuYXBwbHlJdGVtcyhkdG8uaXRlbXMpO1xyXG4gICAgdGhpcy5hcHBseURpc2NvdW50cyhkdG8uZGlzY291bnRzKTtcclxuICAgIHRoaXMuYXV0b0FwcGx5RW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RGlzY291bnRzKFxyXG4gICAgc291cmNlOiBSZWFkb25seUFycmF5PFByaWNlUGFyYW1ldGVyRGlzY291bnREdG8+IHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzY291bnRzQXJyYXkuY2xlYXIoKTtcclxuICAgIGZvciAoY29uc3QgZGlzY291bnQgb2Ygc291cmNlID8/IFtdKSB7XHJcbiAgICAgIHRoaXMuZGlzY291bnRzQXJyYXkucHVzaChcclxuICAgICAgICB0aGlzLmNyZWF0ZURpc2NvdW50Um93KFxyXG4gICAgICAgICAgZGlzY291bnQuc2FsZXNFbXBsb3llZUNvZGUgPz8gbnVsbCxcclxuICAgICAgICAgIGRpc2NvdW50LnNhbGVzRW1wbG95ZWVOYW1lID8/IG51bGwsXHJcbiAgICAgICAgICBkaXNjb3VudC5yYXRlID8/IG51bGwsXHJcbiAgICAgICAgKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5kaXNjb3VudHNBcnJheS5sZW5ndGggPCBERUZBVUxUX0RJU0NPVU5UX1JPV1MpIHtcclxuICAgICAgdGhpcy5kaXNjb3VudHNBcnJheS5wdXNoKHRoaXMuY3JlYXRlRGlzY291bnRSb3cobnVsbCwgbnVsbCwgbnVsbCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNjb3VudFJvdyhcclxuICAgIHNhbGVzRW1wbG95ZWVDb2RlOiBudW1iZXIgfCBudWxsLFxyXG4gICAgc2FsZXNFbXBsb3llZU5hbWU6IHN0cmluZyB8IG51bGwsXHJcbiAgICByYXRlOiBudW1iZXIgfCBudWxsLFxyXG4gICk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNhbGVzRW1wbG95ZWVDb2RlOiBbc2FsZXNFbXBsb3llZUNvZGVdLFxyXG4gICAgICBzYWxlc0VtcGxveWVlTmFtZTogW3NhbGVzRW1wbG95ZWVOYW1lXSxcclxuICAgICAgcmF0ZTogW3JhdGVdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5SXRlbXMoc291cmNlOiBSZWFkb25seUFycmF5PENvc3RQYXJhbWV0ZXJJdGVtRHRvPiB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY29zdEl0ZW1zID0gdGhpcy5hbGxDb3N0SXRlbXM7XHJcbiAgICB0aGlzLnJvd3NCdWlsZGVyLmJ1aWxkKHRoaXMuaXRlbXNBcnJheSwgdGhpcy5jb3N0SXRlbXMsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnJlY2FsY1NhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29zdEl0ZW1zID0gW107XHJcbiAgICB0aGlzLml0ZW1zQXJyYXkuY2xlYXIoKTtcclxuICAgIHRoaXMucmVjYWxjU2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlY2FsY1NhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmcoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpdGVtczogQ29zdENhbGN1bGF0aW9uSXRlbVtdID0gdGhpcy5pdGVtc0FycmF5LmNvbnRyb2xzLm1hcCgoY29udHJvbCwgaSkgPT4ge1xyXG4gICAgICBjb25zdCByYXcgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5jb3N0SXRlbXNbaV07XHJcbiAgICAgIGNvbnN0IGlzUGFja2FnaW5nID0gbWV0YT8uc3lzdGVtQ29kZSA9PT0gQ29zdEl0ZW1TeXN0ZW1Db2RlLlBhY2thZ2luZztcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3N0SXRlbUNvZGU6IHJhdy5jb3N0SXRlbUNvZGUsXHJcbiAgICAgICAgY29zdEl0ZW1OYW1lOiBtZXRhPy5uYW1lID8/IHJhdy5jb3N0SXRlbUNvZGUsXHJcbiAgICAgICAgY2FsY3VsYXRpb25UeXBlOiByYXcuY2FsY3VsYXRpb25UeXBlLFxyXG4gICAgICAgIHN5c3RlbUNvZGU6IG1ldGE/LnN5c3RlbUNvZGUgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbmN5OiByYXcuY3VycmVuY3ksXHJcbiAgICAgICAgdmFsdWU6IGlzUGFja2FnaW5nID8gMCA6IHBhcnNlRGVjaW1hbChyYXcudmFsdWUpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3RhZ2U6IENvc3RDYWxjdWxhdGlvblN0YWdlID0ge1xyXG4gICAgICBncm91cENvZGU6ICcnLFxyXG4gICAgICBncm91cE5hbWU6ICcnLFxyXG4gICAgICBkaXNwbGF5T3JkZXI6IDAsXHJcbiAgICAgIGdyb3VwUm9sZTogQ29zdEdyb3VwUm9sZS5Ob25lLFxyXG4gICAgICBpdGVtcyxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmF0ZVVzZCA9IHBhcnNlRGVjaW1hbCh0aGlzLmZvcm0uZ2V0KCdleGNoYW5nZVJhdGVVc2QnKSEudmFsdWUpO1xyXG4gICAgY29uc3QgcmF0ZUV1ciA9IHBhcnNlRGVjaW1hbCh0aGlzLmZvcm0uZ2V0KCdleGNoYW5nZVJhdGVFdXInKSEudmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUNvc3Qoe1xyXG4gICAgICByYXdPaWxQcmljZTogcGFyc2VEZWNpbWFsKHRoaXMuZm9ybS5nZXQoJ3Jhd09pbFByaWNlJykhLnZhbHVlKSxcclxuICAgICAgcmF3T2lsQ3VycmVuY3k6IHRoaXMucmF3T2lsQ3VycmVuY3ksXHJcbiAgICAgIHJhdGVVc2QsXHJcbiAgICAgIHJhdGVFdXIsXHJcbiAgICAgIHN0YWdlczogW3N0YWdlXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ1RyeSA9IHJlc3VsdC50b3RhbFNhbGVQcmljZS50cnk7XHJcbiAgICB0aGlzLnNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmdVc2QgPSByZXN1bHQudG90YWxTYWxlUHJpY2UudXNkO1xyXG4gICAgdGhpcy5lZmZlY3RpdmVSYXRlVXNkID0gcmF0ZVVzZDtcclxuICAgIHRoaXMuZWZmZWN0aXZlUmF0ZUV1ciA9IHJhdGVFdXI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcmljZUxpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSZWdpb24gfHwgIXRoaXMuc2VsZWN0ZWRHcm91cENvZGUgfHwgIXRoaXMuc2VsZWN0ZWRUeXBlQ29kZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGluZ1ByaWNlcyA9IHRydWU7XHJcbiAgICB0aGlzLnByaWNlVXBkYXRlU2VydmljZVxyXG4gICAgICAudXBkYXRlRnJvbVZhbHVlcyh7XHJcbiAgICAgICAgcmVnaW9uOiB0aGlzLnNlbGVjdGVkUmVnaW9uLFxyXG4gICAgICAgIGdyb3VwQ29kZTogdGhpcy5zZWxlY3RlZEdyb3VwQ29kZSxcclxuICAgICAgICB0eXBlQ29kZTogdGhpcy5zZWxlY3RlZFR5cGVDb2RlLFxyXG4gICAgICAgIHNhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmdUcnk6IHRoaXMuc2FsZXNQcmljZUV4Y2x1ZGluZ1BhY2thZ2luZ1RyeSxcclxuICAgICAgICByYXRlVXNkOiB0aGlzLmVmZmVjdGl2ZVJhdGVVc2QsXHJcbiAgICAgICAgcmF0ZUV1cjogdGhpcy5lZmZlY3RpdmVSYXRlRXVyLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy51cGRhdGluZ1ByaWNlcyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Db21iaW5hdGlvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hdXRvQXBwbHlFbmFibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmZvcm0uZ2V0KCdyZWdpb24nKSEudmFsdWU7XHJcbiAgICBjb25zdCBncm91cENvZGUgPSB0aGlzLmZvcm0uZ2V0KCdncm91cENvZGUnKSEudmFsdWU7XHJcblxyXG4gICAgaWYgKCFyZWdpb24gfHwgIWdyb3VwQ29kZSkge1xyXG4gICAgICB0aGlzLmNsZWFySXRlbXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29zdE1hdGNoU2VydmljZS5maW5kTWF0Y2gocmVnaW9uLCBncm91cENvZGUpLnN1YnNjcmliZShtYXRjaCA9PiB7XHJcbiAgICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICB0aGlzLmNsZWFySXRlbXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYXBwbHlJdGVtcyhtYXRjaC5pdGVtcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9EYXRlSW5wdXQodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxMCk7XHJcbiAgfVxyXG59XHJcbiIsIjxhYnAtcGFnZT5cclxuICA8YWJwLXBhZ2UtdGl0bGUtY29udGFpbmVyIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgIDxoMSBjbGFzcz1cImNvbnRlbnQtaGVhZGVyLXRpdGxlXCI+XHJcbiAgICAgIHt7IHRpdGxlIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDxzbWFsbCBzdHlsZT1cImZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDQwMFwiPlxyXG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLWxlZnRcIj48L2k+XHJcbiAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpCYWNrVG9MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvYVxyXG4gICAgICAgID5cclxuICAgICAgPC9zbWFsbD5cclxuICAgIDwvaDE+XHJcbiAgPC9hYnAtcGFnZS10aXRsZS1jb250YWluZXI+XHJcblxyXG4gIDxhYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lciBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtPy5pbnZhbGlkIHx8IHNhdmluZyB8fCB1cGRhdGluZ1ByaWNlc1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNhdmluZ1wiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2F2ZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiBjb250YWluZXI9XCJib2R5XCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGUtc3BsaXRcIlxyXG4gICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZVxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybT8uaW52YWxpZCB8fCBzYXZpbmcgfHwgdXBkYXRpbmdQcmljZXNcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7ICdBYnBVaTo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51PlxyXG4gICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2F2ZUFuZFVwZGF0ZVByaWNlTGlzdCgpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1cGRhdGluZ1ByaWNlc1wiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNhdmUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpTYXZlQW5kVXBkYXRlUHJpY2VMaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gIDxmb3JtICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgKm5nSWY9XCJlZGl0TW9kZVwiPlxyXG4gICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RG9jTnVtJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgY3VycmVudD8uZG9jTnVtID8/ICctJyB9fSDCt1xyXG4gICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RG9jRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX06XHJcbiAgICAgICAgICB7eyAoY3VycmVudD8uZG9jRGF0ZSB8IHNob3J0RGF0ZSkgPz8gJy0nIH19XHJcbiAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIG1zLWF1dG9cIj5cclxuICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlN5c3RlbVJhdGVzJyB8IGFicExvY2FsaXphdGlvbiB9fTogVVNEXHJcbiAgICAgICAgICB7eyBzeXN0ZW1SYXRlVXNkIHwgbnVtYmVyIH19IMK3IEVVUiB7eyBzeXN0ZW1SYXRlRXVyIHwgbnVtYmVyIH19XHJcbiAgICAgICAgPC9zbWFsbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VHlwZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlQ29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIiBkaXNhYmxlZCBoaWRkZW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpTZWxlY3RBbk9wdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgdHlwZU9wdGlvbnNcIiBbbmdWYWx1ZV09XCJ0eXBlLmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0eXBlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlJlZ2lvbicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWdpb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgZGlzYWJsZWQgaGlkZGVuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6U2VsZWN0QW5PcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCByZWdpb24gb2YgcmVnaW9uT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cInJlZ2lvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJlZ2lvbi5sYWJlbCB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6R3JvdXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIGRpc2FibGVkIGhpZGRlbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlNlbGVjdEFuT3B0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBPcHRpb25zXCIgW25nVmFsdWVdPVwiZ3JvdXAuY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOkV4Y2hhbmdlUmF0ZXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj5VU0Q8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJleGNoYW5nZVJhdGVVc2RcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+RVVSPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZXhjaGFuZ2VSYXRlRXVyXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6U3RhcnREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXRlXCJcclxuICAgICAgICAgICAgICAgID48L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RW5kRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBkYXRlU2VyaWFsaXphdGlvbkZvcm1hdD1cInl5eXktTU0tZGRcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0b0RhdGVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpTYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+VVNEPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nVXNkIHwgbnVtYmVyOiAnMS4yLTInXCJcclxuICAgICAgICAgICAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+VFJZPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzYWxlc1ByaWNlRXhjbHVkaW5nUGFja2FnaW5nVHJ5IHwgbnVtYmVyOiAnMS4yLTInXCJcclxuICAgICAgICAgICAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlN0YXR1cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgZGlzYWJsZWQgaGlkZGVuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6U2VsZWN0QW5PcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2Ygc3RhdHVzT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cIm9wdC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdC5sYWJlbCB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6Q3VzdG9tZXJDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveFxyXG4gICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJidXNpbmVzc1BhcnRuZXJzRGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcj1cImNhcmRDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlFeHByXT1cImN1c3RvbWVyRGlzcGxheUV4cHJcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaEV4cHJdPVwiWydjYXJkQ29kZScsICdjYXJkTmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoTW9kZT1cImNvbnRhaW5zXCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaFRpbWVvdXRdPVwiMjAwXCJcclxuICAgICAgICAgICAgICAgICAgW21pblNlYXJjaExlbmd0aF09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dEYXRhQmVmb3JlU2VhcmNoXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJzZWxlY3RlZEN1c3RvbWVyQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2VvcHM6OlNlbGVjdEFuT3B0aW9uJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICA+PC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6R2VrYXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItYW1vdW50LWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdla2FwXCJcclxuICAgICAgICAgICAgICAgICAgWyhjdXJyZW5jeSldPVwiZ2VrYXBDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeU9wdGlvbnNdPVwidHJ5VXNkQ3VycmVuY3lPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgID48L2xpYi1hbW91bnQtY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpHZW5lcmFsUXVvdGEnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZ2VuZXJhbFF1b3RhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpVbml0OlRvbicgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTQgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlByb21vdGlvbmFsUXVvdGEnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvbW90aW9uYWxRdW90YVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VW5pdDpUb24nIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2VvcHM6OlByaWNlUGFyYW1ldGVyczpSYXdPaWxQcmljZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1hbW91bnQtY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmF3T2lsUHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICBbKGN1cnJlbmN5KV09XCJyYXdPaWxDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeU9wdGlvbnNdPVwidHJ5VXNkQ3VycmVuY3lPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbmN5Q2hhbmdlKT1cInJlY2FsY1NhbGVzUHJpY2VFeGNsdWRpbmdQYWNrYWdpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9saWItYW1vdW50LWN1cnJlbmN5LWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6RGVzY3JpcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIyXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8dWwgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBjbGFzcz1cIm5hdi10YWJzXCIgW2Rlc3Ryb3lPbkhpZGVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtPlxyXG4gICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPnt7ICdLZW9wczo6UHJpY2VQYXJhbWV0ZXJzOlRhYjpDb3N0UGFyYW1ldGVycycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2E+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgIDxsaWItcHJpY2UtcGFyYW1ldGVyLWNvc3QtaXRlbXMtdGFiIFtjb3N0SXRlbXNdPVwiY29zdEl0ZW1zXCIgW2l0ZW1zQXJyYXldPVwiaXRlbXNBcnJheVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXByaWNlLXBhcmFtZXRlci1jb3N0LWl0ZW1zLXRhYj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VGFiOlByaWNlTGlzdHMnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8bGliLXByaWNlLXBhcmFtZXRlci1wcmljZS1saXN0cy10YWJcclxuICAgICAgICAgICAgICAgIFtidXNpbmVzc1JlZ2lvbl09XCJzZWxlY3RlZFJlZ2lvblwiXHJcbiAgICAgICAgICAgICAgICBbcHBUeXBlQ29kZV09XCJzZWxlY3RlZFR5cGVDb2RlXCJcclxuICAgICAgICAgICAgICA+PC9saWItcHJpY2UtcGFyYW1ldGVyLXByaWNlLWxpc3RzLXRhYj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VGFiOkl0ZW1zJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGxpYi1wcmljZS1wYXJhbWV0ZXItaXRlbXMtdGFiXHJcbiAgICAgICAgICAgICAgICBbYnVzaW5lc3NSZWdpb25dPVwic2VsZWN0ZWRSZWdpb25cIlxyXG4gICAgICAgICAgICAgICAgW2NwR3JvdXBDb2RlXT1cInNlbGVjdGVkR3JvdXBDb2RlXCJcclxuICAgICAgICAgICAgICA+PC9saWItcHJpY2UtcGFyYW1ldGVyLWl0ZW1zLXRhYj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ0tlb3BzOjpQcmljZVBhcmFtZXRlcnM6VGFiOkRpc2NvdW50cycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2E+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgIDxsaWItcHJpY2UtcGFyYW1ldGVyLWRpc2NvdW50LXJhdGVzLXRhYiBbZGlzY291bnRzQXJyYXldPVwiZGlzY291bnRzQXJyYXlcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wcmljZS1wYXJhbWV0ZXItZGlzY291bnQtcmF0ZXMtdGFiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L2FicC1wYWdlPlxyXG4iXX0=
|