ngx-st-sap-bp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/base-interfaces.mjs +2 -0
  3. package/esm2020/lib/components/sap-bp-base-create-edit.mjs +488 -0
  4. package/esm2020/lib/components/sap-bp-create/sap-bp-create.component.mjs +64 -0
  5. package/esm2020/lib/components/sap-bp-create-address/sap-bp-create-address.component.mjs +206 -0
  6. package/esm2020/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.mjs +68 -0
  7. package/esm2020/lib/components/sap-bp-details/sap-bp-details.component.mjs +208 -0
  8. package/esm2020/lib/components/sap-bp-details-address/sap-bp-details-address.component.mjs +23 -0
  9. package/esm2020/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.mjs +23 -0
  10. package/esm2020/lib/components/sap-bp-edit/sap-bp-edit.component.mjs +111 -0
  11. package/esm2020/lib/components/sap-bp-list/sap-bp-list.component.mjs +111 -0
  12. package/esm2020/lib/components/sap-bp-list-address/sap-bp-list-address.component.mjs +235 -0
  13. package/esm2020/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.mjs +199 -0
  14. package/esm2020/lib/models/bp-tax-type.enum.mjs +7 -0
  15. package/esm2020/lib/models/sap-bp-addr-country.model.mjs +2 -0
  16. package/esm2020/lib/models/sap-bp-addr-sic-code.model.mjs +2 -0
  17. package/esm2020/lib/models/sap-bp-addr-state.model.mjs +2 -0
  18. package/esm2020/lib/models/sap-bp-address-dialog.model.mjs +2 -0
  19. package/esm2020/lib/models/sap-bp-address.model.mjs +2 -0
  20. package/esm2020/lib/models/sap-bp-contact-person.model.mjs +2 -0
  21. package/esm2020/lib/models/sap-bp-create.model.mjs +2 -0
  22. package/esm2020/lib/models/sap-bp-edit-auth-flags.enum.mjs +16 -0
  23. package/esm2020/lib/models/sap-bp-edit.model.mjs +2 -0
  24. package/esm2020/lib/models/sap-bp-global-id.model.mjs +2 -0
  25. package/esm2020/lib/models/sap-bp-group-code.model.mjs +2 -0
  26. package/esm2020/lib/models/sap-bp-industry.model.mjs +2 -0
  27. package/esm2020/lib/models/sap-bp-list.model.mjs +2 -0
  28. package/esm2020/lib/models/sap-bp-payment-terms.model.mjs +2 -0
  29. package/esm2020/lib/models/sap-bp-pricelist.model.mjs +2 -0
  30. package/esm2020/lib/models/sap-bp-qry-group.model.mjs +2 -0
  31. package/esm2020/lib/models/sap-bp-sales-employee.model.mjs +2 -0
  32. package/esm2020/lib/models/sap-bp-ship-type.model.mjs +2 -0
  33. package/esm2020/lib/models/sap-bp-tax.model.mjs +2 -0
  34. package/esm2020/lib/models/sap-bp-technician.model.mjs +2 -0
  35. package/esm2020/lib/models/sap-bp-territory.model.mjs +2 -0
  36. package/esm2020/lib/models/sap-bp-type-translate.enum.mjs +7 -0
  37. package/esm2020/lib/models/sap-bp-type.enum.mjs +7 -0
  38. package/esm2020/lib/models/sap-bp.model.mjs +2 -0
  39. package/esm2020/lib/services/sap-bp-helper.service.mjs +250 -0
  40. package/esm2020/lib/services/sap-bp.service.mjs +131 -0
  41. package/esm2020/lib/st-sap-bp.module.mjs +187 -0
  42. package/esm2020/ngx-st-sap-bp.mjs +5 -0
  43. package/esm2020/public-api.mjs +42 -0
  44. package/fesm2015/ngx-st-sap-bp.mjs +2192 -0
  45. package/fesm2015/ngx-st-sap-bp.mjs.map +1 -0
  46. package/fesm2020/ngx-st-sap-bp.mjs +2177 -0
  47. package/fesm2020/ngx-st-sap-bp.mjs.map +1 -0
  48. package/index.d.ts +5 -0
  49. package/lib/base-interfaces.d.ts +9 -0
  50. package/lib/components/sap-bp-base-create-edit.d.ts +114 -0
  51. package/lib/components/sap-bp-create/sap-bp-create.component.d.ts +21 -0
  52. package/lib/components/sap-bp-create-address/sap-bp-create-address.component.d.ts +62 -0
  53. package/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.d.ts +20 -0
  54. package/lib/components/sap-bp-details/sap-bp-details.component.d.ts +66 -0
  55. package/lib/components/sap-bp-details-address/sap-bp-details-address.component.d.ts +16 -0
  56. package/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.d.ts +16 -0
  57. package/lib/components/sap-bp-edit/sap-bp-edit.component.d.ts +33 -0
  58. package/lib/components/sap-bp-list/sap-bp-list.component.d.ts +40 -0
  59. package/lib/components/sap-bp-list-address/sap-bp-list-address.component.d.ts +48 -0
  60. package/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.d.ts +41 -0
  61. package/lib/models/bp-tax-type.enum.d.ts +5 -0
  62. package/lib/models/sap-bp-addr-country.model.d.ts +4 -0
  63. package/lib/models/sap-bp-addr-sic-code.model.d.ts +6 -0
  64. package/lib/models/sap-bp-addr-state.model.d.ts +5 -0
  65. package/lib/models/sap-bp-address-dialog.model.d.ts +23 -0
  66. package/lib/models/sap-bp-address.model.d.ts +26 -0
  67. package/lib/models/sap-bp-contact-person.model.d.ts +18 -0
  68. package/lib/models/sap-bp-create.model.d.ts +47 -0
  69. package/lib/models/sap-bp-edit-auth-flags.enum.d.ts +14 -0
  70. package/lib/models/sap-bp-edit.model.d.ts +4 -0
  71. package/lib/models/sap-bp-global-id.model.d.ts +5 -0
  72. package/lib/models/sap-bp-group-code.model.d.ts +4 -0
  73. package/lib/models/sap-bp-industry.model.d.ts +4 -0
  74. package/lib/models/sap-bp-list.model.d.ts +9 -0
  75. package/lib/models/sap-bp-payment-terms.model.d.ts +6 -0
  76. package/lib/models/sap-bp-pricelist.model.d.ts +5 -0
  77. package/lib/models/sap-bp-qry-group.model.d.ts +5 -0
  78. package/lib/models/sap-bp-sales-employee.model.d.ts +4 -0
  79. package/lib/models/sap-bp-ship-type.model.d.ts +4 -0
  80. package/lib/models/sap-bp-tax.model.d.ts +5 -0
  81. package/lib/models/sap-bp-technician.model.d.ts +4 -0
  82. package/lib/models/sap-bp-territory.model.d.ts +4 -0
  83. package/lib/models/sap-bp-type-translate.enum.d.ts +5 -0
  84. package/lib/models/sap-bp-type.enum.d.ts +5 -0
  85. package/lib/models/sap-bp.model.d.ts +56 -0
  86. package/lib/services/sap-bp-helper.service.d.ts +15 -0
  87. package/lib/services/sap-bp.service.d.ts +58 -0
  88. package/lib/st-sap-bp.module.d.ts +47 -0
  89. package/package.json +35 -0
  90. package/public-api.d.ts +38 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # NgxStSapBp
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project ngx-st-sap-bp` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-st-sap-bp`.
8
+ > Note: Don't forget to add `--project ngx-st-sap-bp` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build ngx-st-sap-bp` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build ngx-st-sap-bp`, go to the dist folder `cd dist/ngx-st-sap-bp` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test ngx-st-sap-bp` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1icC9zcmMvbGliL2Jhc2UtaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnIHtcclxuICBhcGlfYmFzZV91cmk6IHN0cmluZztcclxuICBiYXNlX3VyaTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEaXJlY3RpdmVNb2R1bGVDb25maWcge1xyXG4gIGVycm9ySW50ZXJjZXB0b3I/OiBhbnk7XHJcbiAgYXBpSW50ZXJjZXB0b3I/OiBhbnk7XHJcbiAgY29uZmlnPzogSUNvbmZpZztcclxufVxyXG4iXX0=
@@ -0,0 +1,488 @@
1
+ import { UntypedFormControl, UntypedFormGroup, Validators, } from '@angular/forms';
2
+ import { Injectable, Input, QueryList, ViewChildren } from '@angular/core';
3
+ import { MatPaginator } from '@angular/material/paginator';
4
+ import { SapBpTypeTranslateEnum } from '../models/sap-bp-type-translate.enum';
5
+ import { SapBpTypeEnum } from '../models/sap-bp-type.enum';
6
+ import { BpTaxTypeEnum } from '../models/bp-tax-type.enum';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/sap-bp.service";
9
+ import * as i2 from "@angular/material/dialog";
10
+ import * as i3 from "../services/sap-bp-helper.service";
11
+ export class SapBpBaseCreateEdit {
12
+ constructor(sapBpService, dialog, sapBpHelperService) {
13
+ this.sapBpService = sapBpService;
14
+ this.dialog = dialog;
15
+ this.sapBpHelperService = sapBpHelperService;
16
+ this.paginator = new QueryList();
17
+ this.initContactPersonList = [];
18
+ this.contactPersonChanged = false;
19
+ this.addressChanged = false;
20
+ this.initBillToAddress = [];
21
+ this.billToAddress = [];
22
+ this.initShipToAddress = [];
23
+ this.shipToAddress = [];
24
+ this.showQryGroup = false;
25
+ this.refreshingDataFromSap = false;
26
+ this.submitted = false;
27
+ this.salesPersonOnlyOnAddress = false;
28
+ this.bpTaxType = BpTaxTypeEnum;
29
+ this.taxesList = [];
30
+ this.refreshingTax = false;
31
+ this.phoneMaxLength = 20;
32
+ this.phonePlaceholder = '';
33
+ this.phoneMask = '';
34
+ this.showLoader = false;
35
+ this.oldCardCode = '';
36
+ this.editMode = false;
37
+ this.convertNotUS = false;
38
+ }
39
+ initForm(bpDetails) {
40
+ if (bpDetails) {
41
+ this.editMode = true;
42
+ }
43
+ if (this.userSettings.phoneMask) {
44
+ this.phonePlaceholder = '(999) 999 9999 ext. 9999999';
45
+ this.phoneMask = '(000) 000 0000 ext. 0000000';
46
+ }
47
+ this.salesPersonOnlyOnAddress =
48
+ this.userSettings.bpEditSalesPersonOnAddress;
49
+ if (this.userSettings.bpTaxType === BpTaxTypeEnum.Eu) {
50
+ this.loadTaxes(false);
51
+ }
52
+ if (bpDetails?.cardType === SapBpTypeTranslateEnum.Lead &&
53
+ !this.userSettings.oracleBpEdit) {
54
+ this.convertNotUS = true;
55
+ }
56
+ this.form = new UntypedFormGroup({
57
+ cardCode: new UntypedFormControl(bpDetails?.cardCode ? bpDetails.cardCode : '', [Validators.required, Validators.pattern('^(L-|C-|S-).*$')]),
58
+ cardName: new UntypedFormControl(bpDetails?.cardName ? bpDetails.cardName : '', Validators.required),
59
+ cardType: new UntypedFormControl(bpDetails?.cardType
60
+ ? this.convertBpType(bpDetails.cardType)
61
+ : this.userSettings.oracleBpEdit
62
+ ? SapBpTypeEnum.Lead
63
+ : '', Validators.required),
64
+ cardForeignName: new UntypedFormControl(bpDetails?.cardForignName ? bpDetails.cardForignName : ''),
65
+ groupCode: new UntypedFormControl(bpDetails?.groupCode ? bpDetails.groupCode : null, Validators.required),
66
+ currency: new UntypedFormControl(bpDetails?.currency ? bpDetails.currency : this.userSettings.currency, Validators.required),
67
+ licTradNum: new UntypedFormControl(bpDetails?.licTradNum ? bpDetails.licTradNum : ''),
68
+ phone1: new UntypedFormControl(bpDetails?.phone1 ? bpDetails.phone1 : '', Validators.required),
69
+ phone2: new UntypedFormControl(bpDetails?.phone2 ? bpDetails.phone2 : ''),
70
+ cellular: new UntypedFormControl(bpDetails?.cellular ? bpDetails.cellular : ''),
71
+ fax: new UntypedFormControl(bpDetails?.fax ? bpDetails.fax : ''),
72
+ email: new UntypedFormControl(bpDetails?.email ? bpDetails.email : ''),
73
+ webSite: new UntypedFormControl(bpDetails?.webSite ? bpDetails.webSite : ''),
74
+ shipType: new UntypedFormControl(bpDetails?.shipTypeCode ? bpDetails.shipTypeCode : null),
75
+ industryCode: new UntypedFormControl(bpDetails?.industryCode ? bpDetails.industryCode : null),
76
+ addId: new UntypedFormControl(bpDetails?.addId ? bpDetails.addId : ''),
77
+ vatIdUnified: new UntypedFormControl(bpDetails?.vatIdUnified ? bpDetails.vatIdUnified : ''),
78
+ registerNo: new UntypedFormControl(bpDetails?.registerNo ? bpDetails.registerNo : ''),
79
+ notes: new UntypedFormControl(bpDetails?.notes ? bpDetails.notes : ''),
80
+ technician: new UntypedFormControl(bpDetails?.technicianCode ? bpDetails.technicianCode : null),
81
+ salesEmployee: new UntypedFormControl(bpDetails?.salesPersonCode ? bpDetails.salesPersonCode : null, !this.salesPersonOnlyOnAddress ? Validators.required : null),
82
+ territory: new UntypedFormControl(bpDetails?.territoryCode ? bpDetails.territoryCode : null),
83
+ globalAccount: new UntypedFormControl(bpDetails?.globalAccount ? bpDetails.globalAccount : '', Validators.required),
84
+ globalId: new UntypedFormControl(bpDetails?.globalId ? bpDetails.globalId : null),
85
+ paymentCode: new UntypedFormControl(bpDetails?.paymentCode ? bpDetails.paymentCode : ''),
86
+ priceList: new UntypedFormControl(bpDetails?.pricelistCode ? bpDetails.pricelistCode : ''),
87
+ deliveryInstructions: new UntypedFormControl(bpDetails?.deliveryInstructions ? bpDetails.deliveryInstructions : ''),
88
+ freeText: new UntypedFormControl(bpDetails?.freeText ? bpDetails.freeText : ''),
89
+ inactiveComment: new UntypedFormControl(bpDetails?.inactiveComment ? bpDetails.inactiveComment : ''),
90
+ status: new UntypedFormControl(bpDetails?.inactiveReason ? bpDetails.inactiveReason : 'Active'),
91
+ vatStatus: new UntypedFormControl(bpDetails?.vatStatus ? bpDetails.vatStatus : '', this.userSettings.bpTaxType !== BpTaxTypeEnum.NoTax
92
+ ? Validators.required
93
+ : null),
94
+ taxCode: new UntypedFormControl(bpDetails?.taxCode ? bpDetails.taxCode : ''),
95
+ });
96
+ if (!this.editMode) {
97
+ this.form.addControl('countryCodePhone1', new UntypedFormControl('', Validators.required));
98
+ this.form.get('phone1').disable();
99
+ this.form.get('countryCodePhone1').valueChanges.subscribe(res => {
100
+ if (res) {
101
+ this.form.get('phone1').enable();
102
+ if (this.userSettings.phoneMask) {
103
+ this.setPhonePlaceholder(res);
104
+ }
105
+ }
106
+ else {
107
+ this.form.get('phone1').disable();
108
+ }
109
+ });
110
+ }
111
+ this.setBpTypeAllowed();
112
+ if (bpDetails) {
113
+ this.initContactPersonList = bpDetails.contactPersonList;
114
+ this.initBillToAddress = bpDetails.addressBillToList;
115
+ this.initShipToAddress = bpDetails.addressShipToList;
116
+ this.loadGroupCodeList();
117
+ this.loadQryGroup(false, bpDetails.qryGroupList);
118
+ if (this.userSettings.oracleBpEdit) {
119
+ this.form.get('cardType').disable();
120
+ this.form.get('cardCode').disable();
121
+ }
122
+ else {
123
+ this.form.get('cardCode').disable();
124
+ if (this.convertNotUS) {
125
+ this.oldCardCode = bpDetails.cardCode;
126
+ if (bpDetails?.cardType === SapBpTypeTranslateEnum.Lead &&
127
+ !this.userSettings.bpEditAllowConvertLead) {
128
+ this.form.get('cardType').disable();
129
+ }
130
+ }
131
+ else {
132
+ this.form.get('cardType').disable();
133
+ }
134
+ }
135
+ this.setValidatorsInEdit(bpDetails);
136
+ }
137
+ else {
138
+ if (this.userSettings.oracleBpEdit) {
139
+ this.setNewBpId(SapBpTypeEnum.Lead);
140
+ this.loadGroupCodeList();
141
+ this.setDefaultPaymentTerm(SapBpTypeEnum.Lead);
142
+ }
143
+ }
144
+ this.form.get('cardType').valueChanges.subscribe((val) => {
145
+ if (this.convertNotUS) {
146
+ this.loadGroupCodeList();
147
+ this.setDefaultPaymentTerm(val);
148
+ if (val === SapBpTypeEnum.Customer) {
149
+ this.form.get('cardCode').enable();
150
+ this.setNewBpId(SapBpTypeEnum.Customer);
151
+ }
152
+ else {
153
+ this.form.get('cardCode').setValue(this.oldCardCode);
154
+ this.form.get('cardCode').disable();
155
+ }
156
+ }
157
+ else {
158
+ if (val || val >= 0) {
159
+ this.setNewBpId(val);
160
+ this.loadGroupCodeList();
161
+ this.setDefaultPaymentTerm(val);
162
+ }
163
+ }
164
+ });
165
+ this.form.get('globalAccount').valueChanges.subscribe(res => {
166
+ if (res === 'Yes') {
167
+ this.form.get('globalId').setValidators([Validators.required]);
168
+ }
169
+ else {
170
+ this.form.get('globalId').setValidators(null);
171
+ }
172
+ });
173
+ this.initLoaders();
174
+ }
175
+ refreshCardCode() {
176
+ this.setNewBpId(this.form.get('cardType').value);
177
+ }
178
+ loadGroupCodeList(refresh = false) {
179
+ this.refreshingDataFromSap = true;
180
+ this.sapBpService
181
+ .getGroupCode(this.form.get('cardType').value, refresh)
182
+ .subscribe(res => {
183
+ this.groupCodeList = res;
184
+ this.form.get('groupCode').setValue(res ? res[0].id : null);
185
+ this.refreshingDataFromSap = false;
186
+ });
187
+ }
188
+ loadShipType(refresh = false) {
189
+ this.refreshingDataFromSap = true;
190
+ this.sapBpService.getShipType(refresh).subscribe(res => {
191
+ this.shipTypeList = res;
192
+ this.refreshingDataFromSap = false;
193
+ });
194
+ }
195
+ loadIndustry(refresh = false) {
196
+ this.refreshingDataFromSap = true;
197
+ this.sapBpService.getIndustry(refresh).subscribe(res => {
198
+ this.industryList = res;
199
+ this.refreshingDataFromSap = false;
200
+ });
201
+ }
202
+ loadTechnician(refresh = false) {
203
+ this.refreshingDataFromSap = true;
204
+ this.sapBpService.getTechnician(refresh).subscribe(res => {
205
+ this.technicianList = res;
206
+ this.refreshingDataFromSap = false;
207
+ });
208
+ }
209
+ loadSalesEmployee(refresh = false) {
210
+ this.refreshingDataFromSap = true;
211
+ this.sapBpService.getSalesEmployee(refresh).subscribe(res => {
212
+ this.salesEmployeeList = res;
213
+ this.refreshingDataFromSap = false;
214
+ });
215
+ }
216
+ loadTerritory(refresh = false) {
217
+ this.refreshingDataFromSap = true;
218
+ this.sapBpService.getTerritory(refresh).subscribe(res => {
219
+ this.territoryList = res;
220
+ this.refreshingDataFromSap = false;
221
+ });
222
+ }
223
+ loadGlobalId(refresh = false) {
224
+ this.refreshingDataFromSap = true;
225
+ this.sapBpService.getGlobalId(refresh).subscribe(res => {
226
+ this.globalIdList = res;
227
+ this.refreshingDataFromSap = false;
228
+ });
229
+ }
230
+ loadPaymentTerms(refresh = false) {
231
+ this.refreshingDataFromSap = true;
232
+ this.sapBpService.getPaymentTerms(refresh).subscribe(res => {
233
+ this.paymentTermsList = res;
234
+ this.refreshingDataFromSap = false;
235
+ if (!this.editMode) {
236
+ const type = this.form.get('cardType').value;
237
+ if (type) {
238
+ this.setDefaultPaymentTerm(type);
239
+ }
240
+ }
241
+ });
242
+ }
243
+ loadPriceList(refresh = false) {
244
+ this.refreshingDataFromSap = true;
245
+ this.sapBpService.getPricelist(refresh).subscribe(res => {
246
+ this.priceList = res;
247
+ this.refreshingDataFromSap = false;
248
+ if (!this.editMode) {
249
+ const defaultPL = this.priceList.find(pl => pl.isDefault);
250
+ if (defaultPL) {
251
+ this.form.get('priceList').setValue(defaultPL.id);
252
+ }
253
+ }
254
+ });
255
+ }
256
+ loadQryGroup(refresh = false, baseValues) {
257
+ this.refreshingDataFromSap = true;
258
+ this.sapBpService.getQryGroup(refresh).subscribe(res => {
259
+ this.qryGroupList = res.map((group, index) => {
260
+ group.value = baseValues ? baseValues[index].value : 'N';
261
+ return group;
262
+ });
263
+ this.refreshingDataFromSap = false;
264
+ });
265
+ }
266
+ loadCurrency(refresh = false) {
267
+ this.refreshingDataFromSap = true;
268
+ this.sapBpService.getCurrency(refresh).subscribe(res => {
269
+ this.currencyList = res;
270
+ this.refreshingDataFromSap = false;
271
+ });
272
+ }
273
+ loadTaxes(refresh = false) {
274
+ this.refreshingTax = true;
275
+ this.sapBpService.getTaxes(refresh).subscribe(res => {
276
+ this.taxesList = res;
277
+ this.refreshingTax = false;
278
+ });
279
+ }
280
+ setShipToAddress(event) {
281
+ this.shipToAddress = event;
282
+ }
283
+ setBillToAddress(event) {
284
+ this.billToAddress = event;
285
+ }
286
+ setAddressChanged(event) {
287
+ this.addressChanged = event;
288
+ }
289
+ disableEditInformationData(bpDetails) {
290
+ return this.sapBpHelperService.disableEditInformationData(this.userSettings.sapBpEditAuth, this.form, bpDetails);
291
+ }
292
+ disableEditContactPerson(bpDetails) {
293
+ return this.sapBpHelperService.disableEditContactPerson(this.userSettings.sapBpEditAuth, this.form, bpDetails);
294
+ }
295
+ disableEditBillToAddress(bpDetails) {
296
+ return this.sapBpHelperService.disableEditBillToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
297
+ }
298
+ disableEditShipToAddress(bpDetails) {
299
+ return this.sapBpHelperService.disableEditShipToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
300
+ }
301
+ disableAddShipToAddress(bpDetails) {
302
+ return this.sapBpHelperService.disableAddShipToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
303
+ }
304
+ disableAddContactPerson(bpDetails) {
305
+ return this.sapBpHelperService.disableAddContactPerson(this.userSettings.sapBpEditAuth, this.form, bpDetails);
306
+ }
307
+ disableAddBillToAddress(bpDetails) {
308
+ return this.sapBpHelperService.disableAddBillToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
309
+ }
310
+ initLoaders() {
311
+ // this.loadGroupCodeList();
312
+ this.loadShipType();
313
+ this.loadIndustry();
314
+ this.loadTechnician();
315
+ this.loadSalesEmployee();
316
+ this.loadTerritory();
317
+ this.loadPaymentTerms();
318
+ this.loadPriceList();
319
+ this.loadCurrency();
320
+ this.loadGlobalId();
321
+ if (!this.editMode) {
322
+ this.loadQryGroup();
323
+ }
324
+ }
325
+ setValidatorsInEdit(bpDetails) {
326
+ if (this.disableEditInformationData(bpDetails)) {
327
+ this.form.get('cardCode').setValidators(null);
328
+ this.form.get('cardName').setValidators(null);
329
+ this.form.get('cardType').setValidators(null);
330
+ this.form.get('groupCode').setValidators(null);
331
+ this.form.get('currency').setValidators(null);
332
+ this.form.get('phone1').setValidators(null);
333
+ this.form.get('salesEmployee').setValidators(null);
334
+ this.form.get('globalAccount').setValidators(null);
335
+ }
336
+ }
337
+ setPhonePlaceholder(countryCode) {
338
+ // 20 sap length, -4 spaces, +10 extra char for visible
339
+ this.phoneMaxLength = 20 - countryCode.length - 4 + 10;
340
+ const extLength = this.phoneMaxLength - 20;
341
+ let phonePlaceholder = '(999) 999 9999 ext. ';
342
+ let phoneMask = '(000) 000 0000 ext. ';
343
+ for (let i = 0; i < extLength; i++) {
344
+ phonePlaceholder += '9';
345
+ phoneMask += '9';
346
+ }
347
+ this.phonePlaceholder = phonePlaceholder;
348
+ this.phoneMask = phoneMask;
349
+ }
350
+ prepareDataToSend() {
351
+ const values = this.form.value;
352
+ let phone1 = values.phone1;
353
+ if (!this.editMode && this.phoneMask) {
354
+ phone1 =
355
+ values.countryCodePhone1 +
356
+ '-' +
357
+ values.phone1.slice(0, 3) +
358
+ '-' +
359
+ values.phone1.slice(3, 6) +
360
+ '-' +
361
+ values.phone1.slice(6, 10) +
362
+ (values.phone1.split('t')[1] ? 'x' + values.phone1.split('t')[1] : '');
363
+ }
364
+ else if (!this.editMode) {
365
+ phone1 = values.countryCodePhone1 + ' ' + phone1;
366
+ }
367
+ return {
368
+ cardForignName: values.cardForeignName,
369
+ groupCode: values.groupCode,
370
+ currency: values.currency,
371
+ licTradNum: values.licTradNum,
372
+ phone1: phone1,
373
+ phone2: values.phone2,
374
+ cellular: values.cellular,
375
+ fax: values.fax,
376
+ email: values.email,
377
+ webSite: values.webSite,
378
+ shipTypeCode: values.shipType,
379
+ industryCode: values.industryCode,
380
+ addId: values.addId,
381
+ vatIdUnified: values.vatIdUnified,
382
+ registerNo: values.registerNo,
383
+ notes: values.notes,
384
+ technicianCode: values.technician,
385
+ salesPersonCode: values.salesEmployee,
386
+ territoryCode: values.territory,
387
+ globalAccount: values.globalAccount,
388
+ globalId: values.globalId,
389
+ validFor: values.status === 'Active' ? 'Y' : 'N',
390
+ paymentCode: values.paymentCode,
391
+ pricelistCode: values.priceList,
392
+ deliveryInstructions: values.deliveryInstructions,
393
+ freeText: values.freeText,
394
+ contactPersonList: this.contactPersons || [],
395
+ addressShipToList: this.shipToAddress || [],
396
+ addressBillToList: this.billToAddress || [],
397
+ qryGroupList: this.qryGroupList,
398
+ addressChange: this.addressChanged,
399
+ contactChange: this.contactPersonChanged,
400
+ cardCode: values.cardCode,
401
+ cardName: values.cardName,
402
+ cardType: this.convertToTranslateBpType(values.cardType),
403
+ oldCardCode: this.oldCardCode || null,
404
+ inactiveReason: values.status,
405
+ inactiveComment: values.status === 'Active' ? '' : values.inactiveComment,
406
+ vatStatus: values.vatStatus,
407
+ taxCode: values.taxCode,
408
+ };
409
+ }
410
+ setNewBpId(bpType) {
411
+ this.sapBpService.getNextBpId(bpType).subscribe(newBpId => {
412
+ this.form.get('cardCode').setValue(newBpId);
413
+ });
414
+ }
415
+ setDefaultPaymentTerm(val) {
416
+ if (this.paymentTermsList?.length > 0) {
417
+ if (val === SapBpTypeEnum.Supplier) {
418
+ const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForSupplier);
419
+ if (paymentTermFound) {
420
+ this.form.get('paymentCode').setValue(paymentTermFound.id);
421
+ }
422
+ }
423
+ else {
424
+ const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForCustomer);
425
+ if (paymentTermFound) {
426
+ this.form.get('paymentCode').setValue(paymentTermFound.id);
427
+ }
428
+ }
429
+ }
430
+ }
431
+ setBpTypeAllowed() {
432
+ this.bpTypeAllowed = [];
433
+ const cardType = this.form.get('cardType').value;
434
+ if (this.editMode) {
435
+ if (this.userSettings.oracleBpEdit) {
436
+ this.bpTypeAllowed.push(cardType);
437
+ }
438
+ else {
439
+ if (cardType === SapBpTypeEnum.Lead) {
440
+ this.bpTypeAllowed.push(SapBpTypeEnum.Lead);
441
+ this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
442
+ }
443
+ else if (cardType === SapBpTypeEnum.Supplier) {
444
+ this.bpTypeAllowed.push(SapBpTypeEnum.Supplier);
445
+ }
446
+ else {
447
+ this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
448
+ }
449
+ }
450
+ }
451
+ else {
452
+ this.userSettings.bpEditTypeAllowed.forEach(bpType => {
453
+ this.bpTypeAllowed.push(bpType);
454
+ });
455
+ }
456
+ }
457
+ convertBpType(type) {
458
+ switch (type) {
459
+ case SapBpTypeTranslateEnum.Customer:
460
+ return SapBpTypeEnum.Customer;
461
+ case SapBpTypeTranslateEnum.Lead:
462
+ return SapBpTypeEnum.Lead;
463
+ case SapBpTypeTranslateEnum.Supplier:
464
+ return SapBpTypeEnum.Supplier;
465
+ }
466
+ }
467
+ convertToTranslateBpType(type) {
468
+ switch (type) {
469
+ case SapBpTypeEnum.Customer:
470
+ return SapBpTypeTranslateEnum.Customer;
471
+ case SapBpTypeEnum.Lead:
472
+ return SapBpTypeTranslateEnum.Lead;
473
+ case SapBpTypeEnum.Supplier:
474
+ return SapBpTypeTranslateEnum.Supplier;
475
+ }
476
+ }
477
+ }
478
+ SapBpBaseCreateEdit.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit, deps: [{ token: i1.SapBpService }, { token: i2.MatDialog }, { token: i3.SapBpHelperService }], target: i0.ɵɵFactoryTarget.Injectable });
479
+ SapBpBaseCreateEdit.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit });
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit, decorators: [{
481
+ type: Injectable
482
+ }], ctorParameters: function () { return [{ type: i1.SapBpService }, { type: i2.MatDialog }, { type: i3.SapBpHelperService }]; }, propDecorators: { paginator: [{
483
+ type: ViewChildren,
484
+ args: [MatPaginator]
485
+ }], userSettings: [{
486
+ type: Input
487
+ }] } });
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWJwLWJhc2UtY3JlYXRlLWVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3Qtc2FwLWJwL3NyYy9saWIvY29tcG9uZW50cy9zYXAtYnAtYmFzZS1jcmVhdGUtZWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQVd4QixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU8zRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUkzRCxNQUFNLE9BQWdCLG1CQUFtQjtJQXVEdkMsWUFDWSxZQUEwQixFQUMxQixNQUFpQixFQUNqQixrQkFBc0M7UUFGdEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBekR0QixjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQWdCLENBQUM7UUFvQnRFLDBCQUFxQixHQUE4QixFQUFFLENBQUM7UUFDdEQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRzdCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBRXhDLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBRXhDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyxjQUFTLEdBQUcsYUFBYSxDQUFDO1FBRTFCLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFZixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRVQsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQU01QixDQUFDO0lBRUosUUFBUSxDQUFDLFNBQXNCO1FBQzdCLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyw2QkFBNkIsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLDZCQUE2QixDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QjtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFDRSxTQUFTLEVBQUUsUUFBUSxLQUFLLHNCQUFzQixDQUFDLElBQUk7WUFDbkQsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFDL0I7WUFDQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUMvQixRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUM3QyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQzVEO1lBQ0QsUUFBUSxFQUFFLElBQUksa0JBQWtCLENBQzlCLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDN0MsVUFBVSxDQUFDLFFBQVEsQ0FDcEI7WUFDRCxRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVk7b0JBQzlCLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSTtvQkFDcEIsQ0FBQyxDQUFDLEVBQUUsRUFDUixVQUFVLENBQUMsUUFBUSxDQUNwQjtZQUNELGVBQWUsRUFBRSxJQUFJLGtCQUFrQixDQUNyQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFEO1lBQ0QsU0FBUyxFQUFFLElBQUksa0JBQWtCLENBQy9CLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDakQsVUFBVSxDQUFDLFFBQVEsQ0FDcEI7WUFDRCxRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQ3JFLFVBQVUsQ0FBQyxRQUFRLENBQ3BCO1lBQ0QsVUFBVSxFQUFFLElBQUksa0JBQWtCLENBQ2hDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDbEQ7WUFDRCxNQUFNLEVBQUUsSUFBSSxrQkFBa0IsQ0FDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN6QyxVQUFVLENBQUMsUUFBUSxDQUNwQjtZQUNELE1BQU0sRUFBRSxJQUFJLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM5QztZQUNELEdBQUcsRUFBRSxJQUFJLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxLQUFLLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxFQUFFLElBQUksa0JBQWtCLENBQzdCLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDNUM7WUFDRCxRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RDtZQUNELFlBQVksRUFBRSxJQUFJLGtCQUFrQixDQUNsQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hEO1lBQ0QsS0FBSyxFQUFFLElBQUksa0JBQWtCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLFlBQVksRUFBRSxJQUFJLGtCQUFrQixDQUNsQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3REO1lBQ0QsVUFBVSxFQUFFLElBQUksa0JBQWtCLENBQ2hDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDbEQ7WUFDRCxLQUFLLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEUsVUFBVSxFQUFFLElBQUksa0JBQWtCLENBQ2hDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDNUQ7WUFDRCxhQUFhLEVBQUUsSUFBSSxrQkFBa0IsQ0FDbkMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUM3RCxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1RDtZQUNELFNBQVMsRUFBRSxJQUFJLGtCQUFrQixDQUMvQixTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFEO1lBQ0QsYUFBYSxFQUFFLElBQUksa0JBQWtCLENBQ25DLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdkQsVUFBVSxDQUFDLFFBQVEsQ0FDcEI7WUFDRCxRQUFRLEVBQUUsSUFBSSxrQkFBa0IsQ0FDOUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRDtZQUNELFdBQVcsRUFBRSxJQUFJLGtCQUFrQixDQUNqQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BEO1lBQ0QsU0FBUyxFQUFFLElBQUksa0JBQWtCLENBQy9CLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDeEQ7WUFDRCxvQkFBb0IsRUFBRSxJQUFJLGtCQUFrQixDQUMxQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN0RTtZQUNELFFBQVEsRUFBRSxJQUFJLGtCQUFrQixDQUM5QixTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzlDO1lBQ0QsZUFBZSxFQUFFLElBQUksa0JBQWtCLENBQ3JDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDNUQ7WUFDRCxNQUFNLEVBQUUsSUFBSSxrQkFBa0IsQ0FDNUIsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUNoRTtZQUNELFNBQVMsRUFBRSxJQUFJLGtCQUFrQixDQUMvQixTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUNqRCxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQ1Q7WUFDRCxPQUFPLEVBQUUsSUFBSSxrQkFBa0IsQ0FDN0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM1QztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNsQixtQkFBbUIsRUFDbkIsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLEdBQUcsRUFBRTtvQkFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFFbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUMvQjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1lBQ3pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUM7WUFDckQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztZQUVyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUVyQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztvQkFFdEMsSUFDRSxTQUFTLEVBQUUsUUFBUSxLQUFLLHNCQUFzQixDQUFDLElBQUk7d0JBQ25ELENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFDekM7d0JBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ3RDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN0QzthQUNGO1lBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDdkUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLEdBQUcsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO29CQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN0QzthQUNGO2lCQUFNO2dCQUNMLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2pDO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO2dCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVk7YUFDZCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQzthQUN2RCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztZQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztZQUM3QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQU8sR0FBRyxLQUFLO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxJQUFJLElBQUksRUFBRTtvQkFDUixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2xDO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUs7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3BEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxVQUFpQztRQUM3RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3pELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBMEI7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxTQUFxQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9CLElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsU0FBcUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLENBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUMvQixJQUFJLENBQUMsSUFBSSxFQUNULFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQXFCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixDQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0IsSUFBSSxDQUFDLElBQUksRUFDVCxTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFxQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9CLElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBcUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUMvQixJQUFJLENBQUMsSUFBSSxFQUNULFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQXFCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0IsSUFBSSxDQUFDLElBQUksRUFDVCxTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxTQUFxQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9CLElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRVMsV0FBVztRQUNuQiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxTQUFxQjtRQUMvQyxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFdBQW1CO1FBQzdDLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFM0MsSUFBSSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQztRQUM5QyxJQUFJLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztRQUV2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQztZQUN4QixTQUFTLElBQUksR0FBRyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0IsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3BDLE1BQU07Z0JBQ0osTUFBTSxDQUFDLGlCQUFpQjtvQkFDeEIsR0FBRztvQkFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN6QixHQUFHO29CQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pCLEdBQUc7b0JBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxRTthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNsRDtRQUVELE9BQU87WUFDTCxjQUFjLEVBQUUsTUFBTSxDQUFDLGVBQWU7WUFDdEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ2pDLGVBQWUsRUFBRSxNQUFNLENBQUMsYUFBYTtZQUNyQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNoRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQy9CLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7WUFDakQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRTtZQUM1QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDM0MsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQzNDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbEMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDeEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDeEQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSTtZQUNyQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDN0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlO1lBQ3pFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBcUI7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxHQUFrQjtRQUM5QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksR0FBRyxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDakQsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQ2hELENBQUM7Z0JBQ0YsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RDthQUNGO2lCQUFNO2dCQUNMLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDakQsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQ2hELENBQUM7Z0JBQ0YsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLEtBQUssQ0FBQztRQUVsRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2pEO3FCQUFNLElBQUksUUFBUSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDakQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNqRDthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUE0QjtRQUNoRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssc0JBQXNCLENBQUMsUUFBUTtnQkFDbEMsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ2hDLEtBQUssc0JBQXNCLENBQUMsSUFBSTtnQkFDOUIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzVCLEtBQUssc0JBQXNCLENBQUMsUUFBUTtnQkFDbEMsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFtQjtRQUVuQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3pDLEtBQUssYUFBYSxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQ3JDLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQzs7Z0hBdm9CbUIsbUJBQW1CO29IQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEeEMsVUFBVTs0SkFFbUIsU0FBUztzQkFBcEMsWUFBWTt1QkFBQyxZQUFZO2dCQUcxQixZQUFZO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYXBCcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYXAtYnAuc2VydmljZSc7XHJcbmltcG9ydCB7IFNhcEJwR3JvdXBDb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWdyb3VwLWNvZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFNoaXBUeXBlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXNoaXAtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwSW5kdXN0cnlNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtaW5kdXN0cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFRlY2huaWNpYW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGVjaG5pY2lhbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwU2FsZXNFbXBsb3llZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1zYWxlcy1lbXBsb3llZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVGVycml0b3J5TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXRlcnJpdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwR2xvYmFsSWRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZ2xvYmFsLWlkLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBDb250YWN0UGVyc29uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWNvbnRhY3QtcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFNhcEJwQWRkcmVzc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1hZGRyZXNzLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBQYXltZW50VGVybXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcGF5bWVudC10ZXJtcy5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwUHJpY2VsaXN0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXByaWNlbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwUXJ5R3JvdXBNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcXJ5LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBDcmVhdGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtY3JlYXRlLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC10eXBlLXRyYW5zbGF0ZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FwLWJwLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FwQnBUYXggfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXRheC5tb2RlbCc7XHJcbmltcG9ydCB7IEJwVGF4VHlwZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvYnAtdGF4LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNhcEJwRWRpdEF1dGhGbGFnc0VudW0gfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWVkaXQtYXV0aC1mbGFncy5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhcEJwQmFzZUNyZWF0ZUVkaXQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IgPSBuZXcgUXVlcnlMaXN0PE1hdFBhZ2luYXRvcj4oKTtcclxuXHJcbiAgQElucHV0KClcclxuICB1c2VyU2V0dGluZ3M6IFNhcEJwVXNlclNldHRpbmdzO1xyXG5cclxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICBncm91cENvZGVMaXN0OiBTYXBCcEdyb3VwQ29kZU1vZGVsW107XHJcbiAgc2hpcFR5cGVMaXN0OiBTYXBCcFNoaXBUeXBlTW9kZWxbXTtcclxuICBpbmR1c3RyeUxpc3Q6IFNhcEJwSW5kdXN0cnlNb2RlbFtdO1xyXG4gIHRlY2huaWNpYW5MaXN0OiBTYXBCcFRlY2huaWNpYW5Nb2RlbFtdO1xyXG4gIHNhbGVzRW1wbG95ZWVMaXN0OiBTYXBCcFNhbGVzRW1wbG95ZWVNb2RlbFtdO1xyXG4gIHRlcnJpdG9yeUxpc3Q6IFNhcEJwVGVycml0b3J5TW9kZWxbXTtcclxuICBnbG9iYWxJZExpc3Q6IFNhcEJwR2xvYmFsSWRNb2RlbFtdO1xyXG4gIHBheW1lbnRUZXJtc0xpc3Q6IFNhcEJwUGF5bWVudFRlcm1zTW9kZWxbXTtcclxuICBwcmljZUxpc3Q6IFNhcEJwUHJpY2VsaXN0TW9kZWxbXTtcclxuICBxcnlHcm91cExpc3Q6IFNhcEJwUXJ5R3JvdXBNb2RlbFtdO1xyXG4gIGN1cnJlbmN5TGlzdDogc3RyaW5nW107XHJcbiAgYnBUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG5cclxuICBpbml0Q29udGFjdFBlcnNvbkxpc3Q6IFNhcEJwQ29udGFjdFBlcnNvbk1vZGVsW10gPSBbXTtcclxuICBjb250YWN0UGVyc29uQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIGNvbnRhY3RQZXJzb25zOiBTYXBCcENvbnRhY3RQZXJzb25Nb2RlbFtdO1xyXG5cclxuICBhZGRyZXNzQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBpbml0QmlsbFRvQWRkcmVzczogU2FwQnBBZGRyZXNzTW9kZWxbXSA9IFtdO1xyXG4gIGJpbGxUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuXHJcbiAgaW5pdFNoaXBUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuICBzaGlwVG9BZGRyZXNzOiBTYXBCcEFkZHJlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHNob3dRcnlHcm91cCA9IGZhbHNlO1xyXG5cclxuICByZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuXHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gIHNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA9IGZhbHNlO1xyXG4gIGJwVGF4VHlwZSA9IEJwVGF4VHlwZUVudW07XHJcblxyXG4gIHRheGVzTGlzdDogU2FwQnBUYXhbXSA9IFtdO1xyXG4gIHJlZnJlc2hpbmdUYXggPSBmYWxzZTtcclxuXHJcbiAgcGhvbmVNYXhMZW5ndGggPSAyMDtcclxuICBwaG9uZVBsYWNlaG9sZGVyID0gJyc7XHJcbiAgcGhvbmVNYXNrID0gJyc7XHJcblxyXG4gIHNob3dMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIG9sZENhcmRDb2RlID0gJyc7XHJcbiAgcHJvdGVjdGVkIGVkaXRNb2RlID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGNvbnZlcnROb3RVUyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBzYXBCcFNlcnZpY2U6IFNhcEJwU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByb3RlY3RlZCBzYXBCcEhlbHBlclNlcnZpY2U6IFNhcEJwSGVscGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgaW5pdEZvcm0oYnBEZXRhaWxzPzogU2FwQnBNb2RlbCkge1xyXG4gICAgaWYgKGJwRGV0YWlscykge1xyXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MucGhvbmVNYXNrKSB7XHJcbiAgICAgIHRoaXMucGhvbmVQbGFjZWhvbGRlciA9ICcoOTk5KSA5OTkgOTk5OSBleHQuIDk5OTk5OTknO1xyXG4gICAgICB0aGlzLnBob25lTWFzayA9ICcoMDAwKSAwMDAgMDAwMCBleHQuIDAwMDAwMDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYWxlc1BlcnNvbk9ubHlPbkFkZHJlc3MgPVxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5icEVkaXRTYWxlc1BlcnNvbk9uQWRkcmVzcztcclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MuYnBUYXhUeXBlID09PSBCcFRheFR5cGVFbnVtLkV1KSB7XHJcbiAgICAgIHRoaXMubG9hZFRheGVzKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAhdGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb252ZXJ0Tm90VVMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgY2FyZENvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jYXJkQ29kZSA/IGJwRGV0YWlscy5jYXJkQ29kZSA6ICcnLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oTC18Qy18Uy0pLiokJyldXHJcbiAgICAgICksXHJcbiAgICAgIGNhcmROYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2FyZE5hbWUgPyBicERldGFpbHMuY2FyZE5hbWUgOiAnJyxcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICksXHJcbiAgICAgIGNhcmRUeXBlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGVcclxuICAgICAgICAgID8gdGhpcy5jb252ZXJ0QnBUeXBlKGJwRGV0YWlscy5jYXJkVHlwZSlcclxuICAgICAgICAgIDogdGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0XHJcbiAgICAgICAgICAgID8gU2FwQnBUeXBlRW51bS5MZWFkXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICApLFxyXG4gICAgICBjYXJkRm9yZWlnbk5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jYXJkRm9yaWduTmFtZSA/IGJwRGV0YWlscy5jYXJkRm9yaWduTmFtZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIGdyb3VwQ29kZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/Lmdyb3VwQ29kZSA/IGJwRGV0YWlscy5ncm91cENvZGUgOiBudWxsLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgY3VycmVuY3k6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jdXJyZW5jeSA/IGJwRGV0YWlscy5jdXJyZW5jeSA6IHRoaXMudXNlclNldHRpbmdzLmN1cnJlbmN5LFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgbGljVHJhZE51bTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmxpY1RyYWROdW0gPyBicERldGFpbHMubGljVHJhZE51bSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHBob25lMTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnBob25lMSA/IGJwRGV0YWlscy5waG9uZTEgOiAnJyxcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICksXHJcbiAgICAgIHBob25lMjogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LnBob25lMiA/IGJwRGV0YWlscy5waG9uZTIgOiAnJyksXHJcbiAgICAgIGNlbGx1bGFyOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2VsbHVsYXIgPyBicERldGFpbHMuY2VsbHVsYXIgOiAnJ1xyXG4gICAgICApLFxyXG4gICAgICBmYXg6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woYnBEZXRhaWxzPy5mYXggPyBicERldGFpbHMuZmF4IDogJycpLFxyXG4gICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LmVtYWlsID8gYnBEZXRhaWxzLmVtYWlsIDogJycpLFxyXG4gICAgICB3ZWJTaXRlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8ud2ViU2l0ZSA/IGJwRGV0YWlscy53ZWJTaXRlIDogJydcclxuICAgICAgKSxcclxuICAgICAgc2hpcFR5cGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5zaGlwVHlwZUNvZGUgPyBicERldGFpbHMuc2hpcFR5cGVDb2RlIDogbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBpbmR1c3RyeUNvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5pbmR1c3RyeUNvZGUgPyBicERldGFpbHMuaW5kdXN0cnlDb2RlIDogbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBhZGRJZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LmFkZElkID8gYnBEZXRhaWxzLmFkZElkIDogJycpLFxyXG4gICAgICB2YXRJZFVuaWZpZWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy52YXRJZFVuaWZpZWQgPyBicERldGFpbHMudmF0SWRVbmlmaWVkIDogJydcclxuICAgICAgKSxcclxuICAgICAgcmVnaXN0ZXJObzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnJlZ2lzdGVyTm8gPyBicERldGFpbHMucmVnaXN0ZXJObyA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIG5vdGVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKGJwRGV0YWlscz8ubm90ZXMgPyBicERldGFpbHMubm90ZXMgOiAnJyksXHJcbiAgICAgIHRlY2huaWNpYW46IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy50ZWNobmljaWFuQ29kZSA/IGJwRGV0YWlscy50ZWNobmljaWFuQ29kZSA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgc2FsZXNFbXBsb3llZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnNhbGVzUGVyc29uQ29kZSA/IGJwRGV0YWlscy5zYWxlc1BlcnNvbkNvZGUgOiBudWxsLFxyXG4gICAgICAgICF0aGlzLnNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsXHJcbiAgICAgICksXHJcbiAgICAgIHRlcnJpdG9yeTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnRlcnJpdG9yeUNvZGUgPyBicERldGFpbHMudGVycml0b3J5Q29kZSA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgZ2xvYmFsQWNjb3VudDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/Lmdsb2JhbEFjY291bnQgPyBicERldGFpbHMuZ2xvYmFsQWNjb3VudCA6ICcnLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgZ2xvYmFsSWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5nbG9iYWxJZCA/IGJwRGV0YWlscy5nbG9iYWxJZCA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgcGF5bWVudENvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5wYXltZW50Q29kZSA/IGJwRGV0YWlscy5wYXltZW50Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHByaWNlTGlzdDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnByaWNlbGlzdENvZGUgPyBicERldGFpbHMucHJpY2VsaXN0Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIGRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uZGVsaXZlcnlJbnN0cnVjdGlvbnMgPyBicERldGFpbHMuZGVsaXZlcnlJbnN0cnVjdGlvbnMgOiAnJ1xyXG4gICAgICApLFxyXG4gICAgICBmcmVlVGV4dDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmZyZWVUZXh0ID8gYnBEZXRhaWxzLmZyZWVUZXh0IDogJydcclxuICAgICAgKSxcclxuICAgICAgaW5hY3RpdmVDb21tZW50OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uaW5hY3RpdmVDb21tZW50ID8gYnBEZXRhaWxzLmluYWN0aXZlQ29tbWVudCA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXR1czogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmluYWN0aXZlUmVhc29uID8gYnBEZXRhaWxzLmluYWN0aXZlUmVhc29uIDogJ0FjdGl2ZSdcclxuICAgICAgKSxcclxuICAgICAgdmF0U3RhdHVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8udmF0U3RhdHVzID8gYnBEZXRhaWxzLnZhdFN0YXR1cyA6ICcnLFxyXG4gICAgICAgIHRoaXMudXNlclNldHRpbmdzLmJwVGF4VHlwZSAhPT0gQnBUYXhUeXBlRW51bS5Ob1RheFxyXG4gICAgICAgICAgPyBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgdGF4Q29kZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnRheENvZGUgPyBicERldGFpbHMudGF4Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woXHJcbiAgICAgICAgJ2NvdW50cnlDb2RlUGhvbmUxJyxcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdwaG9uZTEnKSEuZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5Q29kZVBob25lMScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUxJykhLmVuYWJsZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncy5waG9uZU1hc2spIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQaG9uZVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Bob25lMScpIS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEJwVHlwZUFsbG93ZWQoKTtcclxuXHJcbiAgICBpZiAoYnBEZXRhaWxzKSB7XHJcbiAgICAgIHRoaXMuaW5pdENvbnRhY3RQZXJzb25MaXN0ID0gYnBEZXRhaWxzLmNvbnRhY3RQZXJzb25MaXN0O1xyXG4gICAgICB0aGlzLmluaXRCaWxsVG9BZGRyZXNzID0gYnBEZXRhaWxzLmFkZHJlc3NCaWxsVG9MaXN0O1xyXG4gICAgICB0aGlzLmluaXRTaGlwVG9BZGRyZXNzID0gYnBEZXRhaWxzLmFkZHJlc3NTaGlwVG9MaXN0O1xyXG5cclxuICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cChmYWxzZSwgYnBEZXRhaWxzLnFyeUdyb3VwTGlzdCk7XHJcblxyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5kaXNhYmxlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnZlcnROb3RVUykge1xyXG4gICAgICAgICAgdGhpcy5vbGRDYXJkQ29kZSA9IGJwRGV0YWlscy5jYXJkQ29kZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy51c2VyU2V0dGluZ3MuYnBFZGl0QWxsb3dDb252ZXJ0TGVhZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLmRpc2FibGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzSW5FZGl0KGJwRGV0YWlscyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWw6IFNhcEJwVHlwZUVudW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWx1ZSh0aGlzLm9sZENhcmRDb2RlKTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsQWNjb3VudCcpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmIChyZXMgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsSWQnKSEuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdExvYWRlcnMoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDYXJkQ29kZSgpIHtcclxuICAgIHRoaXMuc2V0TmV3QnBJZCh0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsb2FkR3JvdXBDb2RlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cENvZGUodGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEudmFsdWUsIHJlZnJlc2gpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmdyb3VwQ29kZUxpc3QgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZ3JvdXBDb2RlJykhLnNldFZhbHVlKHJlcyA/IHJlc1swXS5pZCA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNoaXBUeXBlKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0U2hpcFR5cGUocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2hpcFR5cGVMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkSW5kdXN0cnkocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHRydWU7XHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRJbmR1c3RyeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pbmR1c3RyeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUZWNobmljaWFuKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVjaG5pY2lhbihyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy50ZWNobmljaWFuTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNhbGVzRW1wbG95ZWUocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHRydWU7XHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRTYWxlc0VtcGxveWVlKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNhbGVzRW1wbG95ZWVMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVGVycml0b3J5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVycml0b3J5KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlcnJpdG9yeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRHbG9iYWxJZChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldEdsb2JhbElkKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmdsb2JhbElkTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFBheW1lbnRUZXJtcyhyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFBheW1lbnRUZXJtcyhyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5wYXltZW50VGVybXNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh0eXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByaWNlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFByaWNlbGlzdChyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5wcmljZUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UEwgPSB0aGlzLnByaWNlTGlzdC5maW5kKHBsID0+IHBsLmlzRGVmYXVsdCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQTCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJpY2VMaXN0JykhLnNldFZhbHVlKGRlZmF1bHRQTC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRRcnlHcm91cChyZWZyZXNoID0gZmFsc2UsIGJhc2VWYWx1ZXM/OiBTYXBCcFFyeUdyb3VwTW9kZWxbXSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0UXJ5R3JvdXAocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucXJ5R3JvdXBMaXN0ID0gcmVzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgZ3JvdXAudmFsdWUgPSBiYXNlVmFsdWVzID8gYmFzZVZhbHVlc1tpbmRleF0udmFsdWUgOiAnTic7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEN1cnJlbmN5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0Q3VycmVuY3kocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVuY3lMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVGF4ZXMocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdUYXggPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGF4ZXMocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudGF4ZXNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdUYXggPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U2hpcFRvQWRkcmVzcyhldmVudDogU2FwQnBBZGRyZXNzTW9kZWxbXSkge1xyXG4gICAgdGhpcy5zaGlwVG9BZGRyZXNzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBzZXRCaWxsVG9BZGRyZXNzKGV2ZW50OiBTYXBCcEFkZHJlc3NNb2RlbFtdKSB7XHJcbiAgICB0aGlzLmJpbGxUb0FkZHJlc3MgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHNldEFkZHJlc3NDaGFuZ2VkKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdEluZm9ybWF0aW9uRGF0YShicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdEluZm9ybWF0aW9uRGF0YShcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdENvbnRhY3RQZXJzb24oYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVFZGl0QmlsbFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdEJpbGxUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRTaGlwVG9BZGRyZXNzKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVFZGl0U2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkQ29udGFjdFBlcnNvbihicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkQ29udGFjdFBlcnNvbihcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkQmlsbFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkQmlsbFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdExvYWRlcnMoKSB7XHJcbiAgICAvLyB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICB0aGlzLmxvYWRTaGlwVHlwZSgpO1xyXG4gICAgdGhpcy5sb2FkSW5kdXN0cnkoKTtcclxuICAgIHRoaXMubG9hZFRlY2huaWNpYW4oKTtcclxuICAgIHRoaXMubG9hZFNhbGVzRW1wbG95ZWUoKTtcclxuICAgIHRoaXMubG9hZFRlcnJpdG9yeSgpO1xyXG4gICAgdGhpcy5sb2FkUGF5bWVudFRlcm1zKCk7XHJcbiAgICB0aGlzLmxvYWRQcmljZUxpc3QoKTtcclxuICAgIHRoaXMubG9hZEN1cnJlbmN5KCk7XHJcbiAgICB0aGlzLmxvYWRHbG9iYWxJZCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZGF0b3JzSW5FZGl0KGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoYnBEZXRhaWxzKSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkTmFtZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdncm91cENvZGUnKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnY3VycmVuY3knKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUxJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3NhbGVzRW1wbG95ZWUnKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsQWNjb3VudCcpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQaG9uZVBsYWNlaG9sZGVyKGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcclxuICAgIC8vIDIwIHNhcCBsZW5ndGgsIC00IHNwYWNlcywgKzEwIGV4dHJhIGNoYXIgZm9yIHZpc2libGVcclxuICAgIHRoaXMucGhvbmVNYXhMZW5ndGggPSAyMCAtIGNvdW50cnlDb2RlLmxlbmd0aCAtIDQgKyAxMDtcclxuICAgIGNvbnN0IGV4dExlbmd0aCA9IHRoaXMucGhvbmVNYXhMZW5ndGggLSAyMDtcclxuXHJcbiAgICBsZXQgcGhvbmVQbGFjZWhvbGRlciA9ICcoOTk5KSA5OTkgOTk5OSBleHQuICc7XHJcbiAgICBsZXQgcGhvbmVNYXNrID0gJygwMDApIDAwMCAwMDAwIGV4dC4gJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBob25lUGxhY2Vob2xkZXIgKz0gJzknO1xyXG4gICAgICBwaG9uZU1hc2sgKz0gJzknO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGhvbmVQbGFjZWhvbGRlciA9IHBob25lUGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLnBob25lTWFzayA9IHBob25lTWFzaztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcmVwYXJlRGF0YVRvU2VuZCgpOiBTYXBCcENyZWF0ZU1vZGVsIHtcclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgIGxldCBwaG9uZTEgPSB2YWx1ZXMucGhvbmUxO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSAmJiB0aGlzLnBob25lTWFzaykge1xyXG4gICAgICBwaG9uZTEgPVxyXG4gICAgICAgIHZhbHVlcy5jb3VudHJ5Q29kZVBob25lMSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICB2YWx1ZXMucGhvbmUxLnNsaWNlKDAsIDMpICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIHZhbHVlcy5waG9uZTEuc2xpY2UoMywgNikgK1xyXG4gICAgICAgICctJyArXHJcbiAgICAgICAgdmFsdWVzLnBob25lMS5zbGljZSg2LCAxMCkgK1xyXG4gICAgICAgICh2YWx1ZXMucGhvbmUxLnNwbGl0KCd0JylbMV0gPyAneCcgKyB2YWx1ZXMucGhvbmUxLnNwbGl0KCd0JylbMV0gOiAnJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIHBob25lMSA9IHZhbHVlcy5jb3VudHJ5Q29kZVBob25lMSArICcgJyArIHBob25lMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjYXJkRm9yaWduTmFtZTogdmFsdWVzLmNhcmRGb3JlaWduTmFtZSxcclxuICAgICAgZ3JvdXBDb2RlOiB2YWx1ZXMuZ3JvdXBDb2RlLFxyXG4gICAgICBjdXJyZW5jeTogdmFsdWVzLmN1cnJlbmN5LFxyXG4gICAgICBsaWNUcmFkTnVtOiB2YWx1ZXMubGljVHJhZE51bSxcclxuICAgICAgcGhvbmUxOiBwaG9uZTEsXHJcbiAgICAgIHBob25lMjogdmFsdWVzLnBob25lMixcclxuICAgICAgY2VsbHVsYXI6IHZhbHVlcy5jZWxsdWxhcixcclxuICAgICAgZmF4OiB2YWx1ZXMuZmF4LFxyXG4gICAgICBlbWFpbDogdmFsdWVzLmVtYWlsLFxyXG4gICAgICB3ZWJTaXRlOiB2YWx1ZXMud2ViU2l0ZSxcclxuICAgICAgc2hpcFR5cGVDb2RlOiB2YWx1ZXMuc2hpcFR5cGUsXHJcbiAgICAgIGluZHVzdHJ5Q29kZTogdmFsdWVzLmluZHVzdHJ5Q29kZSxcclxuICAgICAgYWRkSWQ6IHZhbHVlcy5hZGRJZCxcclxuICAgICAgdmF0SWRVbmlmaWVkOiB2YWx1ZXMudmF0SWRVbmlmaWVkLFxyXG4gICAgICByZWdpc3Rlck5vOiB2YWx1ZXMucmVnaXN0ZXJObyxcclxuICAgICAgbm90ZXM6IHZhbHVlcy5ub3RlcyxcclxuICAgICAgdGVjaG5pY2lhbkNvZGU6IHZhbHVlcy50ZWNobmljaWFuLFxyXG4gICAgICBzYWxlc1BlcnNvbkNvZGU6IHZhbHVlcy5zYWxlc0VtcGxveWVlLFxyXG4gICAgICB0ZXJyaXRvcnlDb2RlOiB2YWx1ZXMudGVycml0b3J5LFxyXG4gICAgICBnbG9iYWxBY2NvdW50OiB2YWx1ZXMuZ2xvYmFsQWNjb3VudCxcclxuICAgICAgZ2xvYmFsSWQ6IHZhbHVlcy5nbG9iYWxJZCxcclxuICAgICAgdmFsaWRGb3I6IHZhbHVlcy5zdGF0dXMgPT09ICdBY3RpdmUnID8gJ1knIDogJ04nLFxyXG4gICAgICBwYXltZW50Q29kZTogdmFsdWVzLnBheW1lbnRDb2RlLFxyXG4gICAgICBwcmljZWxpc3RDb2RlOiB2YWx1ZXMucHJpY2VMaXN0LFxyXG4gICAgICBkZWxpdmVyeUluc3RydWN0aW9uczogdmFsdWVzLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zLFxyXG4gICAgICBmcmVlVGV4dDogdmFsdWVzLmZyZWVUZXh0LFxyXG4gICAgICBjb250YWN0UGVyc29uTGlzdDogdGhpcy5jb250YWN0UGVyc29ucyB8fCBbXSxcclxuICAgICAgYWRkcmVzc1NoaXBUb0xpc3Q6IHRoaXMuc2hpcFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgYWRkcmVzc0JpbGxUb0xpc3Q6IHRoaXMuYmlsbFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgcXJ5R3JvdXBMaXN0OiB0aGlzLnFyeUdyb3VwTGlzdCxcclxuICAgICAgYWRkcmVzc0NoYW5nZTogdGhpcy5hZGRyZXNzQ2hhbmdlZCxcclxuICAgICAgY29udGFjdENoYW5nZTogdGhpcy5jb250YWN0UGVyc29uQ2hhbmdlZCxcclxuICAgICAgY2FyZENvZGU6IHZhbHVlcy5jYXJkQ29kZSxcclxuICAgICAgY2FyZE5hbWU6IHZhbHVlcy5jYXJkTmFtZSxcclxuICAgICAgY2FyZFR5cGU6IHRoaXMuY29udmVydFRvVHJhbnNsYXRlQnBUeXBlKHZhbHVlcy5jYXJkVHlwZSksXHJcbiAgICAgIG9sZENhcmRDb2RlOiB0aGlzLm9sZENhcmRDb2RlIHx8IG51bGwsXHJcbiAgICAgIGluYWN0aXZlUmVhc29uOiB2YWx1ZXMuc3RhdHVzLFxyXG4gICAgICBpbmFjdGl2ZUNvbW1lbnQ6IHZhbHVlcy5zdGF0dXMgPT09ICdBY3RpdmUnID8gJycgOiB2YWx1ZXMuaW5hY3RpdmVDb21tZW50LFxyXG4gICAgICB2YXRTdGF0dXM6IHZhbHVlcy52YXRTdGF0dXMsXHJcbiAgICAgIHRheENvZGU6IHZhbHVlcy50YXhDb2RlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmV3QnBJZChicFR5cGU6IFNhcEJwVHlwZUVudW0pIHtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldE5leHRCcElkKGJwVHlwZSkuc3Vic2NyaWJlKG5ld0JwSWQgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWx1ZShuZXdCcElkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREZWZhdWx0UGF5bWVudFRlcm0odmFsOiBTYXBCcFR5cGVFbnVtKSB7XHJcbiAgICBpZiAodGhpcy5wYXltZW50VGVybXNMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uU3VwcGxpZXIpIHtcclxuICAgICAgICBjb25zdCBwYXltZW50VGVybUZvdW5kID0gdGhpcy5wYXltZW50VGVybXNMaXN0LmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JTdXBwbGllclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3BheW1lbnRDb2RlJykhLnNldFZhbHVlKHBheW1lbnRUZXJtRm91bmQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwYXltZW50VGVybUZvdW5kID0gdGhpcy5wYXltZW50VGVybXNMaXN0LmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JDdXN0b21lclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3BheW1lbnRDb2RlJykhLnNldFZhbHVlKHBheW1lbnRUZXJtRm91bmQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCcFR5cGVBbGxvd2VkKCkge1xyXG4gICAgdGhpcy5icFR5cGVBbGxvd2VkID0gW107XHJcbiAgICBjb25zdCBjYXJkVHlwZSA9IHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLnZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncy5vcmFjbGVCcEVkaXQpIHtcclxuICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChjYXJkVHlwZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNhcmRUeXBlID09PSBTYXBCcFR5cGVFbnVtLkxlYWQpIHtcclxuICAgICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChTYXBCcFR5cGVFbnVtLkN1c3RvbWVyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNhcmRUeXBlID09PSBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icFR5cGVBbGxvd2VkLnB1c2goU2FwQnBUeXBlRW51bS5DdXN0b21lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5icEVkaXRUeXBlQWxsb3dlZC5mb3JFYWNoKGJwVHlwZSA9PiB7XHJcbiAgICAgICAgdGhpcy5icFR5cGVBbGxvd2VkLnB1c2goYnBUeXBlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRCcFR5cGUodHlwZTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSk6IFNhcEJwVHlwZUVudW0ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5DdXN0b21lcjpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlRW51bS5DdXN0b21lcjtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkxlYWQ6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZUVudW0uTGVhZDtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLlN1cHBsaWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmFuc2xhdGVCcFR5cGUoXHJcbiAgICB0eXBlOiBTYXBCcFR5cGVFbnVtXHJcbiAgKTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkN1c3RvbWVyO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uTGVhZDpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uU3VwcGxpZXI6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhcEJwVXNlclNldHRpbmdzIHtcclxuICBwaG9uZU1hc2s6IGJvb2xlYW47XHJcbiAgYnBFZGl0U2FsZXNQZXJzb25PbkFkZHJlc3M6IGJvb2xlYW47XHJcbiAgYnBUYXhUeXBlOiBCcFRheFR5cGVFbnVtO1xyXG4gIG9yYWNsZUJwRWRpdDogYm9vbGVhbjtcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG4gIGJwRWRpdEFsbG93Q29udmVydExlYWQ6IGJvb2xlYW47XHJcbiAgc2FwQnBFZGl0QXV0aDogU2FwQnBFZGl0QXV0aEZsYWdzRW51bTtcclxuICBicEVkaXRUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxufVxyXG4iXX0=