@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
139 lines • 32.5 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Subscription } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
export class IndirizzoPagamentoComponent {
constructor() {
this.selectedProvinciaEmitter = new EventEmitter();
this.selectedComuneEmitter = new EventEmitter();
this.indirizzoEmitter = new EventEmitter();
this.subscription = new Subscription();
// this.initIndirizzoForm();
// this.subscription.add(this.indirizzoForm.controls['isEstero'].valueChanges.subscribe(isEstero => {
// this.indirizzoForm.controls['civico'].setValidators(isEstero ? [] : [Validators.required]);
// this.indirizzoForm.controls['civico'].patchValue(null);
// this.indirizzoForm.controls['civico'].updateValueAndValidity();
// this.indirizzoForm.controls['provincia'].setValidators(isEstero ? [] : [Validators.required]);
// this.indirizzoForm.controls['provincia'].patchValue(null);
// this.indirizzoForm.controls['provincia'].updateValueAndValidity();
// this.indirizzoForm.controls['comune'].setValidators(isEstero ? [] : [Validators.required]);
// this.indirizzoForm.controls['comune'].patchValue(null);
// this.indirizzoForm.controls['comune'].updateValueAndValidity();
// this.indirizzoForm.controls['cap'].setValidators(isEstero ? [] : [Validators.required]);
// this.indirizzoForm.controls['cap'].patchValue(null);
// this.indirizzoForm.controls['cap'].updateValueAndValidity();
// this.indirizzoForm.controls['nazione'].setValidators(isEstero ? [Validators.required] : []);
// this.indirizzoForm.controls['nazione'].patchValue(null);
// this.indirizzoForm.controls['nazione'].updateValueAndValidity();
// }));
// this.subscription.add(this.indirizzoForm.controls['provincia'].valueChanges.subscribe(siglaProvincia => this.selectedProvinciaEmitter.emit(siglaProvincia)));
// this.subscription.add(this.indirizzoForm.controls['comune'].valueChanges.subscribe(codiceCatastale => this.selectedComuneEmitter.emit(codiceCatastale)));
}
set _disableForm(val) {
this.disableForm = val;
if (this.disableForm) {
this.indirizzoForm.disable();
}
else {
this.indirizzoForm.enable();
}
}
ngOnInit() {
this.initIndirizzoForm();
this.setFormControlsValue();
this.subscription.add(this.indirizzoForm.controls['isEstero'].valueChanges.subscribe(isEstero => {
this.indirizzoForm.controls['civico'].setValidators(isEstero ? [] : [Validators.required]);
this.indirizzoForm.controls['civico'].patchValue(null);
this.indirizzoForm.controls['civico'].updateValueAndValidity();
this.indirizzoForm.controls['provincia'].setValidators(isEstero ? [] : [Validators.required]);
this.indirizzoForm.controls['provincia'].patchValue(null);
this.indirizzoForm.controls['provincia'].updateValueAndValidity();
this.indirizzoForm.controls['comune'].setValidators(isEstero ? [] : [Validators.required]);
this.indirizzoForm.controls['comune'].patchValue(null);
this.indirizzoForm.controls['comune'].updateValueAndValidity();
this.indirizzoForm.controls['cap'].setValidators(isEstero ? [] : [Validators.required]);
this.indirizzoForm.controls['cap'].patchValue(null);
this.indirizzoForm.controls['cap'].updateValueAndValidity();
this.indirizzoForm.controls['nazione'].setValidators(isEstero ? [Validators.required] : []);
this.indirizzoForm.controls['nazione'].patchValue(null);
this.indirizzoForm.controls['nazione'].updateValueAndValidity();
}));
this.subscription.add(this.indirizzoForm.controls['provincia'].valueChanges.subscribe(siglaProvincia => this.selectedProvinciaEmitter.emit(siglaProvincia)));
this.subscription.add(this.indirizzoForm.controls['comune'].valueChanges.subscribe(codiceCatastale => this.selectedComuneEmitter.emit(codiceCatastale)));
this.indirizzoEmit();
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
initIndirizzoForm() {
this.indirizzoForm = new FormGroup({
isEstero: new FormControl(null),
indirizzo: new FormControl(null, [Validators.required]),
nazione: new FormControl(null),
civico: new FormControl(null),
provincia: new FormControl(null),
comune: new FormControl(null),
cap: new FormControl(null),
});
}
onProvinciaChange(siglaProvincia) {
this.indirizzoForm.controls['comune'].patchValue(null);
this.indirizzoForm.controls['comune'].markAsTouched();
this.indirizzoForm.controls['cap'].patchValue(null);
this.indirizzoForm.controls['cap'].markAsTouched();
}
onComuneChange(codiceCatastale) {
this.indirizzoForm.controls['cap'].patchValue(null);
this.indirizzoForm.controls['cap'].markAsTouched();
}
indirizzoEmit() {
this.subscription.add(this.indirizzoForm.valueChanges.pipe(debounceTime(500)).subscribe((_) => {
const indirizzo = {
strada: {
civico: this.indirizzoForm.controls['civico'].value,
inidirizzo: this.indirizzoForm.controls['indirizzo'].value,
tipoToponimo: null
},
localita: {
cap: this.indirizzoForm.controls['cap'].value,
comune: this.indirizzoForm.controls['comune'].value,
nazione: this.indirizzoForm.controls['nazione'].value,
provincia: this.indirizzoForm.controls['provincia'].value
}
};
const isValid = this.indirizzoForm.valid;
this.indirizzoEmitter.emit({ indirizzo: indirizzo ? indirizzo : null, isValid: isValid });
}));
}
setFormControlsValue() {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
this.indirizzoForm.controls['isEstero'].setValue(this.indirizzo && ((_b = (_a = this.indirizzo) === null || _a === void 0 ? void 0 : _a.localita) === null || _b === void 0 ? void 0 : _b.comune.startsWith("Z")) ? true : false);
this.indirizzoForm.controls['indirizzo'].setValue(this.indirizzo ? this.indirizzo.strada.inidirizzo : null);
this.indirizzoForm.controls['nazione'].setValue(this.indirizzo ? (_d = (_c = this.indirizzo) === null || _c === void 0 ? void 0 : _c.localita) === null || _d === void 0 ? void 0 : _d.nazione : null);
this.indirizzoForm.controls['civico'].setValue(this.indirizzo ? this.indirizzo.strada.civico : null);
this.indirizzoForm.controls['provincia'].setValue(this.indirizzo && !((_f = (_e = this.indirizzo) === null || _e === void 0 ? void 0 : _e.localita) === null || _f === void 0 ? void 0 : _f.comune.startsWith("Z")) ? this.indirizzo.localita.provincia : null);
this.indirizzoForm.controls['comune'].setValue(this.indirizzo && !((_h = (_g = this.indirizzo) === null || _g === void 0 ? void 0 : _g.localita) === null || _h === void 0 ? void 0 : _h.comune.startsWith("Z")) ? this.indirizzo.localita.comune : null);
this.indirizzoForm.controls['cap'].setValue(this.indirizzo && !((_k = (_j = this.indirizzo) === null || _j === void 0 ? void 0 : _j.localita) === null || _k === void 0 ? void 0 : _k.comune.startsWith("Z")) ? this.indirizzo.localita.cap : null);
}
}
IndirizzoPagamentoComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-indirizzo-pagamento',
template: "<form [formGroup]=\"indirizzoForm\" [ngxsForm]=\"ngxsFormPath\">\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"row align-items-center\">\r\n\t\t\t\t<div class=\"col-12 col-md-4\">\r\n\t\t\t\t\t<mat-checkbox formControlName=\"isEstero\" color=\"primary\">\r\n\t\t\t\t\t\t<info-tip-label label=\"indirizzo-estero\"></info-tip-label>\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\">\r\n\t\t\t\t<div class=\"col-12 col-md-4\" *ngIf=\"indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'nazione' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"nazione\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let nazione of nazioni\" [value]=\"nazione.codiceCatastale\">\r\n\t\t\t\t\t\t\t\t{{ nazione.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['nazione'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12\" [ngClass]=\"indirizzoForm.controls['isEstero'].value ? ' col-md-8': ' col-md-10'\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'indirizzo' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<input [maxlength]=\"70\" formControlName=\"indirizzo\" matInput>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['indirizzo'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-2\" *ngIf=\"!indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{'civico' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<input [maxlength]=\"16\" formControlName=\"civico\" matInput>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['civico'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row\" *ngIf=\"!indirizzoForm.controls['isEstero'].value\">\r\n\t\t\t\t<div class=\"col-12 col-md-5\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'provincia' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"provincia\" (valueChange)=\"onProvinciaChange($event)\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let provincia of province\" [value]=\"provincia.sigla\">\r\n\t\t\t\t\t\t\t\t{{ provincia.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['provincia'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-5\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'comune' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"comune\" (valueChange)=\"onComuneChange($event)\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let comune of comuni\" [value]=\"comune.codiceCatastale\">\r\n\t\t\t\t\t\t\t\t{{ comune.denominazione }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['comune'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"col-12 col-md-2\">\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'cap' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t<mat-select formControlName=\"cap\">\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let cap of capOptions\" [value]=\"cap\">\r\n\t\t\t\t\t\t\t\t{{ cap }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"indirizzoForm.controls['cap'].invalid\">\r\n\t\t\t\t\t\t\t{{ 'validation-required' | traduzione }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n\r\n\r\n",
styles: [""]
},] }
];
IndirizzoPagamentoComponent.ctorParameters = () => [];
IndirizzoPagamentoComponent.propDecorators = {
ngxsFormPath: [{ type: Input }],
nazioni: [{ type: Input }],
province: [{ type: Input }],
comuni: [{ type: Input }],
capOptions: [{ type: Input }],
indirizzo: [{ type: Input }],
_disableForm: [{ type: Input, args: ['disableForm',] }],
selectedProvinciaEmitter: [{ type: Output }],
selectedComuneEmitter: [{ type: Output }],
indirizzoEmitter: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaXJpenpvLXBhZ2FtZW50by5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsaXRhLXBhZ2FtZW50by9jb21wb25lbnRzL2luZGlyaXp6by1wYWdhbWVudG8vaW5kaXJpenpvLXBhZ2FtZW50by5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFRNUMsTUFBTSxPQUFPLDJCQUEyQjtJQTZDdkM7UUFaQSw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBR3RELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHbkQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFJL0UsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd2RCw0QkFBNEI7UUFDNUIscUdBQXFHO1FBQ3JHLCtGQUErRjtRQUMvRiwyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLGtHQUFrRztRQUNsRyw4REFBOEQ7UUFDOUQsc0VBQXNFO1FBQ3RFLCtGQUErRjtRQUMvRiwyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLDRGQUE0RjtRQUM1Rix3REFBd0Q7UUFDeEQsZ0VBQWdFO1FBQ2hFLGdHQUFnRztRQUNoRyw0REFBNEQ7UUFDNUQsb0VBQW9FO1FBQ3BFLE9BQU87UUFDUCxnS0FBZ0s7UUFDaEssNEpBQTRKO0lBQzdKLENBQUM7SUE5Q0QsSUFDSSxZQUFZLENBQUMsR0FBWTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUF3Q0QsUUFBUTtRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxD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QUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsSyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1SixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2SixDQUFDOzs7WUFoS0QsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLHV2SUFBbUQ7O2FBRW5EOzs7OzJCQUdDLEtBQUs7c0JBR0wsS0FBSzt1QkFHTCxLQUFLO3FCQUdMLEtBQUs7eUJBR0wsS0FBSzt3QkFHTCxLQUFLOzJCQUdMLEtBQUssU0FBQyxhQUFhO3VDQVluQixNQUFNO29DQUdOLE1BQU07K0JBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtDb211bmVNb2RlbCwgSW5kaXJpenpvTW9kZWwsIExvY2FsaXRhTW9kZWwsIE5hemlvbmVNb2RlbH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VzdHJlbWktcGVyc29uYS1maXNpY2EubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItaW5kaXJpenpvLXBhZ2FtZW50bycsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2luZGlyaXp6by1wYWdhbWVudG8uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2luZGlyaXp6by1wYWdhbWVudG8uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZGlyaXp6b1BhZ2FtZW50b0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0QElucHV0KClcclxuICBuZ3hzRm9ybVBhdGg6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRuYXppb25pOiBOYXppb25lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRwcm92aW5jZTogTG9jYWxpdGFNb2RlbFtdO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNvbXVuaTogQ29tdW5lTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRjYXBPcHRpb25zOiBzdHJpbmdbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRpbmRpcml6em86IEluZGlyaXp6b01vZGVsO1xyXG5cclxuXHRASW5wdXQoJ2Rpc2FibGVGb3JtJylcclxuXHRzZXQgX2Rpc2FibGVGb3JtKHZhbDogYm9vbGVhbikge1xyXG5cdCAgdGhpcy5kaXNhYmxlRm9ybSA9IHZhbDtcclxuXHQgIGlmICh0aGlzLmRpc2FibGVGb3JtKSB7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uZGlzYWJsZSgpO1xyXG5cdCAgfSBlbHNlIHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5lbmFibGUoKTtcclxuXHQgIH1cclxuXHR9XHJcblxyXG5cdGRpc2FibGVGb3JtOiBib29sZWFuO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzZWxlY3RlZFByb3ZpbmNpYUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0c2VsZWN0ZWRDb211bmVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGluZGlyaXp6b0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRpbmRpcml6em9Gb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly8gdGhpcy5pbml0SW5kaXJpenpvRm9ybSgpO1xyXG5cdFx0Ly8gdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGlzRXN0ZXJvID0+IHtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NpdmljbyddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2l2aWNvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ3Byb3ZpbmNpYSddLnNldFZhbGlkYXRvcnMoaXNFc3Rlcm8gPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10uc2V0VmFsaWRhdG9ycyhpc0VzdGVybyA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdC8vIFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHQvLyBcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2FwJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0Ly8gXHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHQvLyB9KSk7XHJcblx0XHQvLyB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNpZ2xhUHJvdmluY2lhID0+IHRoaXMuc2VsZWN0ZWRQcm92aW5jaWFFbWl0dGVyLmVtaXQoc2lnbGFQcm92aW5jaWEpKSk7XHJcblx0XHQvLyB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvZGljZUNhdGFzdGFsZSA9PiB0aGlzLnNlbGVjdGVkQ29tdW5lRW1pdHRlci5lbWl0KGNvZGljZUNhdGFzdGFsZSkpKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbml0SW5kaXJpenpvRm9ybSgpO1xyXG5cdFx0dGhpcy5zZXRGb3JtQ29udHJvbHNWYWx1ZSgpO1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGlzRXN0ZXJvID0+IHtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NpdmljbyddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2l2aWNvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ3Byb3ZpbmNpYSddLnNldFZhbGlkYXRvcnMoaXNFc3Rlcm8gPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10uc2V0VmFsaWRhdG9ycyhpc0VzdGVybyA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY2FwJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWxpZGF0b3JzKGlzRXN0ZXJvID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KSk7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydwcm92aW5jaWEnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNpZ2xhUHJvdmluY2lhID0+IHRoaXMuc2VsZWN0ZWRQcm92aW5jaWFFbWl0dGVyLmVtaXQoc2lnbGFQcm92aW5jaWEpKSk7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjb211bmUnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvZGljZUNhdGFzdGFsZSA9PiB0aGlzLnNlbGVjdGVkQ29tdW5lRW1pdHRlci5lbWl0KGNvZGljZUNhdGFzdGFsZSkpKTtcclxuXHJcblx0XHR0aGlzLmluZGlyaXp6b0VtaXQoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdGluaXRJbmRpcml6em9Gb3JtKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGlzRXN0ZXJvOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHRcdGluZGlyaXp6bzogbmV3IEZvcm1Db250cm9sKG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdG5hemlvbmU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0Y2l2aWNvOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHRcdHByb3ZpbmNpYTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG5cdFx0XHRjb211bmU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0Y2FwOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG9uUHJvdmluY2lhQ2hhbmdlKHNpZ2xhUHJvdmluY2lhOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10ubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHRvbkNvbXVuZUNoYW5nZShjb2RpY2VDYXRhc3RhbGU6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHRpbmRpcml6em9FbWl0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaW5kaXJpenpvRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0XHRkZWJvdW5jZVRpbWUoNTAwKSxcclxuXHRcdFx0XHQvLyBmaWx0ZXIoKCkgPT4gdGhpcy5pbmRpcml6em9Gb3JtLnZhbGlkKSxcclxuXHRcdFx0KS5zdWJzY3JpYmUoKF8pID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbmRpcml6em86IEluZGlyaXp6b01vZGVsID0ge1xyXG5cdFx0XHRcdFx0c3RyYWRhOiB7XHJcblx0XHRcdFx0XHRcdGNpdmljbzogdGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0aW5pZGlyaXp6bzogdGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydpbmRpcml6em8nXS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0dGlwb1RvcG9uaW1vOiBudWxsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bG9jYWxpdGE6IHtcclxuXHRcdFx0XHRcdFx0Y2FwOiB0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NhcCddLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRjb211bmU6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snY29tdW5lJ10udmFsdWUsXHJcblx0XHRcdFx0XHRcdG5hemlvbmU6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snbmF6aW9uZSddLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRwcm92aW5jaWE6IHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10udmFsdWVcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlzVmFsaWQgPSB0aGlzLmluZGlyaXp6b0Zvcm0udmFsaWQ7XHJcblx0XHRcdFx0dGhpcy5pbmRpcml6em9FbWl0dGVyLmVtaXQoeyBpbmRpcml6em86IGluZGlyaXp6byA/IGluZGlyaXp6byA6IG51bGwsIGlzVmFsaWQ6IGlzVmFsaWQgfSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9ybUNvbnRyb2xzVmFsdWUoKTogdm9pZHtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1snaXNFc3Rlcm8nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byAmJiB0aGlzLmluZGlyaXp6bz8ubG9jYWxpdGE/LmNvbXVuZS5zdGFydHNXaXRoKFwiWlwiKSA/ICB0cnVlIDogZmFsc2UpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydpbmRpcml6em8nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvLnN0cmFkYS5pbmlkaXJpenpvIDogbnVsbCk7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvPy5sb2NhbGl0YT8ubmF6aW9uZSA6IG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjaXZpY28nXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byA/IHRoaXMuaW5kaXJpenpvLnN0cmFkYS5jaXZpY28gOiBudWxsKTtcclxuXHRcdHRoaXMuaW5kaXJpenpvRm9ybS5jb250cm9sc1sncHJvdmluY2lhJ10uc2V0VmFsdWUodGhpcy5pbmRpcml6em8gJiYgIXRoaXMuaW5kaXJpenpvPy5sb2NhbGl0YT8uY29tdW5lLnN0YXJ0c1dpdGgoXCJaXCIpID8gdGhpcy5pbmRpcml6em8ubG9jYWxpdGEucHJvdmluY2lhIDogbnVsbCk7XHJcblx0XHR0aGlzLmluZGlyaXp6b0Zvcm0uY29udHJvbHNbJ2NvbXVuZSddLnNldFZhbHVlKHRoaXMuaW5kaXJpenpvICYmICF0aGlzLmluZGlyaXp6bz8ubG9jYWxpdGE/LmNvbXVuZS5zdGFydHNXaXRoKFwiWlwiKSA/IHRoaXMuaW5kaXJpenpvLmxvY2FsaXRhLmNvbXVuZSA6IG51bGwpO1xyXG5cdFx0dGhpcy5pbmRpcml6em9Gb3JtLmNvbnRyb2xzWydjYXAnXS5zZXRWYWx1ZSh0aGlzLmluZGlyaXp6byAmJiAhdGhpcy5pbmRpcml6em8/LmxvY2FsaXRhPy5jb211bmUuc3RhcnRzV2l0aChcIlpcIikgPyB0aGlzLmluZGlyaXp6by5sb2NhbGl0YS5jYXAgOiBudWxsKTtcclxuXHR9XHJcbn1cclxuIl19