UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

141 lines 29.6 kB
import { Component, EventEmitter, Input, Output, } from "@angular/core"; import { FormControl, FormGroup, Validators } from "@angular/forms"; import * as moment from "moment"; import { filter, map, startWith, switchMap, tap } from "rxjs/operators"; import { InfoNascitaPFDTO } from "../../models/info-nascita-pf.dto"; import { ComponentOutputStatus } from "../../normalizzazione/component-output-status"; import { MessageService } from "../../services/message.service"; import { TerritorioService } from "../../services/territorio/territorio-service"; import { ValidationService } from "../../services/validation.service"; export class InfoNascitaComponent { constructor(msg, territorio, validationService, territorioService) { this.msg = msg; this.territorio = territorio; this.validationService = validationService; this.territorioService = territorioService; this.maxDate = new Date(); this.readOnly = false; this.done = new EventEmitter(); this.ITALIA = 'IT'; this.ITALIACodCat = 'Z000'; this.nazioni$ = territorioService.getNazioni$(); this.nazioni$.subscribe(nazioni => { this.nazioni = nazioni; }); } ngOnChanges(changes) { this.initialize(); } ngOnInit() { var _a, _b, _c; // console.log('[InfoNascitaComponent] infonascita', this.infonascita); this.form = new FormGroup({}); this.initialize(); // const isNatoEstero = // this.infonascita.comuneNascita != null && // this.infonascita.comuneNascita.startsWith("Z"); const isNatoEstero = ((_a = this.infonascita) === null || _a === void 0 ? void 0 : _a.isNatoEstero) ? this.infonascita.isNatoEstero : false; if (!isNatoEstero) { this.infonascita.nazioneNascita = this.ITALIA; this.infonascita.codCatNazioneNascita = this.ITALIACodCat; } const isNatoEsteroCheck = new FormControl({ value: isNatoEstero, disabled: false }, [Validators.required]); this.form.addControl("isNatoEstero", isNatoEsteroCheck); const provinciaNascita = new FormControl({ value: this.infonascita.provinciaNascita, disabled: false }, [Validators.required]); this.form.addControl("provinciaNascita", provinciaNascita); const comuneNascita = new FormControl({ value: ((_b = this.infonascita) === null || _b === void 0 ? void 0 : _b.comuneNascita) ? (_c = this.infonascita) === null || _c === void 0 ? void 0 : _c.comuneNascita : this.ITALIACodCat, disabled: false }, [Validators.required]); this.form.addControl("comuneNascita", comuneNascita); const dataNascita = new FormControl({ value: this.infonascita.dataNascita, disabled: false }, [Validators.required, ValidationService.ValidateDate]); this.form.addControl("dataNascita", dataNascita); const codCatNazioneNascita = new FormControl({ value: this.infonascita.codCatNazioneNascita, disabled: false }, [Validators.required]); this.form.addControl("codCatNazioneNascita", codCatNazioneNascita); if (this.readOnly) { this.form.disable(); this.isNatoEstero$ = isNatoEsteroCheck.valueChanges.pipe(startWith(isNatoEstero)); } else { this.isNatoEstero$ = isNatoEsteroCheck.valueChanges.pipe(tap(isEstero => isEstero ? codCatNazioneNascita.setValue(null) : (provinciaNascita.setValue(null), comuneNascita.setValue(null))), startWith(isNatoEstero), tap((isEstero) => { if (isEstero) { codCatNazioneNascita.enable(); comuneNascita.disable(); provinciaNascita.disable(); } else { codCatNazioneNascita.disable(); comuneNascita.enable(); provinciaNascita.enable(); } })); } const changes$ = this.form.valueChanges.pipe(map((_) => { var _a, _b; const infonascita = new InfoNascitaPFDTO(); infonascita.dataNascita = moment(this.form.controls["dataNascita"].value).toDate(); if ((_a = this.form.controls["isNatoEstero"]) === null || _a === void 0 ? void 0 : _a.value) { infonascita.isNatoEstero = this.form.controls["isNatoEstero"].value; //infonascita.comuneNascita = null; if ((_b = this.form.controls["codCatNazioneNascita"]) === null || _b === void 0 ? void 0 : _b.value) { let nazioneSelected = this.nazioni.find(nazione => { var _a; return nazione.codiceCatastale == ((_a = this.form.controls["codCatNazioneNascita"]) === null || _a === void 0 ? void 0 : _a.value); }); if (nazioneSelected) { infonascita.codCatNazioneNascita = nazioneSelected.codiceCatastale; infonascita.nazioneNascita = nazioneSelected.sigla; infonascita.comuneNascita = nazioneSelected.codiceCatastale; } } infonascita.provinciaNascita = "EE"; } else { infonascita.isNatoEstero = null; infonascita.comuneNascita = this.form.controls["comuneNascita"].value; infonascita.provinciaNascita = this.form.controls["provinciaNascita"].value; infonascita.codCatNazioneNascita = this.ITALIACodCat; infonascita.nazioneNascita = this.ITALIA; } return infonascita; }), startWith(this.infonascita), map((infonascita) => ComponentOutputStatus.of(this.form.valid || this.readOnly, infonascita))); this.subscription = changes$.subscribe((_) => this.done.emit(_)); this.comuni$ = provinciaNascita.valueChanges.pipe(tap(_ => comuneNascita.setValue(null)), startWith(this.infonascita.provinciaNascita), filter((x) => x), switchMap((value) => this.territorio.getComuni$(value))); } initialize() { if (!this.infonascita) { this.infonascita = this.initInfoNascita(); } } initInfoNascita() { const initInfoNascitaNew = new InfoNascitaPFDTO(); return initInfoNascitaNew; } ngOnDestroy() { this.subscription.unsubscribe(); } compareComuni(c1, c2) { return c1 && c2 ? c1.codiceCatastale === c2.codiceCatastale : c1 === c2; } _resetForm() { var _a; (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); } } InfoNascitaComponent.decorators = [ { type: Component, args: [{ selector: "lib-info-nascita", template: "<div [formGroup]=\"form\">\r\n\t<mat-checkbox formControlName=\"isNatoEstero\" *ngIf=\"!readOnly\">\r\n\t\t<!-- {{'localita-nascita-estera' | traduzione}} -->\r\n\t\t<info-tip-label label=\"localita-nascita-estera\"></info-tip-label>\r\n\t</mat-checkbox>\r\n\r\n\t<div class=\"row my-2\">\r\n\t\t<div class=\"col-md-4\" *ngIf=\"!(isNatoEstero$ | async)\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'provincia-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"provinciaNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let provincia of province | async\" [value]=\"provincia.sigla\">\r\n\t\t\t\t\t\t{{ provincia.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['provinciaNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\r\n\t\t\t\t\t\"obbligatorio\",\r\n\t\t\t\t\tform.controls[\"provinciaNascita\"]\r\n\t\t\t\t\t) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'provincia-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\" *ngIf=\"!(isNatoEstero$ | async)\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'comune-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"comuneNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let comune of comuni$ | async\" [value]=\"comune.codiceCatastale\">\r\n\t\t\t\t\t\t{{ comune.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['comuneNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\"obbligatorio\", form.controls[\"comuneNascita\"]) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'comune-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\" *ngIf=\"isNatoEstero$ | async\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'nazione-nascita' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"codCatNazioneNascita\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let nazione of nazioni$ | async\" [value]=\"nazione.codiceCatastale\">\r\n\t\t\t\t\t\t{{ nazione.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['codCatNazioneNascita'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\"obbligatorio\", form.controls[\"codCatNazioneNascita\"]) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'nazione-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<input [max]=\"maxDate\" matInput [matDatepicker]=\"dataNascita\"\r\n\t\t\t\t\tplaceholder=\"{{'required' | traduzione}}{{'data-nascita' | traduzione}}\" formControlName=\"dataNascita\" />\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"dataNascita\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #dataNascita></mat-datepicker>\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['dataNascita'].invalid\">\r\n\t\t\t\t\t{{ msg.getErrorData(form.controls[\"dataNascita\"]) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'data-nascita'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""] },] } ]; InfoNascitaComponent.ctorParameters = () => [ { type: MessageService }, { type: TerritorioService }, { type: ValidationService }, { type: TerritorioService } ]; InfoNascitaComponent.propDecorators = { infonascita: [{ type: Input }], province: [{ type: Input }], namespace: [{ type: Input }], readOnly: [{ type: Input }], done: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1uYXNjaXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9nZXR0aS9EQUcvc29yZ2VudGkvZ2l0bGFiLXNvZnR3YXJlZmFjdG9yeS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlcG9zaXRpL2NvbW1vbi1jb21wb25lbnQvaW5mby1uYXNjaXRhL2luZm8tbmFzY2l0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sR0FFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVF0RSxNQUFNLE9BQU8sb0JBQW9CO0lBK0JoQyxZQUNTLEdBQW1CLEVBQ25CLFVBQTZCLEVBQzdCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFIcEMsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0Isc0JBQWlC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SSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFDO0lBQ0YsQ0FBQztJQUVELGVBQWU7UUFDZCxNQUFNLGtCQUFrQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxPQUFPLGtCQUFrQixDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFTSxVQUFVOztRQUNoQixNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEtBQUssR0FBRztJQUNwQixDQUFDOzs7WUE1TEQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLDg5R0FBNEM7O2FBRTVDOzs7WUFUUSxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQURqQixpQkFBaUI7OzswQkFheEIsS0FBSzt1QkFHTCxLQUFLO3dCQUdMLEtBQUs7dUJBR0wsS0FBSzttQkFHTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUywgTW9tZW50RGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXJcIjtcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEluZm9OYXNjaXRhUEZEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luZm8tbmFzY2l0YS1wZi5kdG9cIjtcclxuaW1wb3J0IHsgTmF6aW9uZURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvbmF6aW9uZS5kdG9cIjtcclxuaW1wb3J0IHsgQ29tdW5lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL2NvbXVuZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcG9ydGFsZS9sb2NhbGl0YVwiO1xyXG5pbXBvcnQgeyBOYXppb25lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL25hemlvbmVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50T3V0cHV0U3RhdHVzIH0gZnJvbSBcIi4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1c1wiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVGVycml0b3Jpb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGVycml0b3Jpby90ZXJyaXRvcmlvLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGliLWluZm8tbmFzY2l0YVwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vaW5mby1uYXNjaXRhLmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2luZm8tbmFzY2l0YS5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb05hc2NpdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcblx0bWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aW5mb25hc2NpdGE6IEluZm9OYXNjaXRhUEZEVE87XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHJvdmluY2U6IE9ic2VydmFibGU8QXJyYXk8TG9jYWxpdGE+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRuYW1lc3BhY2U6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRyZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRkb25lOiBFdmVudEVtaXR0ZXI8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb05hc2NpdGFQRkRUTz5cclxuXHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb05hc2NpdGFQRkRUTz4+KCk7XHJcblxyXG5cdGZvcm06IEZvcm1Hcm91cDtcclxuXHRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHRjb211bmkkOiBPYnNlcnZhYmxlPEFycmF5PENvbXVuZT4+O1xyXG5cdGlzTmF0b0VzdGVybyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG5cdG5hemlvbmkkOiBPYnNlcnZhYmxlPEFycmF5PE5hemlvbmU+PjtcclxuXHRuYXppb25pOiBBcnJheTxOYXppb25lPjtcclxuXHRJVEFMSUEgPSAnSVQnO1xyXG5cdElUQUxJQUNvZENhdCA9ICdaMDAwJztcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRlcnJpdG9yaW86IFRlcnJpdG9yaW9TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRlcnJpdG9yaW9TZXJ2aWNlOiBUZXJyaXRvcmlvU2VydmljZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5uYXppb25pJCA9IHRlcnJpdG9yaW9TZXJ2aWNlLmdldE5hemlvbmkkKCk7XHJcblx0XHR0aGlzLm5hemlvbmkkLnN1YnNjcmliZShuYXppb25pID0+IHtcclxuXHRcdFx0dGhpcy5uYXppb25pID0gbmF6aW9uaTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tJbmZvTmFzY2l0YUNvbXBvbmVudF0gaW5mb25hc2NpdGEnLCB0aGlzLmluZm9uYXNjaXRhKTtcclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XHJcblx0XHQvLyBjb25zdCBpc05hdG9Fc3Rlcm8gPVxyXG5cdFx0Ly8gXHR0aGlzLmluZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEgIT0gbnVsbCAmJlxyXG5cdFx0Ly8gXHR0aGlzLmluZm9uYXNjaXRhLmNvbXVuZU5hc2NpdGEuc3RhcnRzV2l0aChcIlpcIik7XHJcblx0XHRjb25zdCBpc05hdG9Fc3Rlcm8gPSB0aGlzLmluZm9uYXNjaXRhPy5pc05hdG9Fc3Rlcm8gPyB0aGlzLmluZm9uYXNjaXRhLmlzTmF0b0VzdGVybyA6IGZhbHNlO1xyXG5cclxuXHRcdGlmICghaXNOYXRvRXN0ZXJvKSB7XHJcblx0XHRcdHRoaXMuaW5mb25hc2NpdGEubmF6aW9uZU5hc2NpdGEgPSB0aGlzLklUQUxJQTtcclxuXHRcdFx0dGhpcy5pbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSA9IHRoaXMuSVRBTElBQ29kQ2F0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGlzTmF0b0VzdGVyb0NoZWNrID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiBpc05hdG9Fc3Rlcm8sIGRpc2FibGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRbVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImlzTmF0b0VzdGVyb1wiLCBpc05hdG9Fc3Rlcm9DaGVjayk7XHJcblx0XHRcdFxyXG5cdFx0Y29uc3QgcHJvdmluY2lhTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YS5wcm92aW5jaWFOYXNjaXRhLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWRdXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJwcm92aW5jaWFOYXNjaXRhXCIsIHByb3ZpbmNpYU5hc2NpdGEpO1xyXG5cdFx0Y29uc3QgY29tdW5lTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YT8uY29tdW5lTmFzY2l0YSA/IHRoaXMuaW5mb25hc2NpdGE/LmNvbXVuZU5hc2NpdGEgOiB0aGlzLklUQUxJQUNvZENhdCwgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiY29tdW5lTmFzY2l0YVwiLCBjb211bmVOYXNjaXRhKTtcclxuXHRcdGNvbnN0IGRhdGFOYXNjaXRhID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9uYXNjaXRhLmRhdGFOYXNjaXRhLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRpb25TZXJ2aWNlLlZhbGlkYXRlRGF0ZV1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImRhdGFOYXNjaXRhXCIsIGRhdGFOYXNjaXRhKTtcclxuXHJcblx0XHRjb25zdCBjb2RDYXROYXppb25lTmFzY2l0YSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5pbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSwgZGlzYWJsZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiY29kQ2F0TmF6aW9uZU5hc2NpdGFcIiwgY29kQ2F0TmF6aW9uZU5hc2NpdGEpO1xyXG5cclxuXHJcblx0XHRpZiAodGhpcy5yZWFkT25seSkge1xyXG5cdFx0XHR0aGlzLmZvcm0uZGlzYWJsZSgpO1xyXG5cclxuXHRcdFx0dGhpcy5pc05hdG9Fc3Rlcm8kID0gaXNOYXRvRXN0ZXJvQ2hlY2sudmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdFx0c3RhcnRXaXRoKGlzTmF0b0VzdGVybylcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuaXNOYXRvRXN0ZXJvJCA9IGlzTmF0b0VzdGVyb0NoZWNrLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRcdHRhcChpc0VzdGVybyA9PiBpc0VzdGVyb1xyXG5cdFx0XHRcdFx0PyBjb2RDYXROYXppb25lTmFzY2l0YS5zZXRWYWx1ZShudWxsKVxyXG5cdFx0XHRcdFx0OiAocHJvdmluY2lhTmFzY2l0YS5zZXRWYWx1ZShudWxsKSwgY29tdW5lTmFzY2l0YS5zZXRWYWx1ZShudWxsKSlcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdHN0YXJ0V2l0aChpc05hdG9Fc3Rlcm8pLFxyXG5cdFx0XHRcdHRhcCgoaXNFc3Rlcm8pID0+IHtcclxuXHRcdFx0XHRcdGlmIChpc0VzdGVybykge1xyXG5cdFx0XHRcdFx0XHRjb2RDYXROYXppb25lTmFzY2l0YS5lbmFibGUoKTtcclxuXHRcdFx0XHRcdFx0Y29tdW5lTmFzY2l0YS5kaXNhYmxlKCk7XHJcblx0XHRcdFx0XHRcdHByb3ZpbmNpYU5hc2NpdGEuZGlzYWJsZSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29kQ2F0TmF6aW9uZU5hc2NpdGEuZGlzYWJsZSgpO1xyXG5cdFx0XHRcdFx0XHRjb211bmVOYXNjaXRhLmVuYWJsZSgpO1xyXG5cdFx0XHRcdFx0XHRwcm92aW5jaWFOYXNjaXRhLmVuYWJsZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBjaGFuZ2VzJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0bWFwKChfKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaW5mb25hc2NpdGEgPSBuZXcgSW5mb05hc2NpdGFQRkRUTygpO1xyXG5cdFx0XHRcdGluZm9uYXNjaXRhLmRhdGFOYXNjaXRhID0gbW9tZW50KHRoaXMuZm9ybS5jb250cm9sc1tcImRhdGFOYXNjaXRhXCJdLnZhbHVlKS50b0RhdGUoKTtcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtLmNvbnRyb2xzW1wiaXNOYXRvRXN0ZXJvXCJdPy52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEuaXNOYXRvRXN0ZXJvID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiaXNOYXRvRXN0ZXJvXCJdLnZhbHVlO1xyXG5cdFx0XHRcdFx0Ly9pbmZvbmFzY2l0YS5jb211bmVOYXNjaXRhID0gbnVsbDtcclxuXHRcdFx0XHRcdGlmKHRoaXMuZm9ybS5jb250cm9sc1tcImNvZENhdE5hemlvbmVOYXNjaXRhXCJdPy52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgbmF6aW9uZVNlbGVjdGVkID0gdGhpcy5uYXppb25pLmZpbmQobmF6aW9uZSA9PiBuYXppb25lLmNvZGljZUNhdGFzdGFsZSA9PSB0aGlzLmZvcm0uY29udHJvbHNbXCJjb2RDYXROYXppb25lTmFzY2l0YVwiXT8udmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRpZihuYXppb25lU2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb2RDYXROYXppb25lTmFzY2l0YSA9IG5hemlvbmVTZWxlY3RlZC5jb2RpY2VDYXRhc3RhbGU7XHJcblx0XHRcdFx0XHRcdFx0aW5mb25hc2NpdGEubmF6aW9uZU5hc2NpdGEgPSBuYXppb25lU2VsZWN0ZWQuc2lnbGE7XHJcblx0XHRcdFx0XHRcdFx0aW5mb25hc2NpdGEuY29tdW5lTmFzY2l0YSA9IG5hemlvbmVTZWxlY3RlZC5jb2RpY2VDYXRhc3RhbGU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEgPSBcIkVFXCI7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLmlzTmF0b0VzdGVybyA9IG51bGw7XHJcblx0XHRcdFx0XHRpbmZvbmFzY2l0YS5jb211bmVOYXNjaXRhID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiY29tdW5lTmFzY2l0YVwiXS52YWx1ZTtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLnByb3ZpbmNpYU5hc2NpdGEgPSB0aGlzLmZvcm0uY29udHJvbHNbXHJcblx0XHRcdFx0XHRcdFwicHJvdmluY2lhTmFzY2l0YVwiXHJcblx0XHRcdFx0XHRdLnZhbHVlO1xyXG5cdFx0XHRcdFx0aW5mb25hc2NpdGEuY29kQ2F0TmF6aW9uZU5hc2NpdGEgPSB0aGlzLklUQUxJQUNvZENhdDtcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhLm5hemlvbmVOYXNjaXRhID0gdGhpcy5JVEFMSUE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBpbmZvbmFzY2l0YTtcclxuXHRcdFx0fSksXHJcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLmluZm9uYXNjaXRhKSxcclxuXHRcdFx0bWFwKChpbmZvbmFzY2l0YSkgPT5cclxuXHRcdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YoXHJcblx0XHRcdFx0XHR0aGlzLmZvcm0udmFsaWQgfHwgdGhpcy5yZWFkT25seSxcclxuXHRcdFx0XHRcdGluZm9uYXNjaXRhXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlcyQuc3Vic2NyaWJlKChfKSA9PiB0aGlzLmRvbmUuZW1pdChfKSk7XHJcblxyXG5cdFx0dGhpcy5jb211bmkkID0gcHJvdmluY2lhTmFzY2l0YS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0dGFwKF8gPT4gY29tdW5lTmFzY2l0YS5zZXRWYWx1ZShudWxsKSApLFxyXG5cdFx0XHRzdGFydFdpdGgodGhpcy5pbmZvbmFzY2l0YS5wcm92aW5jaWFOYXNjaXRhKSxcclxuXHRcdFx0ZmlsdGVyKCh4KSA9PiB4KSxcclxuXHRcdFx0c3dpdGNoTWFwKCh2YWx1ZSkgPT4gdGhpcy50ZXJyaXRvcmlvLmdldENvbXVuaSQodmFsdWUpKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcclxuXHRcdGlmICghdGhpcy5pbmZvbmFzY2l0YSkge1xyXG5cdFx0XHR0aGlzLmluZm9uYXNjaXRhID0gdGhpcy5pbml0SW5mb05hc2NpdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGluaXRJbmZvTmFzY2l0YSgpOiBJbmZvTmFzY2l0YVBGRFRPIHtcclxuXHRcdGNvbnN0IGluaXRJbmZvTmFzY2l0YU5ldyA9IG5ldyBJbmZvTmFzY2l0YVBGRFRPKCk7XHJcblx0XHRyZXR1cm4gaW5pdEluZm9OYXNjaXRhTmV3O1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUNvbXVuaShjMTogQ29tdW5lLCBjMjogQ29tdW5lKSB7XHJcblx0XHRyZXR1cm4gYzEgJiYgYzIgPyBjMS5jb2RpY2VDYXRhc3RhbGUgPT09IGMyLmNvZGljZUNhdGFzdGFsZSA6IGMxID09PSBjMjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBfcmVzZXRGb3JtKCkge1xyXG5cdFx0dGhpcy5mb3JtPy5yZXNldCgpO1xyXG5cdH1cclxufVxyXG4iXX0=