@colijnit/transaction 12.1.174 → 12.1.176
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/bundles/colijnit-transaction.umd.js +2499 -1873
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +529 -522
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +530 -523
- package/esm2015/lib/cache/service/transaction-business-object-cache-manager.service.js +157 -0
- package/esm2015/lib/cache/service/transaction-select-multiple-cache.service.js +38 -0
- package/esm2015/lib/cache/service/transaction-select-multiple-parameterized-cache.service.js +47 -0
- package/esm2015/lib/cache/service/transaction-select-single-cache.service.js +33 -0
- package/esm2015/lib/cache/service/transaction-select-single-parameterized-cache.service.js +47 -0
- package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +119 -214
- package/esm2015/lib/component/checkout/checkout.module.js +4 -2
- package/esm2015/lib/component/core/base/transaction-payment-base.component.js +257 -0
- package/esm2015/lib/component/dialog/catalog/dialog-catalog/dialog-catalog.component.js +7 -2
- package/esm2015/lib/component/payment/payment.component.js +5 -238
- package/esm2015/lib/component/relation/relation-address/relation-address.component.js +1 -7
- package/esm2015/lib/component/relation/relation-addresses/relation-addresses.component.js +2 -1
- package/esm2015/lib/component/relation/suggestions-sidebar/suggestions-sidebar.component.js +151 -0
- package/esm2015/lib/component/relation/suggestions-sidebar/suggestions-sidebar.module.js +25 -0
- package/esm2015/lib/component/transaction/transaction.component.js +2 -2
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-link-relation/transaction-cash-register-link-relation.component.js +2 -5
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order.component.js +26 -25
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order.module.js +8 -2
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.component.js +103 -65
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.module.js +4 -2
- package/esm2015/lib/component/transaction-header/transaction-header/transaction-header.component.js +8 -6
- package/esm2015/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.component.js +2 -2
- package/esm2015/lib/component/transaction-header/transaction-header-popup/transaction-header-popup-base.component.js +13 -5
- package/esm2015/lib/component/transaction-header/transaction-header-popup/transaction-header-popup-relation.component.js +72 -7
- package/esm2015/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.component.js +40 -25
- package/esm2015/lib/component/transaction-internal/transaction-internal.component.js +12 -4
- package/esm2015/lib/component/transaction-internal/transaction-internal.module.js +4 -2
- package/esm2015/lib/component/transaction-line-fields/transaction-line-vat-button.component.js +2 -2
- package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.component.js +2 -2
- package/esm2015/lib/component/transaction-line-purchase-receive-goods/transaction-line-purchase-receive-goods.component.js +2 -2
- package/esm2015/lib/component/transaction-lines/transaction-lines.module.js +1 -1
- package/esm2015/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/transaction-lines-side-panel.component.js +70 -0
- package/esm2015/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/transaction-lines-side-panel.module.js +21 -0
- package/esm2015/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/transaction-lines-side-panel-cash-desk.component.js +109 -0
- package/esm2015/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/transaction-lines-side-panel-cash-desk.module.js +29 -0
- package/esm2015/lib/component/transaction-search/service/transaction-search.service.js +5 -3
- package/esm2015/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/transaction-search-pos-grid.component.js +84 -0
- package/esm2015/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/transaction-search-pos-grid.module.js +24 -0
- package/esm2015/lib/component/transaction-search/transaction-search-result/transaction-search-result.module.js +5 -1
- package/esm2015/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/transaction-search-pos-order-tile.component.js +102 -0
- package/esm2015/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/transaction-search-pos-order-tile.module.js +30 -0
- package/esm2015/lib/res/dictionary/dictionaries.js +2 -2
- package/esm2015/lib/service/article.service.js +5 -5
- package/esm2015/lib/service/payment.service.js +8 -8
- package/esm2015/lib/service/relation-suggestions.service.js +69 -0
- package/esm2015/lib/service/relation.service.js +29 -30
- package/esm2015/lib/service/transaction-base.service.js +15 -4
- package/esm2015/lib/service/transaction-connector-adapter.service.js +9 -9
- package/esm2015/lib/service/transaction-connector.service.js +14 -14
- package/esm2015/lib/service/transaction-mapping.service.js +16 -3
- package/esm2015/lib/service/transaction.service.js +3 -3
- package/esm2015/lib/transaction-version.js +3 -3
- package/esm2015/public_api.js +6 -1
- package/fesm2015/colijnit-transaction.js +2250 -1518
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/cache/service/{business-object-cache-manager.service.d.ts → transaction-business-object-cache-manager.service.d.ts} +1 -2
- package/lib/cache/service/{select-multiple-cache.service.d.ts → transaction-select-multiple-cache.service.d.ts} +3 -3
- package/lib/cache/service/{select-multiple-parameterized-cache.service.d.ts → transaction-select-multiple-parameterized-cache.service.d.ts} +3 -3
- package/lib/cache/service/{select-single-cache.service.d.ts → transaction-select-single-cache.service.d.ts} +3 -3
- package/lib/cache/service/{select-single-parameterized-cache.service.d.ts → transaction-select-single-parameterized-cache.service.d.ts} +3 -3
- package/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.d.ts +3 -10
- package/lib/component/checkout/checkout-overview-relation-edit/style/_layout.scss +0 -31
- package/lib/component/checkout/checkout-overview-relation-edit/style/_material-definition.scss +0 -15
- package/lib/component/core/base/transaction-payment-base.component.d.ts +68 -0
- package/lib/component/payment/payment.component.d.ts +2 -63
- package/lib/component/relation/suggestions-sidebar/style/_layout.scss +37 -0
- package/lib/component/relation/suggestions-sidebar/style/_material-definition.scss +15 -0
- package/lib/component/relation/suggestions-sidebar/style/_theme.scss +4 -0
- package/lib/component/relation/suggestions-sidebar/style/material.scss +4 -0
- package/lib/component/relation/suggestions-sidebar/suggestions-sidebar.component.d.ts +29 -0
- package/lib/component/relation/suggestions-sidebar/suggestions-sidebar.module.d.ts +2 -0
- package/lib/component/transaction-cash-register-order/style/_layout.scss +1 -1
- package/lib/component/transaction-cash-register-order/transaction-cash-register-link-relation/transaction-cash-register-link-relation.component.d.ts +0 -1
- package/lib/component/transaction-cash-register-order/transaction-cash-register-order.component.d.ts +2 -4
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/style/_layout.scss +28 -6
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/style/_material-definition.scss +3 -0
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.component.d.ts +15 -12
- package/lib/component/transaction-header/transaction-header/transaction-header.component.d.ts +2 -0
- package/lib/component/transaction-header/transaction-header-popup/transaction-header-popup-base.component.d.ts +2 -2
- package/lib/component/transaction-header/transaction-header-popup/transaction-header-popup-relation.component.d.ts +28 -1
- package/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.component.d.ts +1 -0
- package/lib/component/transaction-internal/style/_layout.scss +4 -1
- package/lib/component/transaction-internal/transaction-internal.component.d.ts +3 -1
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/_layout.scss +6 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/_material-definition.scss +2 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/_theme.scss +4 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/material.scss +5 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/transaction-lines-side-panel.component.d.ts +20 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/transaction-lines-side-panel.module.d.ts +2 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/style/_layout.scss +31 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/style/_theme.scss +4 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/style/material.scss +4 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/transaction-lines-side-panel-cash-desk.component.d.ts +33 -0
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel-cash-desk/transaction-lines-side-panel-cash-desk.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/style/_layout.scss +4 -0
- package/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/style/_material-definition.scss +0 -0
- package/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/style/_theme.scss +4 -0
- package/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/transaction-search-pos-grid.component.d.ts +7 -0
- package/lib/component/transaction-search/transaction-search-grid/transaction-search-pos-grid/transaction-search-pos-grid.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/style/_layout.scss +4 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/style/_material-definition.scss +0 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/style/_theme.scss +4 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/style/material.scss +4 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/transaction-search-pos-order-tile.component.d.ts +9 -0
- package/lib/component/transaction-search/transaction-search-tile/transaction-search-pos-order-tile/transaction-search-pos-order-tile.module.d.ts +2 -0
- package/lib/res/dictionary/dictionaries.d.ts +2 -0
- package/lib/service/article.service.d.ts +2 -2
- package/lib/service/payment.service.d.ts +3 -3
- package/lib/service/relation-suggestions.service.d.ts +22 -0
- package/lib/service/relation.service.d.ts +4 -4
- package/lib/service/transaction-connector-adapter.service.d.ts +3 -3
- package/lib/service/transaction-connector.service.d.ts +5 -5
- package/lib/service/transaction-mapping.service.d.ts +2 -0
- package/package.json +2 -2
- package/public_api.d.ts +5 -0
- package/esm2015/lib/cache/service/business-object-cache-manager.service.js +0 -156
- package/esm2015/lib/cache/service/select-multiple-cache.service.js +0 -38
- package/esm2015/lib/cache/service/select-multiple-parameterized-cache.service.js +0 -47
- package/esm2015/lib/cache/service/select-single-cache.service.js +0 -33
- package/esm2015/lib/cache/service/select-single-parameterized-cache.service.js +0 -47
- package/lib/component/cash-register-order-wrapper.ts/style/_layout.scss +0 -4
- package/lib/component/cash-register-order-wrapper.ts/style/_theme.scss +0 -4
- /package/lib/component/{cash-register-order-wrapper.ts → transaction-lines-side-panel/transaction-lines-side-panel-cash-desk}/style/_material-definition.scss +0 -0
- /package/lib/component/{cash-register-order-wrapper.ts → transaction-search/transaction-search-grid/transaction-search-pos-grid}/style/material.scss +0 -0
|
@@ -9,18 +9,19 @@ import { RelationKind } from '@colijnit/relationapi/build/enum/relation-kind.enu
|
|
|
9
9
|
import { AddressType } from '@colijnit/relationapi/build/enum/address-type.enum';
|
|
10
10
|
import { RelationNameKind } from '@colijnit/relationapi/build/enum/relation-name-kind.enum';
|
|
11
11
|
import { SupplierFullObject } from '@colijnit/relationapi/build/model/supplier-full-object.bo';
|
|
12
|
-
import { RelationRequest } from '@colijnit/relationapi/build/model/relation-request';
|
|
13
12
|
import { RelationService } from '../../../service/relation.service';
|
|
14
13
|
import { DialogService } from '../../../service/dialog.service';
|
|
15
14
|
import { CheckoutCfgName } from '../../../enum/checkout-cfg-name.enum';
|
|
16
15
|
import { CheckoutScreenConfigurationService } from '../service/checkout-screen-configuration.service';
|
|
16
|
+
import { RelationSuggestionsService } from '../../../service/relation-suggestions.service';
|
|
17
17
|
export class CheckoutOverviewRelationEditComponent {
|
|
18
|
-
constructor(_formMaster, service, _relationService, _dialogService, _screenConfigService) {
|
|
18
|
+
constructor(_formMaster, service, _relationService, _dialogService, _screenConfigService, _suggestionsService) {
|
|
19
19
|
this._formMaster = _formMaster;
|
|
20
20
|
this.service = service;
|
|
21
21
|
this._relationService = _relationService;
|
|
22
22
|
this._dialogService = _dialogService;
|
|
23
23
|
this._screenConfigService = _screenConfigService;
|
|
24
|
+
this._suggestionsService = _suggestionsService;
|
|
24
25
|
this.cfgNames = CheckoutCfgName;
|
|
25
26
|
this.relKind = RelationKind;
|
|
26
27
|
this.icons = Icon;
|
|
@@ -31,8 +32,6 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
31
32
|
this.invoiceAddressChange = new EventEmitter();
|
|
32
33
|
this.relationChange = new EventEmitter();
|
|
33
34
|
this.relationType = RelationNameKind.Private;
|
|
34
|
-
this.relationSuggestions = [];
|
|
35
|
-
this.showSuggestionsSidebar = false;
|
|
36
35
|
this.contactDetailsConfigNames = {
|
|
37
36
|
relationPhone: this.cfgNames.RelationPhone,
|
|
38
37
|
relationEmailAddress: this.cfgNames.RelationEmailAddress,
|
|
@@ -113,6 +112,7 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
113
112
|
}
|
|
114
113
|
ngOnInit() {
|
|
115
114
|
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
this._suggestionsService.init();
|
|
116
116
|
this._subs.push(this._screenConfigService.configSet.subscribe((configObjects) => {
|
|
117
117
|
if (configObjects && configObjects.length > 0) {
|
|
118
118
|
this.showPreferences = this._screenConfigService.getObjectConfigurationFor(this.cfgNames.RelationPreferencesHeader).immediatelyVisible();
|
|
@@ -127,7 +127,7 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
}));
|
|
130
|
+
}), this._suggestionsService.suggestedRelationClick.subscribe((relation) => this.onRelationSuggestionClick(relation)));
|
|
131
131
|
if (this._relation) {
|
|
132
132
|
this.address = this._relation.getFirstAddressOrCreateNew();
|
|
133
133
|
}
|
|
@@ -149,21 +149,7 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
149
149
|
}
|
|
150
150
|
handleInputChange(request) {
|
|
151
151
|
this._requestForSuggestions = Object.assign(this._requestForSuggestions, request);
|
|
152
|
-
|
|
153
|
-
this.hideSidebar();
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this._suggestionListRefresh();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
showSidebar() {
|
|
160
|
-
this.showSuggestionsSidebar = true;
|
|
161
|
-
}
|
|
162
|
-
// Hide sidebar with a little timeout to prevent missing the click
|
|
163
|
-
hideSidebar() {
|
|
164
|
-
setTimeout(() => {
|
|
165
|
-
this.showSuggestionsSidebar = false;
|
|
166
|
-
}, 200);
|
|
152
|
+
this._suggestionsService.requestForSuggestions = this._requestForSuggestions;
|
|
167
153
|
}
|
|
168
154
|
onRelationSuggestionClick(relationSuggested) {
|
|
169
155
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -173,14 +159,13 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
173
159
|
this._dialogService.showError('RELATION_ALREADY_LOCKED', true, lockResult.messages[0].message);
|
|
174
160
|
}
|
|
175
161
|
else {
|
|
176
|
-
this.hideSidebar();
|
|
162
|
+
this._suggestionsService.hideSidebar();
|
|
177
163
|
const suggestedRelation = yield this._relationService.getRelation(relationSuggested.relationType, parseInt(relationSuggested.relationNr));
|
|
178
164
|
if (suggestedRelation && suggestedRelation.addresses && suggestedRelation.addresses.length > 0) {
|
|
179
165
|
suggestedRelation.addresses.sort((a, b) => a.sequence < b.sequence ? -1 : 1);
|
|
180
166
|
}
|
|
181
167
|
this.relation = suggestedRelation;
|
|
182
168
|
this.relationChange.next(this.relation);
|
|
183
|
-
this._resetSuggestionRequestWithRelation();
|
|
184
169
|
}
|
|
185
170
|
}
|
|
186
171
|
});
|
|
@@ -192,7 +177,8 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
192
177
|
this.service.createNewRelation();
|
|
193
178
|
this._requestForSuggestions = {};
|
|
194
179
|
this._relationService.relationSuggestionsRequestClear.next();
|
|
195
|
-
this.hideSidebar();
|
|
180
|
+
this._suggestionsService.hideSidebar();
|
|
181
|
+
// this.hideSidebar();
|
|
196
182
|
this.updateRelation(this.service.relation);
|
|
197
183
|
}
|
|
198
184
|
handleCustomerGroupChange(group) {
|
|
@@ -232,203 +218,121 @@ export class CheckoutOverviewRelationEditComponent {
|
|
|
232
218
|
}
|
|
233
219
|
});
|
|
234
220
|
}
|
|
235
|
-
// fetches relation suggestions
|
|
236
|
-
_suggestionListRefresh() {
|
|
237
|
-
clearTimeout(this._suggestionListTimeout);
|
|
238
|
-
this._suggestionListTimeout = setTimeout(() => {
|
|
239
|
-
this._suggestionListRefreshHandlerFn();
|
|
240
|
-
}, 600);
|
|
241
|
-
}
|
|
242
|
-
// load suggestions
|
|
243
|
-
_suggestionListRefreshHandlerFn() {
|
|
244
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
245
|
-
const relationRequest = new RelationRequest();
|
|
246
|
-
relationRequest.relationType = this.service.getRelationKindFromTransactionKind();
|
|
247
|
-
if (this._requestForSuggestions.general) {
|
|
248
|
-
relationRequest.general = this._requestForSuggestions.general;
|
|
249
|
-
}
|
|
250
|
-
if (this._requestForSuggestions.firstName) {
|
|
251
|
-
relationRequest.firstName = this._requestForSuggestions.firstName;
|
|
252
|
-
}
|
|
253
|
-
if (this._requestForSuggestions.familyName) {
|
|
254
|
-
relationRequest.familyName = this._requestForSuggestions.familyName;
|
|
255
|
-
}
|
|
256
|
-
if (this._requestForSuggestions.postalCode) {
|
|
257
|
-
relationRequest.postalCode = this._requestForSuggestions.postalCode;
|
|
258
|
-
}
|
|
259
|
-
if (this._requestForSuggestions.houseNr) {
|
|
260
|
-
relationRequest.houseNr = this._requestForSuggestions.houseNr.toString();
|
|
261
|
-
}
|
|
262
|
-
if (this._requestForSuggestions.street) {
|
|
263
|
-
relationRequest.street = this._requestForSuggestions.street;
|
|
264
|
-
}
|
|
265
|
-
if (this._requestForSuggestions.city) {
|
|
266
|
-
relationRequest.city = this._requestForSuggestions.city;
|
|
267
|
-
}
|
|
268
|
-
this._relationService.getRelationListObjects(relationRequest).then((relations) => {
|
|
269
|
-
this.relationSuggestions = relations;
|
|
270
|
-
if (relations && relations.length > 0) {
|
|
271
|
-
this.showSidebar();
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
this.hideSidebar();
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
_isEmptySuggestionsRequest() {
|
|
280
|
-
for (let key in this._requestForSuggestions) {
|
|
281
|
-
if (this._requestForSuggestions.hasOwnProperty(key)) {
|
|
282
|
-
if (this._requestForSuggestions[key] !== undefined && this._requestForSuggestions[key] !== null && this._requestForSuggestions[key] !== '') {
|
|
283
|
-
return false;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
_resetSuggestionRequestWithRelation() {
|
|
290
|
-
this._requestForSuggestions = {};
|
|
291
|
-
if (this.relation) {
|
|
292
|
-
this._requestForSuggestions.firstName = this.relation.firstName;
|
|
293
|
-
this._requestForSuggestions.familyName = this.relation.familyName;
|
|
294
|
-
const address = this.relation.addresses[0];
|
|
295
|
-
if (address) {
|
|
296
|
-
this._requestForSuggestions.street = address.streetName;
|
|
297
|
-
this._requestForSuggestions.postalCode = address.postalCode;
|
|
298
|
-
this._requestForSuggestions.city = address.city;
|
|
299
|
-
this._requestForSuggestions.houseNr = address.houseNo;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
221
|
}
|
|
304
222
|
CheckoutOverviewRelationEditComponent.decorators = [
|
|
305
223
|
{ type: Component, args: [{
|
|
306
224
|
selector: 'co-checkout-overview-relation-edit',
|
|
307
225
|
template: `
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
[relation]="relation"
|
|
320
|
-
(relationChange)="handleRelationTypeChange($event)"
|
|
321
|
-
></co-relation-type>
|
|
322
|
-
<co-button class="empty-relation-button default-width" [label]="'EMPTY' | localize"
|
|
323
|
-
(click)="emptyRelation($event)"></co-button>
|
|
324
|
-
</div>
|
|
325
|
-
<div class="checkout-data-row" *ngIf="relationKind === relKind.Customer">
|
|
326
|
-
<relation-customer-groups
|
|
327
|
-
[screenConfigurationObject]="cfgNames.RelationCustomerGroup"
|
|
328
|
-
[model]="customerGroup"
|
|
329
|
-
(modelChange)="handleCustomerGroupChange($event)" required></relation-customer-groups>
|
|
330
|
-
</div>
|
|
331
|
-
<div class="checkout-data-row">
|
|
332
|
-
<co-relation-general
|
|
333
|
-
[configNames]="relationGeneralConfigNames"
|
|
334
|
-
[relation]="relation"
|
|
335
|
-
[relationType]="relationType"
|
|
336
|
-
(relationChange)="updateRelation($event)"
|
|
337
|
-
(inputChangeForSuggestions)="handleInputChange($event)"
|
|
338
|
-
></co-relation-general>
|
|
339
|
-
</div>
|
|
340
|
-
<div class="checkout-data-row">
|
|
341
|
-
<co-relation-address
|
|
342
|
-
[configNames]="relationAddressConfigNames"
|
|
343
|
-
[address]="address"
|
|
344
|
-
(inputChangeForSuggestions)="handleInputChange($event)"
|
|
345
|
-
></co-relation-address>
|
|
346
|
-
</div>
|
|
347
|
-
</div>
|
|
348
|
-
<ng-container *ngIf="showAddresses">
|
|
349
|
-
<div class="checkout-data-column">
|
|
350
|
-
<div class="checkout-data-row">
|
|
351
|
-
<co-relation-addresses
|
|
352
|
-
[relation]="relation"
|
|
353
|
-
[addresses]="relation.addresses"
|
|
354
|
-
[type]="addressType.DeliveryAddress"
|
|
355
|
-
[selectedNawNr]="deliveryAddressNawNr"
|
|
356
|
-
(selectedNawNrChange)="handleDeliveryAddressChange($event)"
|
|
357
|
-
></co-relation-addresses>
|
|
358
|
-
</div>
|
|
359
|
-
</div>
|
|
360
|
-
<div class="checkout-label-column" *ngIf="relationKind === relKind.Customer">
|
|
361
|
-
<span #indexLabel></span>
|
|
362
|
-
<span class="label-description" [textContent]="'INVOICE_ADDRESS' | localize"></span>
|
|
363
|
-
</div>
|
|
364
|
-
<div class="checkout-data-column" *ngIf="relationKind === relKind.Customer">
|
|
365
|
-
<div class="checkout-data-row">
|
|
366
|
-
<co-input-checkbox [(model)]="service.invoiceAddressSameAsDelivery" (modelChange)="checkSameAddress($event)"
|
|
367
|
-
[label]="'SAME_AS_DELIVERY' | localize"></co-input-checkbox>
|
|
368
|
-
</div>
|
|
369
|
-
<div class="overview-delivery-invoice-address" *ngIf="!service.invoiceAddressSameAsDelivery"
|
|
370
|
-
@showHideInvoiceAddress>
|
|
371
|
-
<div class="checkout-data-row">
|
|
372
|
-
<co-relation-addresses
|
|
226
|
+
<div class="relation-edit-content">
|
|
227
|
+
<co-form-test>
|
|
228
|
+
<div class="checkout-form-wrapper">
|
|
229
|
+
<div class="checkout-label-column">
|
|
230
|
+
<span #indexLabel></span>
|
|
231
|
+
<span class="label-description" [textContent]="'PERSONAL_DATA' | localize"></span>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="checkout-data-column">
|
|
234
|
+
<div class="checkout-data-row">
|
|
235
|
+
<co-relation-type *ngIf="relationKind === relKind.Customer"
|
|
236
|
+
[screenConfigurationObject]="cfgNames.RelationType"
|
|
373
237
|
[relation]="relation"
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
238
|
+
(relationChange)="handleRelationTypeChange($event)"
|
|
239
|
+
></co-relation-type>
|
|
240
|
+
<co-button class="empty-relation-button default-width" [label]="'EMPTY' | localize"
|
|
241
|
+
(click)="emptyRelation($event)"></co-button>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="checkout-data-row" *ngIf="relationKind === relKind.Customer">
|
|
244
|
+
<relation-customer-groups
|
|
245
|
+
[screenConfigurationObject]="cfgNames.RelationCustomerGroup"
|
|
246
|
+
[model]="customerGroup"
|
|
247
|
+
(modelChange)="handleCustomerGroupChange($event)" required></relation-customer-groups>
|
|
248
|
+
</div>
|
|
249
|
+
<div class="checkout-data-row">
|
|
250
|
+
<co-relation-general
|
|
251
|
+
[configNames]="relationGeneralConfigNames"
|
|
252
|
+
[relation]="relation"
|
|
253
|
+
[relationType]="relationType"
|
|
254
|
+
(relationChange)="updateRelation($event)"
|
|
255
|
+
(inputChangeForSuggestions)="handleInputChange($event)"
|
|
256
|
+
></co-relation-general>
|
|
257
|
+
</div>
|
|
258
|
+
<div class="checkout-data-row">
|
|
259
|
+
<co-relation-address
|
|
260
|
+
[configNames]="relationAddressConfigNames"
|
|
261
|
+
[address]="address"
|
|
262
|
+
(inputChangeForSuggestions)="handleInputChange($event)"
|
|
263
|
+
></co-relation-address>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
<ng-container *ngIf="showAddresses">
|
|
267
|
+
<div class="checkout-data-column">
|
|
268
|
+
<div class="checkout-data-row">
|
|
269
|
+
<co-relation-addresses
|
|
270
|
+
[relation]="relation"
|
|
271
|
+
[addresses]="relation.addresses"
|
|
272
|
+
[type]="addressType.DeliveryAddress"
|
|
273
|
+
[selectedNawNr]="deliveryAddressNawNr"
|
|
274
|
+
(selectedNawNrChange)="handleDeliveryAddressChange($event)"
|
|
275
|
+
></co-relation-addresses>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
<div class="checkout-label-column" *ngIf="relationKind === relKind.Customer">
|
|
279
|
+
<span #indexLabel></span>
|
|
280
|
+
<span class="label-description" [textContent]="'INVOICE_ADDRESS' | localize"></span>
|
|
281
|
+
</div>
|
|
282
|
+
<div class="checkout-data-column" *ngIf="relationKind === relKind.Customer">
|
|
283
|
+
<div class="checkout-data-row">
|
|
284
|
+
<co-input-checkbox [(model)]="service.invoiceAddressSameAsDelivery" (modelChange)="checkSameAddress($event)"
|
|
285
|
+
[label]="'SAME_AS_DELIVERY' | localize"></co-input-checkbox>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="overview-delivery-invoice-address" *ngIf="!service.invoiceAddressSameAsDelivery"
|
|
288
|
+
@showHideInvoiceAddress>
|
|
289
|
+
<div class="checkout-data-row">
|
|
290
|
+
<co-relation-addresses
|
|
291
|
+
[relation]="relation"
|
|
292
|
+
[addresses]="relation.activeAddresses"
|
|
293
|
+
[type]="addressType.BillingAddress"
|
|
294
|
+
[selectedNawNr]="invoiceAddressNawNr"
|
|
295
|
+
(selectedNawNrChange)="invoiceAddressChange.emit($event)"
|
|
296
|
+
></co-relation-addresses>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</ng-container>
|
|
301
|
+
<ng-container *ngIf="showContactDetails">
|
|
302
|
+
<div class="checkout-label-column">
|
|
303
|
+
<span #indexLabel></span>
|
|
304
|
+
<span class="label-description" [textContent]="'CONTACT_DETAILS' | localize"></span>
|
|
305
|
+
</div>
|
|
306
|
+
<div class="checkout-data-column">
|
|
307
|
+
<div class="checkout-data-row">
|
|
308
|
+
<co-relation-contact-details
|
|
309
|
+
[configNames]="contactDetailsConfigNames"
|
|
310
|
+
[relation]="relation"
|
|
311
|
+
[relationKind]="relationKind"></co-relation-contact-details>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</ng-container>
|
|
315
|
+
<ng-container *ngIf="relationKind === relKind.Customer && showPreferences">
|
|
316
|
+
<div class="checkout-label-column">
|
|
317
|
+
<span #indexLabel></span>
|
|
318
|
+
<span class="label-description" [textContent]="'PRIVACY_PREFERENCES' | localize"></span>
|
|
319
|
+
</div>
|
|
320
|
+
<div class="checkout-data-column">
|
|
321
|
+
<div class="checkout-data-row">
|
|
322
|
+
<co-relation-preferences
|
|
323
|
+
[(relation)]="relation"></co-relation-preferences>
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
326
|
+
</ng-container>
|
|
327
|
+
</div>
|
|
328
|
+
</co-form-test>
|
|
329
|
+
</div>
|
|
330
|
+
`,
|
|
423
331
|
providers: [
|
|
424
|
-
FormMasterService
|
|
332
|
+
FormMasterService,
|
|
333
|
+
RelationSuggestionsService
|
|
425
334
|
],
|
|
426
335
|
animations: [
|
|
427
|
-
trigger('showHideSidebar', [
|
|
428
|
-
state('void', style({ transform: 'translateX(100%)' })),
|
|
429
|
-
state('*', style({ transform: 'translateX(0)' })),
|
|
430
|
-
transition('void <=> *', animate('200ms ease-in-out'))
|
|
431
|
-
]),
|
|
432
336
|
trigger('showHideInvoiceAddress', [
|
|
433
337
|
state('void', style({ height: 0, opacity: 0 })),
|
|
434
338
|
state('*', style({ height: '*', opacity: 1 })),
|
|
@@ -444,10 +348,11 @@ CheckoutOverviewRelationEditComponent.ctorParameters = () => [
|
|
|
444
348
|
{ type: TransactionService },
|
|
445
349
|
{ type: RelationService },
|
|
446
350
|
{ type: DialogService },
|
|
447
|
-
{ type: CheckoutScreenConfigurationService }
|
|
351
|
+
{ type: CheckoutScreenConfigurationService },
|
|
352
|
+
{ type: RelationSuggestionsService }
|
|
448
353
|
];
|
|
449
354
|
CheckoutOverviewRelationEditComponent.propDecorators = {
|
|
450
|
-
viewChildren: [{ type: ViewChildren, args: [
|
|
355
|
+
viewChildren: [{ type: ViewChildren, args: ['indexLabel', { read: ElementRef },] }],
|
|
451
356
|
relation: [{ type: Input }],
|
|
452
357
|
relationKind: [{ type: Input }],
|
|
453
358
|
deliveryAddressNawNr: [{ type: Input }],
|
|
@@ -459,4 +364,4 @@ CheckoutOverviewRelationEditComponent.propDecorators = {
|
|
|
459
364
|
relationChange: [{ type: Output }],
|
|
460
365
|
showClass: [{ type: HostBinding, args: ['class.co-checkout-overview-relation-edit',] }]
|
|
461
366
|
};
|
|
462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUM3RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDakYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBRy9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBSTdGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUNuRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUNBQW1DLENB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QUMsU0FBUyxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUM7d0JBQy9DLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7cUJBQ3pELENBQUM7b0JBQ0YsT0FBTyxDQUFDLHdCQUF3QixFQUFFO3dCQUM5QixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7d0JBQzdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzt3QkFDNUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDckQsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDckQsQ0FBQztpQkFDTDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN4Qzs7O1lBaEtPLGlCQUFpQjtZQURqQixrQkFBa0I7WUFnQmxCLGVBQWU7WUFDZixhQUFhO1lBT2Isa0NBQWtDOzs7MkJBK0lyQyxZQUFZLFNBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt1QkFZL0MsS0FBSzsyQkE0QkwsS0FBSzttQ0FZTCxLQUFLO2tDQUdMLEtBQUs7MEJBR0wsTUFBTTs0QkFHTixNQUFNO29DQUdOLE1BQU07bUNBR04sTUFBTTs2QkFHTixNQUFNO3dCQUdOLFdBQVcsU0FBQywwQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtTWFzdGVyU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvJztcbmltcG9ydCB7SWNvbn0gZnJvbSAnLi4vLi4vLi4vZW51bS9pY29uLmVudW0nO1xuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ibyc7XG5pbXBvcnQge1JlbGF0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcbmltcG9ydCB7QWRkcmVzc1R5cGV9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9lbnVtL2FkZHJlc3MtdHlwZS5lbnVtJztcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZSc7XG5pbXBvcnQge0FkZHJlc3N9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9hZGRyZXNzLmJvJztcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xuaW1wb3J0IHtTdXBwbGllckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1mdWxsLW9iamVjdC5ibyc7XG5pbXBvcnQge1JlbGF0aW9ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24uYm8nO1xuaW1wb3J0IHtSZWxhdGlvbkxpc3RPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ibyc7XG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL3ZhbGlkYXRpb24tcmVzdWx0JztcbmltcG9ydCB7UmVsYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1JlbGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9yZWxhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQge1JlbGF0aW9uU3VnZ2VzdGlvbnNSZXF1ZXN0fSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2UvcmVsYXRpb24tc3VnZ2VzdGlvbnMtcmVxdWVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtDaGVja291dENmZ05hbWV9IGZyb20gJy4uLy4uLy4uL2VudW0vY2hlY2tvdXQtY2ZnLW5hbWUuZW51bSc7XG5pbXBvcnQge1JlbGF0aW9uR2VuZXJhbENmZ05hbWVzfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2UvcmVsYXRpb24tZ2VuZXJhbC1jZmctbmFtZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7UmVsYXRpb25BZGRyZXNzQ2ZnTmFtZXN9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZS9yZWxhdGlvbi1hZGRyZXNzLWNmZy1uYW1lcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtSZWxhdGlvbkNvbnRhY3REZXRhaWxzQ2ZnTmFtZXN9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZS9yZWxhdGlvbi1jb250YWN0LWRldGFpbHMtY2ZnLW5hbWVzLmludGVyZmFjZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NoZWNrb3V0U2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hlY2tvdXQtc2NyZWVuLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY28tY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aW9uLWVkaXQtY29udGVudFwiPlxuICAgICAgICAgICAgPGNvLWZvcm0tdGVzdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZm9ybS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICNpbmRleExhYmVsPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ1BFUlNPTkFMX0RBVEEnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi10eXBlICpuZ0lmPVwicmVsYXRpb25LaW5kID09PSByZWxLaW5kLkN1c3RvbWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2NyZWVuQ29uZmlndXJhdGlvbk9iamVjdF09XCJjZmdOYW1lcy5SZWxhdGlvblR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbGF0aW9uQ2hhbmdlKT1cImhhbmRsZVJlbGF0aW9uVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi10eXBlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJlbXB0eS1yZWxhdGlvbi1idXR0b24gZGVmYXVsdC13aWR0aFwiIFtsYWJlbF09XCInRU1QVFknIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5UmVsYXRpb24oJGV2ZW50KVwiPjwvY28tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIiAqbmdJZj1cInJlbGF0aW9uS2luZCA9PT0gcmVsS2luZC5DdXN0b21lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbi1jdXN0b21lci1ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImNmZ05hbWVzLlJlbGF0aW9uQ3VzdG9tZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiY3VzdG9tZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlQ3VzdG9tZXJHcm91cENoYW5nZSgkZXZlbnQpXCIgcmVxdWlyZWQ+PC9yZWxhdGlvbi1jdXN0b21lci1ncm91cHM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1nZW5lcmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnTmFtZXNdPVwicmVsYXRpb25HZW5lcmFsQ29uZmlnTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uXT1cInJlbGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWxhdGlvblR5cGVdPVwicmVsYXRpb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxhdGlvbkNoYW5nZSk9XCJ1cGRhdGVSZWxhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUZvclN1Z2dlc3Rpb25zKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWdlbmVyYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnTmFtZXNdPVwicmVsYXRpb25BZGRyZXNzQ29uZmlnTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2VGb3JTdWdnZXN0aW9ucyk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0FkZHJlc3Nlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25dPVwicmVsYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRyZXNzZXNdPVwicmVsYXRpb24uYWRkcmVzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJhZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5hd05yXT1cImRlbGl2ZXJ5QWRkcmVzc05hd05yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYXdOckNoYW5nZSk9XCJoYW5kbGVEZWxpdmVyeUFkZHJlc3NDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3Nlcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiICpuZ0lmPVwicmVsYXRpb25LaW5kID09PSByZWxLaW5kLkN1c3RvbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gI2luZGV4TGFiZWw+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ0lOVk9JQ0VfQUREUkVTUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCIgKm5nSWY9XCJyZWxhdGlvbktpbmQgPT09IHJlbEtpbmQuQ3VzdG9tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFsobW9kZWwpXT1cInNlcnZpY2UuaW52b2ljZUFkZHJlc3NTYW1lQXNEZWxpdmVyeVwiIChtb2RlbENoYW5nZSk9XCJjaGVja1NhbWVBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTQU1FX0FTX0RFTElWRVJZJyB8IGxvY2FsaXplXCI+PC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcnZpZXctZGVsaXZlcnktaW52b2ljZS1hZGRyZXNzXCIgKm5nSWY9XCIhc2VydmljZS5pbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzaG93SGlkZUludm9pY2VBZGRyZXNzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uXT1cInJlbGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3Nlc109XCJyZWxhdGlvbi5hY3RpdmVBZGRyZXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJhZGRyZXNzVHlwZS5CaWxsaW5nQWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5hd05yXT1cImludm9pY2VBZGRyZXNzTmF3TnJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYXdOckNoYW5nZSk9XCJpbnZvaWNlQWRkcmVzc0NoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28tcmVsYXRpb24tYWRkcmVzc2VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb250YWN0RGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICNpbmRleExhYmVsPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWRlc2NyaXB0aW9uXCIgW3RleHRDb250ZW50XT1cIidDT05UQUNUX0RFVEFJTFMnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tY29udGFjdC1kZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ05hbWVzXT1cImNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uS2luZF09XCJyZWxhdGlvbktpbmRcIj48L2NvLXJlbGF0aW9uLWNvbnRhY3QtZGV0YWlscz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbGF0aW9uS2luZCA9PT0gcmVsS2luZC5DdXN0b21lciAmJiBzaG93UHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAjaW5kZXhMYWJlbD48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1kZXNjcmlwdGlvblwiIFt0ZXh0Q29udGVudF09XCInUFJJVkFDWV9QUkVGRVJFTkNFUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1wcmVmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsocmVsYXRpb24pXT1cInJlbGF0aW9uXCI+PC9jby1yZWxhdGlvbi1wcmVmZXJlbmNlcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvY28tZm9ybS10ZXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb25zLXNpZGViYXJcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9uc1NpZGViYXIgJiYgc2hvd1N1Z2dlc3Rpb25zXCIgQHNob3dIaWRlU2lkZWJhcj5cbiAgICAgICAgICA8aWNvbiAoY2xpY2spPVwiaGlkZVNpZGViYXIoKVwiIFtpY29uXT1cImljb25zLkNyb3Nzc2tpbm55XCIgY2xhc3M9XCJjbG9zZS1idXR0b25cIj48L2ljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tc2lkZWJhci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja291dC1sYWJlbC1oM1wiIFt0ZXh0Q29udGVudF09XCInU1VHR0VTVElPTlMnIHwgbG9jYWxpemVcIj48L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y28tcmVsYXRpb24tc3VnZ2VzdGlvbnMtbGlzdFxuICAgICAgICAgICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwicmVsYXRpb25TdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uU2VsZWN0ZWQpPVwib25SZWxhdGlvblN1Z2dlc3Rpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLXN1Z2dlc3Rpb25zLWxpc3Q+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEZvcm1NYXN0ZXJTZXJ2aWNlXG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3Nob3dIaWRlU2lkZWJhcicsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknfSkpLFxuICAgICAgICAgICAgc3RhdGUoJyonLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKSd9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkIDw9PiAqJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbi1vdXQnKSlcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoJ3Nob3dIaWRlSW52b2ljZUFkZHJlc3MnLCBbXG4gICAgICAgICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHtoZWlnaHQ6IDAsIG9wYWNpdHk6IDB9KSksXG4gICAgICAgICAgICBzdGF0ZSgnKicsIHN0eWxlKHtoZWlnaHQ6ICcqJywgb3BhY2l0eTogMX0pKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1vdXQnKSlcbiAgICAgICAgXSlcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRPdmVydmlld1JlbGF0aW9uRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2ZnTmFtZXM6IHR5cGVvZiBDaGVja291dENmZ05hbWUgPSBDaGVja291dENmZ05hbWU7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlbEtpbmQ6IHR5cGVvZiBSZWxhdGlvbktpbmQgPSBSZWxhdGlvbktpbmQ7XG4gICAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbiA9IEljb247XG4gICAgcHVibGljIHJlYWRvbmx5IGFkZHJlc3NUeXBlOiB0eXBlb2YgQWRkcmVzc1R5cGUgPSBBZGRyZXNzVHlwZTtcbiAgICBAVmlld0NoaWxkcmVuKFwiaW5kZXhMYWJlbFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2V0IHZpZXdDaGlsZHJlbihjaGlsZHJlbikge1xuICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbnMgPSBjaGlsZHJlbi50b0FycmF5KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzcGFuLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChpICsgMSA8IDEwKSA/ICcwJyArIChpICsgMSkudG9TdHJpbmcoKSA6IChpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uQW55VHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fcmVsYXRpb24gJiYgdmFsdWUgJiYgdGhpcy5fcmVsYXRpb24ucmVsYXRpb25JZCAmJiB2YWx1ZS5yZWxhdGlvbklkICYmIHRoaXMuX3JlbGF0aW9uLnJlbGF0aW9uSWQgPT09IHZhbHVlLnJlbGF0aW9uSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWxhdGlvbiBpbnN0YW5jZW9mIFN1cHBsaWVyRnVsbE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbGF0aW9uLnR5cGUgPSBSZWxhdGlvbk5hbWVLaW5kLkNvbXBhbnk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGlvblR5cGUgPSBSZWxhdGlvbk5hbWVLaW5kLkNvbXBhbnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVsYXRpb24gaW5zdGFuY2VvZiBDdXN0b21lckZ1bGxPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVyR3JvdXAgPSB0aGlzLl9yZWxhdGlvbi5jdXN0b21lckdyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzID0gdGhpcy5fcmVsYXRpb24uZ2V0Rmlyc3RBZGRyZXNzT3JDcmVhdGVOZXcoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yID0gdGhpcy5hZGRyZXNzLm5hd05yO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzQ2hhbmdlLmVtaXQodGhpcy5kZWxpdmVyeUFkZHJlc3NOYXdOcik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZvaWNlQWRkcmVzc05hd05yID0gdGhpcy5hZGRyZXNzLm5hd05yO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWxhdGlvbigpOiBSZWxhdGlvbkFueVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVsYXRpb247XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlbGF0aW9uS2luZCh2YWx1ZTogUmVsYXRpb25LaW5kKSB7XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uS2luZCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcmVsYXRpb25LaW5kID09PSBSZWxhdGlvbktpbmQuU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25UeXBlID0gUmVsYXRpb25OYW1lS2luZC5Db21wYW55O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWxhdGlvbktpbmQoKTogUmVsYXRpb25LaW5kIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uS2luZDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkZWxpdmVyeUFkZHJlc3NOYXdOcjogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW52b2ljZUFkZHJlc3NOYXdOcjogbnVtYmVyO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaW52YWxpZFN1Ym1pdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRlbGl2ZXJ5QWRkcmVzc0NoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpbnZvaWNlQWRkcmVzc0NoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWxhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY28tY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdCcpXG4gICAgcHVibGljIHNob3dDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZHJlc3M6IEFkZHJlc3M7XG4gICAgcHVibGljIGN1c3RvbWVyR3JvdXA6IHN0cmluZztcbiAgICBwdWJsaWMgcmVsYXRpb25UeXBlOiBSZWxhdGlvbk5hbWVLaW5kID0gUmVsYXRpb25OYW1lS2luZC5Qcml2YXRlO1xuXG4gICAgcHVibGljIHJlbGF0aW9uU3VnZ2VzdGlvbnM6IFJlbGF0aW9uTGlzdE9iamVjdFtdID0gW107XG4gICAgcHVibGljIHNob3dTdWdnZXN0aW9uc1NpZGViYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb250YWN0RGV0YWlsc0NvbmZpZ05hbWVzOiBSZWxhdGlvbkNvbnRhY3REZXRhaWxzQ2ZnTmFtZXMgPSB7XG4gICAgICAgIHJlbGF0aW9uUGhvbmU6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25QaG9uZSxcbiAgICAgICAgcmVsYXRpb25FbWFpbEFkZHJlc3M6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25FbWFpbEFkZHJlc3MsXG4gICAgICAgIHJlbGF0aW9uSW52aXRlVG9BY2NvdW50OiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uSW52aXRlVG9BY2NvdW50XG4gICAgfTtcbiAgICBwdWJsaWMgcmVsYXRpb25HZW5lcmFsQ29uZmlnTmFtZXM6IFJlbGF0aW9uR2VuZXJhbENmZ05hbWVzID0ge1xuICAgICAgICByZWxhdGlvbkNvbXBhbnk6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25Db21wYW55LFxuICAgICAgICByZWxhdGlvbkZpcnN0TmFtZTogdGhpcy5jZmdOYW1lcy5SZWxhdGlvbkZpcnN0TmFtZSxcbiAgICAgICAgcmVsYXRpb25QcmVmaXg6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25QcmVmaXgsXG4gICAgICAgIHJlbGF0aW9uTGFzdE5hbWU6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25MYXN0TmFtZSxcbiAgICAgICAgcmVsYXRpb25HZW5kZXI6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25HZW5kZXIsXG4gICAgICAgIGNvbnRhY3REZXRhaWxzOiB0aGlzLmNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXNcbiAgICB9O1xuICAgIHB1YmxpYyByZWxhdGlvbkFkZHJlc3NDb25maWdOYW1lczogUmVsYXRpb25BZGRyZXNzQ2ZnTmFtZXMgPSB7XG4gICAgICAgIHJlbGF0aW9uU3RyZWV0OiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uU3RyZWV0LFxuICAgICAgICByZWxhdGlvbkhvdXNlTnI6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25Ib3VzZU5yLFxuICAgICAgICByZWxhdGlvbkhvdXNlTnJBZGQ6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25Ib3VzZU5yQWRkLFxuICAgICAgICByZWxhdGlvbkNpdHk6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25DaXR5LFxuICAgICAgICByZWxhdGlvbkNvdW50cnk6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25Db3VudHJ5LFxuICAgICAgICByZWxhdGlvblBvc3RhbENvZGU6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25Qb3N0YWxDb2RlXG4gICAgfTtcbiAgICBwdWJsaWMgc2hvd0NvbnRhY3REZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dQcmVmZXJlbmNlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93U3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hvd0FkZHJlc3NlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfcmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSA9IG5ldyBDdXN0b21lckZ1bGxPYmplY3QoKTtcbiAgICBwcml2YXRlIF9yZWxhdGlvbktpbmQ6IFJlbGF0aW9uS2luZCA9IFJlbGF0aW9uS2luZC5DdXN0b21lcjtcbiAgICBwcml2YXRlIF9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnM6IFJlbGF0aW9uU3VnZ2VzdGlvbnNSZXF1ZXN0ID0ge307XG4gICAgcHJpdmF0ZSBfc3VnZ2VzdGlvbkxpc3RUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9mb3JtTWFzdGVyOiBGb3JtTWFzdGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIHNlcnZpY2U6IFRyYW5zYWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcmVsYXRpb25TZXJ2aWNlOiBSZWxhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3NjcmVlbkNvbmZpZ1NlcnZpY2U6IENoZWNrb3V0U2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fc3Vicy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fc2NyZWVuQ29uZmlnU2VydmljZS5jb25maWdTZXQuc3Vic2NyaWJlKChjb25maWdPYmplY3RzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdPYmplY3RzICYmIGNvbmZpZ09iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmVmZXJlbmNlcyA9IHRoaXMuX3NjcmVlbkNvbmZpZ1NlcnZpY2UuZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcih0aGlzLmNmZ05hbWVzLlJlbGF0aW9uUHJlZmVyZW5jZXNIZWFkZXIpLmltbWVkaWF0ZWx5VmlzaWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHRoaXMuX3NjcmVlbkNvbmZpZ1NlcnZpY2UuZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcih0aGlzLmNmZ05hbWVzLlN1Z2dlc3Rpb25zKS5pbW1lZGlhdGVseVZpc2libGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QWRkcmVzc2VzID0gdGhpcy5fc2NyZWVuQ29uZmlnU2VydmljZS5nZXRPYmplY3RDb25maWd1cmF0aW9uRm9yKHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25BZGRyZXNzZXNIZWFkZXIpLmltbWVkaWF0ZWx5VmlzaWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY3JlZW5Db25maWdTZXJ2aWNlLmdldE9iamVjdENvbmZpZ3VyYXRpb25Gb3Ioa2V5KS5pbW1lZGlhdGVseVZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDb250YWN0RGV0YWlscyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmdldEZpcnN0QWRkcmVzc09yQ3JlYXRlTmV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aXZlQWRkcmVzczogQWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmFjdGl2ZUFkZHJlc3Nlcy5sZW5ndGggPiAwID8gdGhpcy5fcmVsYXRpb24uYWN0aXZlQWRkcmVzc2VzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnIgPSBmaXJzdEFjdGl2ZUFkZHJlc3MgPyBmaXJzdEFjdGl2ZUFkZHJlc3MubmF3TnIgOiAwO1xuICAgICAgICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaW52b2ljZUFkZHJlc3NOYXdOcikge1xuICAgICAgICAgICAgdGhpcy5pbnZvaWNlQWRkcmVzc05hd05yID0gZmlyc3RBY3RpdmVBZGRyZXNzID8gZmlyc3RBY3RpdmVBZGRyZXNzLm5hd05yIDogMDtcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUlucHV0Q2hhbmdlKHJlcXVlc3Q6IFJlbGF0aW9uU3VnZ2VzdGlvbnNSZXF1ZXN0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucyA9IE9iamVjdC5hc3NpZ24odGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLCByZXF1ZXN0KTtcbiAgICAgICAgaWYgKHRoaXMuX2lzRW1wdHlTdWdnZXN0aW9uc1JlcXVlc3QoKSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbkxpc3RSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NpZGViYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb25zU2lkZWJhciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSGlkZSBzaWRlYmFyIHdpdGggYSBsaXR0bGUgdGltZW91dCB0byBwcmV2ZW50IG1pc3NpbmcgdGhlIGNsaWNrXG4gICAgcHVibGljIGhpZGVTaWRlYmFyKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb25zU2lkZWJhciA9IGZhbHNlO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlbGF0aW9uU3VnZ2VzdGlvbkNsaWNrKHJlbGF0aW9uU3VnZ2VzdGVkOiBSZWxhdGlvbkxpc3RPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHJlbGF0aW9uU3VnZ2VzdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NrUmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5fcmVsYXRpb25TZXJ2aWNlLmxvY2tSZWxhdGlvbihyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvblR5cGUsIHBhcnNlSW50KHJlbGF0aW9uU3VnZ2VzdGVkLnJlbGF0aW9uTnIsIDApKTtcbiAgICAgICAgICAgIGlmICghbG9ja1Jlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RXJyb3IoJ1JFTEFUSU9OX0FMUkVBRFlfTE9DS0VEJywgdHJ1ZSwgbG9ja1Jlc3VsdC5tZXNzYWdlc1swXS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3RlZFJlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBhd2FpdCB0aGlzLl9yZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb24ocmVsYXRpb25TdWdnZXN0ZWQucmVsYXRpb25UeXBlLCBwYXJzZUludChyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbk5yKSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3RlZFJlbGF0aW9uICYmIHN1Z2dlc3RlZFJlbGF0aW9uLmFkZHJlc3NlcyAmJiBzdWdnZXN0ZWRSZWxhdGlvbi5hZGRyZXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRSZWxhdGlvbi5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uID0gc3VnZ2VzdGVkUmVsYXRpb247XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGlvbkNoYW5nZS5uZXh0KHRoaXMucmVsYXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0U3VnZ2VzdGlvblJlcXVlc3RXaXRoUmVsYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVSZWxhdGlvblR5cGVDaGFuZ2UocmVsYXRpb246IFJlbGF0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVsYXRpb25UeXBlID0gcmVsYXRpb24udHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1wdHlSZWxhdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlTmV3UmVsYXRpb24oKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uU2VydmljZS5yZWxhdGlvblN1Z2dlc3Rpb25zUmVxdWVzdENsZWFyLm5leHQoKTtcbiAgICAgICAgdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlbGF0aW9uKHRoaXMuc2VydmljZS5yZWxhdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUN1c3RvbWVyR3JvdXBDaGFuZ2UoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbWVyR3JvdXAgPSBncm91cDtcbiAgICAgICAgaWYgKHRoaXMuX3JlbGF0aW9uIGluc3RhbmNlb2YgQ3VzdG9tZXJGdWxsT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl9yZWxhdGlvbi5jdXN0b21lckdyb3VwID0gdGhpcy5jdXN0b21lckdyb3VwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJlbGF0aW9uKHJlbDogUmVsYXRpb25BbnlUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVsYXRpb24gPSByZWw7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aXZlQWRkcmVzczogQWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmFjdGl2ZUFkZHJlc3Nlcy5sZW5ndGggPiAwID8gdGhpcy5fcmVsYXRpb24uYWN0aXZlQWRkcmVzc2VzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFkZHJlc3MgPSBmaXJzdEFjdGl2ZUFkZHJlc3M7XG4gICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnIgPSBmaXJzdEFjdGl2ZUFkZHJlc3MgPyBmaXJzdEFjdGl2ZUFkZHJlc3MubmF3TnIgOiAwO1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc0NoYW5nZS5lbWl0KHRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnIpO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIgPSBmaXJzdEFjdGl2ZUFkZHJlc3MgPyBmaXJzdEFjdGl2ZUFkZHJlc3MubmF3TnIgOiAwO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzQ2hhbmdlLmVtaXQodGhpcy5pbnZvaWNlQWRkcmVzc05hd05yKTtcbiAgICAgICAgdGhpcy5yZWxhdGlvbkNoYW5nZS5lbWl0KHRoaXMucmVsYXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtTWFzdGVyLnN1Ym1pdFNsYXZlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEZWxpdmVyeUFkZHJlc3NDaGFuZ2UobmF3TnI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc0NoYW5nZS5lbWl0KG5hd05yKTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZS5pbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzQ2hhbmdlLmVtaXQobmF3TnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrU2FtZUFkZHJlc3MoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIgPSB0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzQ2hhbmdlLm5leHQodGhpcy5pbnZvaWNlQWRkcmVzc05hd05yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zZXRDb3VudHJ5TmFtZVRvQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChhZGRyZXNzLmNvdW50cnlJZCAmJiAhYWRkcmVzcy5jb3VudHJ5TmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY291bnRyeTogQ291bnRyeSA9IGF3YWl0IHRoaXMuc2VydmljZS5nZXRDb3VudHJ5KGFkZHJlc3MuY291bnRyeUlkKTtcbiAgICAgICAgICAgIGFkZHJlc3MuY291bnRyeU5hbWUgPSBjb3VudHJ5LmRlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmV0Y2hlcyByZWxhdGlvbiBzdWdnZXN0aW9uc1xuICAgIHByaXZhdGUgX3N1Z2dlc3Rpb25MaXN0UmVmcmVzaCgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N1Z2dlc3Rpb25MaXN0VGltZW91dCk7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25MaXN0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbkxpc3RSZWZyZXNoSGFuZGxlckZuKCk7XG4gICAgICAgIH0sIDYwMCk7XG4gICAgfVxuXG4gICAgLy8gbG9hZCBzdWdnZXN0aW9uc1xuICAgIHByaXZhdGUgYXN5bmMgX3N1Z2dlc3Rpb25MaXN0UmVmcmVzaEhhbmRsZXJGbigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZWxhdGlvblJlcXVlc3Q6IFJlbGF0aW9uUmVxdWVzdCA9IG5ldyBSZWxhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgcmVsYXRpb25SZXF1ZXN0LnJlbGF0aW9uVHlwZSA9IHRoaXMuc2VydmljZS5nZXRSZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kKCk7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMuZ2VuZXJhbCkge1xuICAgICAgICAgICAgcmVsYXRpb25SZXF1ZXN0LmdlbmVyYWwgPSB0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMuZ2VuZXJhbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmZpcnN0TmFtZSkge1xuICAgICAgICAgICAgcmVsYXRpb25SZXF1ZXN0LmZpcnN0TmFtZSA9IHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5maXJzdE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5mYW1pbHlOYW1lKSB7XG4gICAgICAgICAgICByZWxhdGlvblJlcXVlc3QuZmFtaWx5TmFtZSA9IHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5mYW1pbHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMucG9zdGFsQ29kZSkge1xuICAgICAgICAgICAgcmVsYXRpb25SZXF1ZXN0LnBvc3RhbENvZGUgPSB0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMucG9zdGFsQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmhvdXNlTnIpIHtcbiAgICAgICAgICAgIHJlbGF0aW9uUmVxdWVzdC5ob3VzZU5yID0gdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmhvdXNlTnIudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLnN0cmVldCkge1xuICAgICAgICAgICAgcmVsYXRpb25SZXF1ZXN0LnN0cmVldCA9IHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5zdHJlZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5jaXR5KSB7XG4gICAgICAgICAgICByZWxhdGlvblJlcXVlc3QuY2l0eSA9IHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5jaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVsYXRpb25TZXJ2aWNlLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KS50aGVuKChyZWxhdGlvbnM6IFJlbGF0aW9uTGlzdE9iamVjdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9uU3VnZ2VzdGlvbnMgPSByZWxhdGlvbnM7XG4gICAgICAgICAgICBpZiAocmVsYXRpb25zICYmIHJlbGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2lkZWJhcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVTaWRlYmFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzRW1wdHlTdWdnZXN0aW9uc1JlcXVlc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9uc1trZXldICE9PSBudWxsICYmIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9uc1trZXldICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2V0U3VnZ2VzdGlvblJlcXVlc3RXaXRoUmVsYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5yZWxhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmZpcnN0TmFtZSA9IHRoaXMucmVsYXRpb24uZmlyc3ROYW1lO1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmZhbWlseU5hbWUgPSB0aGlzLnJlbGF0aW9uLmZhbWlseU5hbWU7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXNbMF07XG4gICAgICAgICAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucy5zdHJlZXQgPSBhZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLnBvc3RhbENvZGUgPSBhZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmNpdHkgPSBhZGRyZXNzLmNpdHk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLmhvdXNlTnIgPSBhZGRyZXNzLmhvdXNlTm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUM3RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDakYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBRy9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBSzdGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBS3JFLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBNEh6RixNQUFNLE9BQU8scUNBQXFDO0lBdUhoRCxZQUNVLFdBQThCLEVBQy9CLE9BQTJCLEVBQzFCLGdCQUFpQyxFQUNqQyxjQUE2QixFQUM3QixvQkFBd0QsRUFDeEQsbUJBQStDO1FBTC9DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUMvQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBb0M7UUFDeEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUE0QjtRQTVIekMsYUFBUSxHQUEyQixlQUFlLENBQUM7UUFDbkQsWUFBTyxHQUF3QixZQUFZLENBQUM7UUFDNUMsVUFBSyxHQUFnQixJQUFJLENBQUM7UUFDMUIsZ0JBQVcsR0FBdUIsV0FBVyxDQUFDO1FBNkR2RCxnQkFBVyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzNELGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFHN0QsMEJBQXFCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFHekUseUJBQW9CLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFHeEUsbUJBQWMsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFTcEYsaUJBQVksR0FBcUIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBRTFELDhCQUF5QixHQUFtQztZQUNqRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhO1lBQzFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CO1lBQ3hELHVCQUF1QixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCO1NBQy9ELENBQUM7UUFDSywrQkFBMEIsR0FBNEI7WUFDM0QsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZTtZQUM5QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtZQUNsRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO1lBQzVDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ2hELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWM7WUFDNUMsY0FBYyxFQUFFLElBQUksQ0FBQyx5QkFBeUI7U0FDL0MsQ0FBQztRQUNLLCtCQUEwQixHQUE0QjtZQUMzRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO1lBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7WUFDOUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7WUFDcEQsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN4QyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO1lBQzlDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCO1NBQ3JELENBQUM7UUFDSyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFOUIsY0FBUyxHQUFvQixJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdEQsa0JBQWEsR0FBaUIsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNwRCwyQkFBc0IsR0FBK0IsRUFBRSxDQUFDO1FBQ3hELFVBQUssR0FBbUIsRUFBRSxDQUFDO0lBVW5DLENBQUM7SUF6SEQsSUFBb0QsWUFBWSxDQUFDLFFBQVE7UUFDdkUsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUM3RjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFDVyxRQUFRLENBQUMsS0FBc0I7UUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDOUgsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsWUFBWSxrQkFBa0IsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQzthQUM5QztZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsWUFBWSxrQkFBa0IsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzthQUNuRDtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDMUQ7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNXLFlBQVksQ0FBQyxLQUFtQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUF3Qk0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQStDSyxRQUFROztZQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQXVCLEVBQUUsRUFBRTtnQkFDeEUsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN6SSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzNILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNySSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTt3QkFDaEQsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUN0RCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO2dDQUNqRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dDQUMvQixPQUFPOzZCQUNSO3lCQUNGO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN0SSxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUM1RDtRQUNILENBQUM7S0FBQTtJQUVELGVBQWU7UUFDYixNQUFNLGtCQUFrQixHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUgsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsT0FBbUM7UUFDMUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDL0UsQ0FBQztJQUVZLHlCQUF5QixDQUFDLGlCQUFxQzs7WUFDMUUsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsTUFBTSxVQUFVLEdBQXFCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6SixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hHO3FCQUFNO29CQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxpQkFBaUIsR0FBb0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDM0osSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLElBQUksaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzlGLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDOUU7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN6QzthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRU0sd0JBQXdCLENBQUMsUUFBa0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxLQUFhO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsWUFBWSxrQkFBa0IsRUFBRTtZQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUFvQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNwQixNQUFNLGtCQUFrQixHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztRQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sMkJBQTJCLENBQUMsS0FBYTtRQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQWdCO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRWEsd0JBQXdCLENBQUMsT0FBZ0I7O1lBQ3JELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQzdDLE1BQU0sT0FBTyxHQUFZLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDM0M7UUFDSCxDQUFDO0tBQUE7OztZQTlXRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztnQkFDOUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5R1Q7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGlCQUFpQjtvQkFDakIsMEJBQTBCO2lCQUMzQjtnQkFDRCxVQUFVLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLHdCQUF3QixFQUFFO3dCQUNoQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7d0JBQzdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzt3QkFDNUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDckQsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDbkQsQ0FBQztpQkFDSDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBbkpPLGlCQUFpQjtZQURqQixrQkFBa0I7WUFnQmxCLGVBQWU7WUFDZixhQUFhO1lBT2Isa0NBQWtDO1lBQ2xDLDBCQUEwQjs7OzJCQWtJL0IsWUFBWSxTQUFDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUM7dUJBWTdDLEtBQUs7MkJBNEJMLEtBQUs7bUNBWUwsS0FBSztrQ0FHTCxLQUFLOzBCQUdMLE1BQU07NEJBR04sTUFBTTtvQ0FHTixNQUFNO21DQUdOLE1BQU07NkJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsMENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtTWFzdGVyU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvJztcbmltcG9ydCB7SWNvbn0gZnJvbSAnLi4vLi4vLi4vZW51bS9pY29uLmVudW0nO1xuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ibyc7XG5pbXBvcnQge1JlbGF0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcbmltcG9ydCB7QWRkcmVzc1R5cGV9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9lbnVtL2FkZHJlc3MtdHlwZS5lbnVtJztcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZSc7XG5pbXBvcnQge0FkZHJlc3N9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9hZGRyZXNzLmJvJztcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xuaW1wb3J0IHtTdXBwbGllckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1mdWxsLW9iamVjdC5ibyc7XG5pbXBvcnQge1JlbGF0aW9ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24uYm8nO1xuaW1wb3J0IHtSZWxhdGlvbkxpc3RPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ibyc7XG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL3ZhbGlkYXRpb24tcmVzdWx0JztcbmltcG9ydCB7UmVsYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1JlbGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9yZWxhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQge1JlbGF0aW9uU3VnZ2VzdGlvbnNSZXF1ZXN0fSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2UvcmVsYXRpb24tc3VnZ2VzdGlvbnMtcmVxdWVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtDaGVja291dENmZ05hbWV9IGZyb20gJy4uLy4uLy4uL2VudW0vY2hlY2tvdXQtY2ZnLW5hbWUuZW51bSc7XG5pbXBvcnQge1JlbGF0aW9uR2VuZXJhbENmZ05hbWVzfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2UvcmVsYXRpb24tZ2VuZXJhbC1jZmctbmFtZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7UmVsYXRpb25BZGRyZXNzQ2ZnTmFtZXN9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZS9yZWxhdGlvbi1hZGRyZXNzLWNmZy1uYW1lcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtSZWxhdGlvbkNvbnRhY3REZXRhaWxzQ2ZnTmFtZXN9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZS9yZWxhdGlvbi1jb250YWN0LWRldGFpbHMtY2ZnLW5hbWVzLmludGVyZmFjZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NoZWNrb3V0U2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hlY2tvdXQtc2NyZWVuLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1JlbGF0aW9uU3VnZ2VzdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3JlbGF0aW9uLXN1Z2dlc3Rpb25zLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjby1jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGlvbi1lZGl0LWNvbnRlbnRcIj5cbiAgICAgICAgICA8Y28tZm9ybS10ZXN0PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZm9ybS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gI2luZGV4TGFiZWw+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ1BFUlNPTkFMX0RBVEEnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tdHlwZSAqbmdJZj1cInJlbGF0aW9uS2luZCA9PT0gcmVsS2luZC5DdXN0b21lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImNmZ05hbWVzLlJlbGF0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxhdGlvbkNoYW5nZSk9XCJoYW5kbGVSZWxhdGlvblR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLXR5cGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJlbXB0eS1yZWxhdGlvbi1idXR0b24gZGVmYXVsdC13aWR0aFwiIFtsYWJlbF09XCInRU1QVFknIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbXB0eVJlbGF0aW9uKCRldmVudClcIj48L2NvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIiAqbmdJZj1cInJlbGF0aW9uS2luZCA9PT0gcmVsS2luZC5DdXN0b21lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVsYXRpb24tY3VzdG9tZXItZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RdPVwiY2ZnTmFtZXMuUmVsYXRpb25DdXN0b21lckdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiY3VzdG9tZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZUN1c3RvbWVyR3JvdXBDaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPjwvcmVsYXRpb24tY3VzdG9tZXItZ3JvdXBzPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tZ2VuZXJhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWdOYW1lc109XCJyZWxhdGlvbkdlbmVyYWxDb25maWdOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uXT1cInJlbGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25UeXBlXT1cInJlbGF0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbGF0aW9uQ2hhbmdlKT1cInVwZGF0ZVJlbGF0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZUZvclN1Z2dlc3Rpb25zKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi1nZW5lcmFsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tYWRkcmVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWdOYW1lc109XCJyZWxhdGlvbkFkZHJlc3NDb25maWdOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlRm9yU3VnZ2VzdGlvbnMpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3M+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QWRkcmVzc2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3Nlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25dPVwicmVsYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWRkcmVzc2VzXT1cInJlbGF0aW9uLmFkZHJlc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5hd05yXT1cImRlbGl2ZXJ5QWRkcmVzc05hd05yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkTmF3TnJDaGFuZ2UpPVwiaGFuZGxlRGVsaXZlcnlBZGRyZXNzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28tcmVsYXRpb24tYWRkcmVzc2VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCIgKm5nSWY9XCJyZWxhdGlvbktpbmQgPT09IHJlbEtpbmQuQ3VzdG9tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gI2luZGV4TGFiZWw+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWRlc2NyaXB0aW9uXCIgW3RleHRDb250ZW50XT1cIidJTlZPSUNFX0FERFJFU1MnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCIgKm5nSWY9XCJyZWxhdGlvbktpbmQgPT09IHJlbEtpbmQuQ3VzdG9tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggWyhtb2RlbCldPVwic2VydmljZS5pbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5XCIgKG1vZGVsQ2hhbmdlKT1cImNoZWNrU2FtZUFkZHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTQU1FX0FTX0RFTElWRVJZJyB8IGxvY2FsaXplXCI+PC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVydmlldy1kZWxpdmVyeS1pbnZvaWNlLWFkZHJlc3NcIiAqbmdJZj1cIiFzZXJ2aWNlLmludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzaG93SGlkZUludm9pY2VBZGRyZXNzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3Nlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uXT1cInJlbGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRyZXNzZXNdPVwicmVsYXRpb24uYWN0aXZlQWRkcmVzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5hd05yXT1cImludm9pY2VBZGRyZXNzTmF3TnJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkTmF3TnJDaGFuZ2UpPVwiaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q29udGFjdERldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICNpbmRleExhYmVsPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1kZXNjcmlwdGlvblwiIFt0ZXh0Q29udGVudF09XCInQ09OVEFDVF9ERVRBSUxTJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1jb250YWN0LWRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ05hbWVzXT1cImNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25dPVwicmVsYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25LaW5kXT1cInJlbGF0aW9uS2luZFwiPjwvY28tcmVsYXRpb24tY29udGFjdC1kZXRhaWxzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbGF0aW9uS2luZCA9PT0gcmVsS2luZC5DdXN0b21lciAmJiBzaG93UHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICNpbmRleExhYmVsPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1kZXNjcmlwdGlvblwiIFt0ZXh0Q29udGVudF09XCInUFJJVkFDWV9QUkVGRVJFTkNFUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tcHJlZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWxhdGlvbildPVwicmVsYXRpb25cIj48L2NvLXJlbGF0aW9uLXByZWZlcmVuY2VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2NvLWZvcm0tdGVzdD5cbiAgICAgIDwvZGl2PlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICBGb3JtTWFzdGVyU2VydmljZSxcbiAgICBSZWxhdGlvblN1Z2dlc3Rpb25zU2VydmljZVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2hvd0hpZGVJbnZvaWNlQWRkcmVzcycsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoe2hlaWdodDogMCwgb3BhY2l0eTogMH0pKSxcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoe2hlaWdodDogJyonLCBvcGFjaXR5OiAxfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbi1vdXQnKSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCcyMDBtcyBlYXNlLW91dCcpKVxuICAgIF0pXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRPdmVydmlld1JlbGF0aW9uRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHJlYWRvbmx5IGNmZ05hbWVzOiB0eXBlb2YgQ2hlY2tvdXRDZmdOYW1lID0gQ2hlY2tvdXRDZmdOYW1lO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsS2luZDogdHlwZW9mIFJlbGF0aW9uS2luZCA9IFJlbGF0aW9uS2luZDtcbiAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbiA9IEljb247XG4gIHB1YmxpYyByZWFkb25seSBhZGRyZXNzVHlwZTogdHlwZW9mIEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGU7XG5cbiAgQFZpZXdDaGlsZHJlbignaW5kZXhMYWJlbCcsIHtyZWFkOiBFbGVtZW50UmVmfSkgc2V0IHZpZXdDaGlsZHJlbihjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzcGFucyA9IGNoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICBpZiAoc3Bhbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgc3Bhbi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChpICsgMSA8IDEwKSA/ICcwJyArIChpICsgMSkudG9TdHJpbmcoKSA6IChpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uQW55VHlwZSkge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbiAmJiB2YWx1ZSAmJiB0aGlzLl9yZWxhdGlvbi5yZWxhdGlvbklkICYmIHZhbHVlLnJlbGF0aW9uSWQgJiYgdGhpcy5fcmVsYXRpb24ucmVsYXRpb25JZCA9PT0gdmFsdWUucmVsYXRpb25JZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgaWYgKHRoaXMuX3JlbGF0aW9uIGluc3RhbmNlb2YgU3VwcGxpZXJGdWxsT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uLnR5cGUgPSBSZWxhdGlvbk5hbWVLaW5kLkNvbXBhbnk7XG4gICAgICAgIHRoaXMucmVsYXRpb25UeXBlID0gUmVsYXRpb25OYW1lS2luZC5Db21wYW55O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3JlbGF0aW9uIGluc3RhbmNlb2YgQ3VzdG9tZXJGdWxsT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuY3VzdG9tZXJHcm91cCA9IHRoaXMuX3JlbGF0aW9uLmN1c3RvbWVyR3JvdXA7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZHJlc3MgPSB0aGlzLl9yZWxhdGlvbi5nZXRGaXJzdEFkZHJlc3NPckNyZWF0ZU5ldygpO1xuICAgICAgaWYgKHRoaXMuYWRkcmVzcykge1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yID0gdGhpcy5hZGRyZXNzLm5hd05yO1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc0NoYW5nZS5lbWl0KHRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnIpO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIgPSB0aGlzLmFkZHJlc3MubmF3TnI7XG4gICAgICAgIHRoaXMuaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVsYXRpb24oKTogUmVsYXRpb25BbnlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb247XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlbGF0aW9uS2luZCh2YWx1ZTogUmVsYXRpb25LaW5kKSB7XG4gICAgdGhpcy5fcmVsYXRpb25LaW5kID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uS2luZCA9PT0gUmVsYXRpb25LaW5kLlN1cHBsaWVyKSB7XG4gICAgICB0aGlzLnJlbGF0aW9uVHlwZSA9IFJlbGF0aW9uTmFtZUtpbmQuQ29tcGFueTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlbGF0aW9uS2luZCgpOiBSZWxhdGlvbktpbmQge1xuICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbktpbmQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVsaXZlcnlBZGRyZXNzTmF3TnI6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaW52b2ljZUFkZHJlc3NOYXdOcjogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdmFsaWRTdWJtaXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGludmFsaWRTdWJtaXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGRlbGl2ZXJ5QWRkcmVzc0NoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGludm9pY2VBZGRyZXNzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVsYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWxhdGlvbkFueVR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWxhdGlvbkFueVR5cGU+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0JylcbiAgcHVibGljIHNob3dDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzOiBBZGRyZXNzO1xuICBwdWJsaWMgY3VzdG9tZXJHcm91cDogc3RyaW5nO1xuICBwdWJsaWMgcmVsYXRpb25UeXBlOiBSZWxhdGlvbk5hbWVLaW5kID0gUmVsYXRpb25OYW1lS2luZC5Qcml2YXRlO1xuXG4gIHB1YmxpYyBjb250YWN0RGV0YWlsc0NvbmZpZ05hbWVzOiBSZWxhdGlvbkNvbnRhY3REZXRhaWxzQ2ZnTmFtZXMgPSB7XG4gICAgcmVsYXRpb25QaG9uZTogdGhpcy5jZmdOYW1lcy5SZWxhdGlvblBob25lLFxuICAgIHJlbGF0aW9uRW1haWxBZGRyZXNzOiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uRW1haWxBZGRyZXNzLFxuICAgIHJlbGF0aW9uSW52aXRlVG9BY2NvdW50OiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uSW52aXRlVG9BY2NvdW50XG4gIH07XG4gIHB1YmxpYyByZWxhdGlvbkdlbmVyYWxDb25maWdOYW1lczogUmVsYXRpb25HZW5lcmFsQ2ZnTmFtZXMgPSB7XG4gICAgcmVsYXRpb25Db21wYW55OiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uQ29tcGFueSxcbiAgICByZWxhdGlvbkZpcnN0TmFtZTogdGhpcy5jZmdOYW1lcy5SZWxhdGlvbkZpcnN0TmFtZSxcbiAgICByZWxhdGlvblByZWZpeDogdGhpcy5jZmdOYW1lcy5SZWxhdGlvblByZWZpeCxcbiAgICByZWxhdGlvbkxhc3ROYW1lOiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uTGFzdE5hbWUsXG4gICAgcmVsYXRpb25HZW5kZXI6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25HZW5kZXIsXG4gICAgY29udGFjdERldGFpbHM6IHRoaXMuY29udGFjdERldGFpbHNDb25maWdOYW1lc1xuICB9O1xuICBwdWJsaWMgcmVsYXRpb25BZGRyZXNzQ29uZmlnTmFtZXM6IFJlbGF0aW9uQWRkcmVzc0NmZ05hbWVzID0ge1xuICAgIHJlbGF0aW9uU3RyZWV0OiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uU3RyZWV0LFxuICAgIHJlbGF0aW9uSG91c2VOcjogdGhpcy5jZmdOYW1lcy5SZWxhdGlvbkhvdXNlTnIsXG4gICAgcmVsYXRpb25Ib3VzZU5yQWRkOiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uSG91c2VOckFkZCxcbiAgICByZWxhdGlvbkNpdHk6IHRoaXMuY2ZnTmFtZXMuUmVsYXRpb25DaXR5LFxuICAgIHJlbGF0aW9uQ291bnRyeTogdGhpcy5jZmdOYW1lcy5SZWxhdGlvbkNvdW50cnksXG4gICAgcmVsYXRpb25Qb3N0YWxDb2RlOiB0aGlzLmNmZ05hbWVzLlJlbGF0aW9uUG9zdGFsQ29kZVxuICB9O1xuICBwdWJsaWMgc2hvd0NvbnRhY3REZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93UHJlZmVyZW5jZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0FkZHJlc3NlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XG4gIHByaXZhdGUgX3JlbGF0aW9uS2luZDogUmVsYXRpb25LaW5kID0gUmVsYXRpb25LaW5kLkN1c3RvbWVyO1xuICBwcml2YXRlIF9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnM6IFJlbGF0aW9uU3VnZ2VzdGlvbnNSZXF1ZXN0ID0ge307XG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZm9ybU1hc3RlcjogRm9ybU1hc3RlclNlcnZpY2UsXG4gICAgcHVibGljIHNlcnZpY2U6IFRyYW5zYWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9yZWxhdGlvblNlcnZpY2U6IFJlbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NjcmVlbkNvbmZpZ1NlcnZpY2U6IENoZWNrb3V0U2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3VnZ2VzdGlvbnNTZXJ2aWNlOiBSZWxhdGlvblN1Z2dlc3Rpb25zU2VydmljZVxuICApIHtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3N1Z2dlc3Rpb25zU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5fc3Vicy5wdXNoKFxuICAgICAgdGhpcy5fc2NyZWVuQ29uZmlnU2VydmljZS5jb25maWdTZXQuc3Vic2NyaWJlKChjb25maWdPYmplY3RzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBpZiAoY29uZmlnT2JqZWN0cyAmJiBjb25maWdPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNob3dQcmVmZXJlbmNlcyA9IHRoaXMuX3NjcmVlbkNvbmZpZ1NlcnZpY2UuZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcih0aGlzLmNmZ05hbWVzLlJlbGF0aW9uUHJlZmVyZW5jZXNIZWFkZXIpLmltbWVkaWF0ZWx5VmlzaWJsZSgpO1xuICAgICAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb25zID0gdGhpcy5fc2NyZWVuQ29uZmlnU2VydmljZS5nZXRPYmplY3RDb25maWd1cmF0aW9uRm9yKHRoaXMuY2ZnTmFtZXMuU3VnZ2VzdGlvbnMpLmltbWVkaWF0ZWx5VmlzaWJsZSgpO1xuICAgICAgICAgIHRoaXMuc2hvd0FkZHJlc3NlcyA9IHRoaXMuX3NjcmVlbkNvbmZpZ1NlcnZpY2UuZ2V0T2JqZWN0Q29uZmlndXJhdGlvbkZvcih0aGlzLmNmZ05hbWVzLlJlbGF0aW9uQWRkcmVzc2VzSGVhZGVyKS5pbW1lZGlhdGVseVZpc2libGUoKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhY3REZXRhaWxzQ29uZmlnTmFtZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fc2NyZWVuQ29uZmlnU2VydmljZS5nZXRPYmplY3RDb25maWd1cmF0aW9uRm9yKGtleSkuaW1tZWRpYXRlbHlWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDb250YWN0RGV0YWlscyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zU2VydmljZS5zdWdnZXN0ZWRSZWxhdGlvbkNsaWNrLnN1YnNjcmliZSgocmVsYXRpb246IFJlbGF0aW9uTGlzdE9iamVjdCkgPT4gdGhpcy5vblJlbGF0aW9uU3VnZ2VzdGlvbkNsaWNrKHJlbGF0aW9uKSlcbiAgICApO1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5hZGRyZXNzID0gdGhpcy5fcmVsYXRpb24uZ2V0Rmlyc3RBZGRyZXNzT3JDcmVhdGVOZXcoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RBY3RpdmVBZGRyZXNzOiBBZGRyZXNzID0gdGhpcy5fcmVsYXRpb24uYWN0aXZlQWRkcmVzc2VzLmxlbmd0aCA+IDAgPyB0aGlzLl9yZWxhdGlvbi5hY3RpdmVBZGRyZXNzZXNbMF0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKCF0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yKSB7XG4gICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yID0gZmlyc3RBY3RpdmVBZGRyZXNzID8gZmlyc3RBY3RpdmVBZGRyZXNzLm5hd05yIDogMDtcbiAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzQ2hhbmdlLmVtaXQodGhpcy5kZWxpdmVyeUFkZHJlc3NOYXdOcik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pbnZvaWNlQWRkcmVzc05hd05yKSB7XG4gICAgICB0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIgPSBmaXJzdEFjdGl2ZUFkZHJlc3MgPyBmaXJzdEFjdGl2ZUFkZHJlc3MubmF3TnIgOiAwO1xuICAgICAgdGhpcy5pbnZvaWNlQWRkcmVzc0NoYW5nZS5lbWl0KHRoaXMuaW52b2ljZUFkZHJlc3NOYXdOcik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVJbnB1dENoYW5nZShyZXF1ZXN0OiBSZWxhdGlvblN1Z2dlc3Rpb25zUmVxdWVzdCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcXVlc3RGb3JTdWdnZXN0aW9ucyA9IE9iamVjdC5hc3NpZ24odGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zLCByZXF1ZXN0KTtcbiAgICB0aGlzLl9zdWdnZXN0aW9uc1NlcnZpY2UucmVxdWVzdEZvclN1Z2dlc3Rpb25zID0gdGhpcy5fcmVxdWVzdEZvclN1Z2dlc3Rpb25zO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uUmVsYXRpb25TdWdnZXN0aW9uQ2xpY2socmVsYXRpb25TdWdnZXN0ZWQ6IFJlbGF0aW9uTGlzdE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZWxhdGlvblN1Z2dlc3RlZCkge1xuICAgICAgY29uc3QgbG9ja1Jlc3VsdDogVmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlbGF0aW9uU2VydmljZS5sb2NrUmVsYXRpb24ocmVsYXRpb25TdWdnZXN0ZWQucmVsYXRpb25UeXBlLCBwYXJzZUludChyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbk5yLCAwKSk7XG4gICAgICBpZiAoIWxvY2tSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLnNob3dFcnJvcignUkVMQVRJT05fQUxSRUFEWV9MT0NLRUQnLCB0cnVlLCBsb2NrUmVzdWx0Lm1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNTZXJ2aWNlLmhpZGVTaWRlYmFyKCk7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3RlZFJlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBhd2FpdCB0aGlzLl9yZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb24ocmVsYXRpb25TdWdnZXN0ZWQucmVsYXRpb25UeXBlLCBwYXJzZUludChyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbk5yKSk7XG4gICAgICAgIGlmIChzdWdnZXN0ZWRSZWxhdGlvbiAmJiBzdWdnZXN0ZWRSZWxhdGlvbi5hZGRyZXNzZXMgJiYgc3VnZ2VzdGVkUmVsYXRpb24uYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzdWdnZXN0ZWRSZWxhdGlvbi5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsYXRpb24gPSBzdWdnZXN0ZWRSZWxhdGlvbjtcbiAgICAgICAgdGhpcy5yZWxhdGlvbkNoYW5nZS5uZXh0KHRoaXMucmVsYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZWxhdGlvblR5cGVDaGFuZ2UocmVsYXRpb246IFJlbGF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5yZWxhdGlvblR5cGUgPSByZWxhdGlvbi50eXBlO1xuICB9XG5cbiAgcHVibGljIGVtcHR5UmVsYXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuY3JlYXRlTmV3UmVsYXRpb24oKTtcbiAgICB0aGlzLl9yZXF1ZXN0Rm9yU3VnZ2VzdGlvbnMgPSB7fTtcbiAgICB0aGlzLl9yZWxhdGlvblNlcnZpY2UucmVsYXRpb25TdWdnZXN0aW9uc1JlcXVlc3RDbGVhci5uZXh0KCk7XG4gICAgdGhpcy5fc3VnZ2VzdGlvbnNTZXJ2aWNlLmhpZGVTaWRlYmFyKCk7XG4gICAgLy8gdGhpcy5oaWRlU2lkZWJhcigpO1xuICAgIHRoaXMudXBkYXRlUmVsYXRpb24odGhpcy5zZXJ2aWNlLnJlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDdXN0b21lckdyb3VwQ2hhbmdlKGdyb3VwOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbWVyR3JvdXAgPSBncm91cDtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24gaW5zdGFuY2VvZiBDdXN0b21lckZ1bGxPYmplY3QpIHtcbiAgICAgIHRoaXMuX3JlbGF0aW9uLmN1c3RvbWVyR3JvdXAgPSB0aGlzLmN1c3RvbWVyR3JvdXA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlbGF0aW9uKHJlbDogUmVsYXRpb25BbnlUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5yZWxhdGlvbiA9IHJlbDtcbiAgICBjb25zdCBmaXJzdEFjdGl2ZUFkZHJlc3M6IEFkZHJlc3MgPSB0aGlzLl9yZWxhdGlvbi5hY3RpdmVBZGRyZXNzZXMubGVuZ3RoID4gMCA/IHRoaXMuX3JlbGF0aW9uLmFjdGl2ZUFkZHJlc3Nlc1swXSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFkZHJlc3MgPSBmaXJzdEFjdGl2ZUFkZHJlc3M7XG4gICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NOYXdOciA9IGZpcnN0QWN0aXZlQWRkcmVzcyA/IGZpcnN0QWN0aXZlQWRkcmVzcy5uYXdOciA6IDA7XG4gICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmRlbGl2ZXJ5QWRkcmVzc05hd05yKTtcbiAgICB0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIgPSBmaXJzdEFjdGl2ZUFkZHJlc3MgPyBmaXJzdEFjdGl2ZUFkZHJlc3MubmF3TnIgOiAwO1xuICAgIHRoaXMuaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdCh0aGlzLmludm9pY2VBZGRyZXNzTmF3TnIpO1xuICAgIHRoaXMucmVsYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnJlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1NYXN0ZXIuc3VibWl0U2xhdmVzKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRGVsaXZlcnlBZGRyZXNzQ2hhbmdlKG5hd05yOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc0NoYW5nZS5lbWl0KG5hd05yKTtcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnkpIHtcbiAgICAgIHRoaXMuaW52b2ljZUFkZHJlc3NDaGFuZ2UuZW1pdChuYXdOcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoZWNrU2FtZUFkZHJlc3MoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW52b2ljZUFkZHJlc3NOYXdOciA9IHRoaXMuZGVsaXZlcnlBZGRyZXNzTmF3TnI7XG4gICAgdGhpcy5pbnZvaWNlQWRkcmVzc0NoYW5nZS5uZXh0KHRoaXMuaW52b2ljZUFkZHJlc3NOYXdOcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXRDb3VudHJ5TmFtZVRvQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGFkZHJlc3MuY291bnRyeUlkICYmICFhZGRyZXNzLmNvdW50cnlOYW1lKSB7XG4gICAgICBjb25zdCBjb3VudHJ5OiBDb3VudHJ5ID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmdldENvdW50cnkoYWRkcmVzcy5jb3VudHJ5SWQpO1xuICAgICAgYWRkcmVzcy5jb3VudHJ5TmFtZSA9IGNvdW50cnkuZGVzY3JpcHRpb247XG4gICAgfVxuICB9XG59XG4iXX0=
|