@sumaris-net/ngx-components 2.4.4 → 2.4.5-rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/doc/changelog.md +3 -0
  2. package/esm2020/src/app/admin/users/users.mjs +2 -2
  3. package/esm2020/src/app/core/account/account.page.mjs +1 -1
  4. package/esm2020/src/app/core/auth/auth.form.mjs +2 -2
  5. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +3 -3
  6. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +1 -1
  7. package/esm2020/src/app/core/register/register.form.mjs +1 -1
  8. package/esm2020/src/app/core/services/platform.service.mjs +3 -2
  9. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +2 -2
  10. package/esm2020/src/app/core/table/testing/table.testing.mjs +1 -1
  11. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +3 -3
  12. package/esm2020/src/app/shared/form/field.component.mjs +1 -1
  13. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +2 -2
  14. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +2 -2
  15. package/esm2020/src/app/shared/material/chips/material.chips.mjs +1 -1
  16. package/esm2020/src/app/shared/material/datetime/material.date.mjs +1 -1
  17. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +1 -1
  18. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +1 -1
  19. package/fesm2015/sumaris-net.ngx-components.mjs +20 -19
  20. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  21. package/fesm2020/sumaris-net.ngx-components.mjs +20 -19
  22. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  23. package/package.json +1 -1
  24. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
@@ -114,7 +114,7 @@ export class AppAuthForm extends AppForm {
114
114
  }
115
115
  }
116
116
  AppAuthForm.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppAuthForm, deps: [{ token: i0.Injector }, { token: i1.PlatformService }, { token: i2.UntypedFormBuilder }, { token: i3.LocalSettingsService }, { token: i4.ConfigService }, { token: i5.ModalController }, { token: i6.NetworkService }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
117
- AppAuthForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AppAuthForm, selector: "app-auth-form", outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" novalidate (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit($event)\">\n\n <!-- error -->\n <ion-item lines=\"none\" *ngIf=\"error && !loading\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Username -->\n <mat-form-field>\n <input matInput [appAutofocus]=\"true\" [autofocusDelay]=\"500\"\n [placeholder]=\"usernamePlaceholder|translate\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required>\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"form.controls.username.hasError('email') && form.controls.username.dirty\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n (keyup.enter)=\"doSubmit($event)\"\n required>\n\n <!-- Show pwd button -->\n <button matSuffix type=\"button\"\n mat-icon-button\n *ngIf=\"mobile\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"form.controls.password.hasError('required') && form.controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"canWorkOffline\">\n <!-- Force offline (desktop) -->\n <mat-form-field hidden-xs hidden-sm hidden-mobile color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n\n <!-- check box -->\n <mat-checkbox\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n </mat-checkbox>\n </mat-form-field>\n\n <!-- Force offline (mobile) -->\n <mat-form-field visible-xs visible-sm visible-mobile\n color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n <!-- slide toggle -->\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n </mat-slide-toggle>\n </mat-form-field>\n </ng-container>\n\n <!-- Not register yet ? -->\n <p *ngIf=\"canRegister\" class=\"padding\" style=\"text-align: center;\">\n <span translate>AUTH.NO_ACCOUNT_QUESTION</span>\n <br/>\n <a href=\"#\" (click)=\"register()\">\n <span translate>AUTH.BTN_REGISTER</span>\n </a>\n </p>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i15.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
117
+ AppAuthForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AppAuthForm, selector: "app-auth-form", outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" novalidate (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit($event)\">\n\n <!-- error -->\n <ion-item lines=\"none\" *ngIf=\"error && !loading\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Username -->\n <mat-form-field>\n <input matInput [appAutofocus]=\"true\" [autofocusDelay]=\"500\"\n [placeholder]=\"usernamePlaceholder|translate\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required>\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"form.controls.username.hasError('email') && form.controls.username.dirty\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n (keyup.enter)=\"doSubmit($event)\"\n required>\n\n <!-- Show pwd button -->\n <button matSuffix type=\"button\"\n mat-icon-button\n *ngIf=\"mobile\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"form.controls.password.hasError('required') && form.controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"canWorkOffline\">\n <!-- Force offline (desktop) -->\n <mat-form-field hidden-xs hidden-sm hidden-mobile color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n\n <!-- check box -->\n <mat-checkbox\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n </mat-checkbox>\n </mat-form-field>\n\n <!-- Force offline (mobile) -->\n <mat-form-field visible-xs visible-sm visible-mobile\n color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n <!-- slide toggle -->\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n </mat-slide-toggle>\n </mat-form-field>\n </ng-container>\n\n <!-- Not register yet ? -->\n <p *ngIf=\"canRegister\" class=\"padding\" style=\"text-align: center;\">\n <span translate>AUTH.NO_ACCOUNT_QUESTION</span>\n <br/>\n <a href=\"#\" (click)=\"register()\">\n <span translate>AUTH.BTN_REGISTER</span>\n </a>\n </p>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i15.AutofocusDirective, selector: "[autofocus], input[appAutofocus], textarea[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
118
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppAuthForm, decorators: [{
119
119
  type: Component,
120
120
  args: [{ selector: 'app-auth-form', animations: [slideUpDownAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" novalidate (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit($event)\">\n\n <!-- error -->\n <ion-item lines=\"none\" *ngIf=\"error && !loading\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Username -->\n <mat-form-field>\n <input matInput [appAutofocus]=\"true\" [autofocusDelay]=\"500\"\n [placeholder]=\"usernamePlaceholder|translate\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required>\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"form.controls.username.hasError('email') && form.controls.username.dirty\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n (keyup.enter)=\"doSubmit($event)\"\n required>\n\n <!-- Show pwd button -->\n <button matSuffix type=\"button\"\n mat-icon-button\n *ngIf=\"mobile\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"form.controls.password.hasError('required') && form.controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"canWorkOffline\">\n <!-- Force offline (desktop) -->\n <mat-form-field hidden-xs hidden-sm hidden-mobile color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n\n <!-- check box -->\n <mat-checkbox\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n </mat-checkbox>\n </mat-form-field>\n\n <!-- Force offline (mobile) -->\n <mat-form-field visible-xs visible-sm visible-mobile\n color=\"medium\">\n <input matInput hidden formControlName=\"offline\" type=\"text\">\n <!-- slide toggle -->\n <ion-text color=\"medium\" translate>AUTH.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n [disabled]=\"network.offline\"\n (change)=\"form.controls.offline.setValue($event.checked)\"\n [checked]=\"form.controls.offline.value\">\n </mat-slide-toggle>\n </mat-form-field>\n </ng-container>\n\n <!-- Not register yet ? -->\n <p *ngIf=\"canRegister\" class=\"padding\" style=\"text-align: center;\">\n <span translate>AUTH.NO_ACCOUNT_QUESTION</span>\n <br/>\n <a href=\"#\" (click)=\"register()\">\n <span translate>AUTH.BTN_REGISTER</span>\n </a>\n </p>\n</form>\n" }]
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
128
128
  }], onSubmit: [{
129
129
  type: Output
130
130
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5mb3JtLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0IsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQXFCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUt6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUUvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFpQjtJQWdCaEQsWUFDRSxRQUFrQixFQUNsQixRQUF5QixFQUN6QixXQUErQixFQUMvQixRQUE4QixFQUN0QixhQUE0QixFQUM1QixTQUEwQixFQUMzQixPQUF1QixFQUN0QixFQUFxQixFQUNjLFdBQVc7UUFFdEQsS0FBSyxDQUFDLFFBQVEsRUFDWixXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lB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Q3pCLENBQUM7O3lHQXZIVSxXQUFXLDBRQXlCQSxXQUFXOzZGQXpCdEIsV0FBVyxxSUN4QnhCLHV2R0E4RUEsa3BIRHpEYyxDQUFDLG9CQUFvQixDQUFDOzRGQUd2QixXQUFXO2tCQVB2QixTQUFTOytCQUNFLGVBQWUsY0FHYixDQUFDLG9CQUFvQixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEyQjVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVzs0Q0FqQnZCLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01vZGFsQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtSZWdpc3Rlck1vZGFsfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci5tb2RhbCc7XG5pbXBvcnQge0F1dGhEYXRhfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay50eXBlcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7c2xpZGVVcERvd25BbmltYXRpb259IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7QXBwRm9ybX0gZnJvbSAnLi4vZm9ybS9mb3JtLmNsYXNzJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzfSBmcm9tICcuLi9mb3JtL2Zvcm0udXRpbHMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hdXRoLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ2F1dGguZm9ybS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0aC5mb3JtLnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXBwQXV0aEZvcm0gZXh0ZW5kcyBBcHBGb3JtPEF1dGhEYXRhPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcmVhZG9ubHkgbW9iaWxlOiBib29sZWFuO1xuICBjYW5Xb3JrT2ZmbGluZSA9IGZhbHNlO1xuICBzaG93UHdkID0gZmFsc2U7XG4gIGNhblJlZ2lzdGVyOiBib29sZWFuO1xuICB1c2VybmFtZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0aERhdGE+KCk7XG5cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHN1cGVyLmRpc2FibGUob3B0cyk7XG4gICAgdGhpcy5zaG93UHdkID0gZmFsc2U7IC8vIEhpZGUgcHdkIHdoZW4gZGlzYWJsZSAoZS5nLiB3aGVuIHN1Ym1pdHRlZClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsXG4gICAgICBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB1c2VybmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFzc3dvcmQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9mZmxpbmU6IFtuZXR3b3JrLm9mZmxpbmVdXG4gICAgfSkpO1xuXG4gICAgdGhpcy5tb2JpbGUgPSBzZXR0aW5ncy5tb2JpbGU7XG4gICAgdGhpcy5jYW5Xb3JrT2ZmbGluZSA9IHRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKTtcbiAgICB0aGlzLl9lbmFibGUgPSB0cnVlO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gTG9hZCBjb25maWcsIHRvIHNldCB1c2VybmFtZSdzIGxhYmVsIGFuZCB2YWxpZGF0b3JcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoY29uZmlnID0+IHtcbiAgICAgICAgLy8gU2V0IHRoZSB1c2VybmFtZSBwbGFjZWhvbGRlciwgd2l0aCBlbWFpbCBvciB1c2VybmFtZVxuICAgICAgICBjb25zdCB0b2tlblR5cGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGU7XG4gICAgICAgIGlmICh0b2tlblR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgICAgICB0aGlzLnVzZXJuYW1lUGxhY2Vob2xkZXIgPSAnVVNFUi5FTUFJTCc7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgndXNlcm5hbWUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJuYW1lUGxhY2Vob2xkZXIgPSAnVVNFUi5VU0VSTkFNRSc7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgndXNlcm5hbWUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5hYmxlL2Rpc2FibGUgcmVnaXN0cmF0aW9uIGxpbmtcbiAgICAgICAgdGhpcy5jYW5SZWdpc3RlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLlJFR0lTVFJBVElPTl9FTkFCTEUpO1xuXG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gPT09IGZhbHNlICYmIHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMpIHtcbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB1c2VyLCBmb3IgdGVzdGluZy5cbiAgICAgIC8vIE92ZXJyaWRlIHVzaW5nIGVudmlyb25tZW50LCBpZiBhbnlcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGRvU3VibWl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcy5mb3JtKTtcbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyh0aGlzLmZvcm0pO1xuICAgICAgICByZXR1cm47IC8vIFNraXAgaWYgaW52YWxpZFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgdGhpcy5zaG93UHdkID0gZmFsc2U7IC8vIEhpZGUgcGFzc3dvcmRcbiAgICB0aGlzLmVycm9yID0gbnVsbDsgLy8gUmVzZXQgZXJyb3JcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vblN1Ym1pdC5lbWl0KHtcbiAgICAgIHVzZXJuYW1lOiBkYXRhLnVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IGRhdGEucGFzc3dvcmQsXG4gICAgICBvZmZsaW5lOiBkYXRhLm9mZmxpbmVcbiAgICB9KSk7XG4gIH1cblxuICByZWdpc3RlcigpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgICAgY29tcG9uZW50OiBSZWdpc3Rlck1vZGFsLFxuICAgICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIG5vdmFsaWRhdGUgKG5nU3VibWl0KT1cImRvU3VibWl0KCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1wYWRkaW5nXCIgKGtleXVwLmVudGVyKT1cImRvU3VibWl0KCRldmVudClcIj5cblxuICA8IS0tIGVycm9yIC0tPlxuICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKm5nSWY9XCJlcnJvciAmJiAhbG9hZGluZ1wiIEBzbGlkZVVwRG93bkFuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPCEtLSBVc2VybmFtZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBbYXBwQXV0b2ZvY3VzXT1cInRydWVcIiBbYXV0b2ZvY3VzRGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInVzZXJuYW1lUGxhY2Vob2xkZXJ8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICByZXF1aXJlZD5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy51c2VybmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLnVzZXJuYW1lLmRpcnR5XCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uY29udHJvbHMudXNlcm5hbWUuaGFzRXJyb3IoJ2VtYWlsJykgJiYgZm9ybS5jb250cm9scy51c2VybmFtZS5kaXJ0eVwiPlxuICAgICAgPHNwYW4+e3snRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIFBhc3N3b3JkIC0tPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInVVNFUi5QQVNTV09SRCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICBbdHlwZV09XCJzaG93UHdkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJkb1N1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgcmVxdWlyZWQ+XG5cbiAgICA8IS0tIFNob3cgcHdkIGJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dQd2QgPSAhc2hvd1B3ZFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bWF0LWljb24+e3tzaG93UHdkID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy5wYXNzd29yZC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLnBhc3N3b3JkLnRvdWNoZWRcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuV29ya09mZmxpbmVcIj5cbiAgICA8IS0tIEZvcmNlIG9mZmxpbmUgKGRlc2t0b3ApIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZCBoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tb2JpbGUgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gZm9ybUNvbnRyb2xOYW1lPVwib2ZmbGluZVwiIHR5cGU9XCJ0ZXh0XCI+XG5cbiAgICAgIDwhLS0gY2hlY2sgYm94ICAtLT5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgW2Rpc2FibGVkXT1cIm5ldHdvcmsub2ZmbGluZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiZm9ybS5jb250cm9scy5vZmZsaW5lLnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgIFtjaGVja2VkXT1cImZvcm0uY29udHJvbHMub2ZmbGluZS52YWx1ZVwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIiB0cmFuc2xhdGU+QVVUSC5PRkZMSU5FX01PREU8L2lvbi10ZXh0PlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDwhLS0gRm9yY2Ugb2ZmbGluZSAobW9iaWxlKSAtLT5cbiAgICA8bWF0LWZvcm0tZmllbGQgdmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGZvcm1Db250cm9sTmFtZT1cIm9mZmxpbmVcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgPCEtLSBzbGlkZSB0b2dnbGUgIC0tPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCIgdHJhbnNsYXRlPkFVVEguT0ZGTElORV9NT0RFPC9pb24tdGV4dD5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5ldHdvcmsub2ZmbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZvcm0uY29udHJvbHMub2ZmbGluZS5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZm9ybS5jb250cm9scy5vZmZsaW5lLnZhbHVlXCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBOb3QgcmVnaXN0ZXIgeWV0ID8gLS0+XG4gIDxwICpuZ0lmPVwiY2FuUmVnaXN0ZXJcIiBjbGFzcz1cInBhZGRpbmdcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5OT19BQ0NPVU5UX1FVRVNUSU9OPC9zcGFuPlxuICAgIDxici8+XG4gICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwicmVnaXN0ZXIoKVwiPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkFVVEguQlROX1JFR0lTVEVSPC9zcGFuPlxuICAgIDwvYT5cbiAgPC9wPlxuPC9mb3JtPlxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5mb3JtLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0IsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQXFCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUt6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUUvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFpQjtJQWdCaEQsWUFDRSxRQUFrQixFQUNsQixRQUF5QixFQUN6QixXQUErQixFQUMvQixRQUE4QixFQUN0QixhQUE0QixFQUM1QixTQUEwQixFQUMzQixPQUF1QixFQUN0QixFQUFxQixFQUNjLFdBQVc7UUFFdEQsS0FBSyxDQUFDLFFBQVEsRUFDWixXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lB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Q3pCLENBQUM7O3lHQXZIVSxXQUFXLDBRQXlCQSxXQUFXOzZGQXpCdEIsV0FBVyxxSUN4QnhCLHV2R0E4RUEsMHFIRHpEYyxDQUFDLG9CQUFvQixDQUFDOzRGQUd2QixXQUFXO2tCQVB2QixTQUFTOytCQUNFLGVBQWUsY0FHYixDQUFDLG9CQUFvQixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEyQjVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVzs0Q0FqQnZCLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01vZGFsQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtSZWdpc3Rlck1vZGFsfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci5tb2RhbCc7XG5pbXBvcnQge0F1dGhEYXRhfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay50eXBlcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7c2xpZGVVcERvd25BbmltYXRpb259IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7QXBwRm9ybX0gZnJvbSAnLi4vZm9ybS9mb3JtLmNsYXNzJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzfSBmcm9tICcuLi9mb3JtL2Zvcm0udXRpbHMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hdXRoLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ2F1dGguZm9ybS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0aC5mb3JtLnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXBwQXV0aEZvcm0gZXh0ZW5kcyBBcHBGb3JtPEF1dGhEYXRhPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcmVhZG9ubHkgbW9iaWxlOiBib29sZWFuO1xuICBjYW5Xb3JrT2ZmbGluZSA9IGZhbHNlO1xuICBzaG93UHdkID0gZmFsc2U7XG4gIGNhblJlZ2lzdGVyOiBib29sZWFuO1xuICB1c2VybmFtZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0aERhdGE+KCk7XG5cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHN1cGVyLmRpc2FibGUob3B0cyk7XG4gICAgdGhpcy5zaG93UHdkID0gZmFsc2U7IC8vIEhpZGUgcHdkIHdoZW4gZGlzYWJsZSAoZS5nLiB3aGVuIHN1Ym1pdHRlZClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsXG4gICAgICBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB1c2VybmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFzc3dvcmQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9mZmxpbmU6IFtuZXR3b3JrLm9mZmxpbmVdXG4gICAgfSkpO1xuXG4gICAgdGhpcy5tb2JpbGUgPSBzZXR0aW5ncy5tb2JpbGU7XG4gICAgdGhpcy5jYW5Xb3JrT2ZmbGluZSA9IHRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKTtcbiAgICB0aGlzLl9lbmFibGUgPSB0cnVlO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gTG9hZCBjb25maWcsIHRvIHNldCB1c2VybmFtZSdzIGxhYmVsIGFuZCB2YWxpZGF0b3JcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoY29uZmlnID0+IHtcbiAgICAgICAgLy8gU2V0IHRoZSB1c2VybmFtZSBwbGFjZWhvbGRlciwgd2l0aCBlbWFpbCBvciB1c2VybmFtZVxuICAgICAgICBjb25zdCB0b2tlblR5cGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGU7XG4gICAgICAgIGlmICh0b2tlblR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgICAgICB0aGlzLnVzZXJuYW1lUGxhY2Vob2xkZXIgPSAnVVNFUi5FTUFJTCc7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgndXNlcm5hbWUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJuYW1lUGxhY2Vob2xkZXIgPSAnVVNFUi5VU0VSTkFNRSc7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgndXNlcm5hbWUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5hYmxlL2Rpc2FibGUgcmVnaXN0cmF0aW9uIGxpbmtcbiAgICAgICAgdGhpcy5jYW5SZWdpc3RlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLlJFR0lTVFJBVElPTl9FTkFCTEUpO1xuXG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gPT09IGZhbHNlICYmIHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMpIHtcbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB1c2VyLCBmb3IgdGVzdGluZy5cbiAgICAgIC8vIE92ZXJyaWRlIHVzaW5nIGVudmlyb25tZW50LCBpZiBhbnlcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGRvU3VibWl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcy5mb3JtKTtcbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyh0aGlzLmZvcm0pO1xuICAgICAgICByZXR1cm47IC8vIFNraXAgaWYgaW52YWxpZFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgdGhpcy5zaG93UHdkID0gZmFsc2U7IC8vIEhpZGUgcGFzc3dvcmRcbiAgICB0aGlzLmVycm9yID0gbnVsbDsgLy8gUmVzZXQgZXJyb3JcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vblN1Ym1pdC5lbWl0KHtcbiAgICAgIHVzZXJuYW1lOiBkYXRhLnVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IGRhdGEucGFzc3dvcmQsXG4gICAgICBvZmZsaW5lOiBkYXRhLm9mZmxpbmVcbiAgICB9KSk7XG4gIH1cblxuICByZWdpc3RlcigpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgICAgY29tcG9uZW50OiBSZWdpc3Rlck1vZGFsLFxuICAgICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIG5vdmFsaWRhdGUgKG5nU3VibWl0KT1cImRvU3VibWl0KCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1wYWRkaW5nXCIgKGtleXVwLmVudGVyKT1cImRvU3VibWl0KCRldmVudClcIj5cblxuICA8IS0tIGVycm9yIC0tPlxuICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKm5nSWY9XCJlcnJvciAmJiAhbG9hZGluZ1wiIEBzbGlkZVVwRG93bkFuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPCEtLSBVc2VybmFtZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBbYXBwQXV0b2ZvY3VzXT1cInRydWVcIiBbYXV0b2ZvY3VzRGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInVzZXJuYW1lUGxhY2Vob2xkZXJ8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICByZXF1aXJlZD5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy51c2VybmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLnVzZXJuYW1lLmRpcnR5XCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uY29udHJvbHMudXNlcm5hbWUuaGFzRXJyb3IoJ2VtYWlsJykgJiYgZm9ybS5jb250cm9scy51c2VybmFtZS5kaXJ0eVwiPlxuICAgICAgPHNwYW4+e3snRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIFBhc3N3b3JkIC0tPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInVVNFUi5QQVNTV09SRCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICBbdHlwZV09XCJzaG93UHdkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJkb1N1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgcmVxdWlyZWQ+XG5cbiAgICA8IS0tIFNob3cgcHdkIGJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dQd2QgPSAhc2hvd1B3ZFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8bWF0LWljb24+e3tzaG93UHdkID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy5wYXNzd29yZC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLnBhc3N3b3JkLnRvdWNoZWRcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuV29ya09mZmxpbmVcIj5cbiAgICA8IS0tIEZvcmNlIG9mZmxpbmUgKGRlc2t0b3ApIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZCBoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tb2JpbGUgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gZm9ybUNvbnRyb2xOYW1lPVwib2ZmbGluZVwiIHR5cGU9XCJ0ZXh0XCI+XG5cbiAgICAgIDwhLS0gY2hlY2sgYm94ICAtLT5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgW2Rpc2FibGVkXT1cIm5ldHdvcmsub2ZmbGluZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiZm9ybS5jb250cm9scy5vZmZsaW5lLnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgIFtjaGVja2VkXT1cImZvcm0uY29udHJvbHMub2ZmbGluZS52YWx1ZVwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIiB0cmFuc2xhdGU+QVVUSC5PRkZMSU5FX01PREU8L2lvbi10ZXh0PlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDwhLS0gRm9yY2Ugb2ZmbGluZSAobW9iaWxlKSAtLT5cbiAgICA8bWF0LWZvcm0tZmllbGQgdmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGZvcm1Db250cm9sTmFtZT1cIm9mZmxpbmVcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgPCEtLSBzbGlkZSB0b2dnbGUgIC0tPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCIgdHJhbnNsYXRlPkFVVEguT0ZGTElORV9NT0RFPC9pb24tdGV4dD5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5ldHdvcmsub2ZmbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZvcm0uY29udHJvbHMub2ZmbGluZS5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZm9ybS5jb250cm9scy5vZmZsaW5lLnZhbHVlXCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBOb3QgcmVnaXN0ZXIgeWV0ID8gLS0+XG4gIDxwICpuZ0lmPVwiY2FuUmVnaXN0ZXJcIiBjbGFzcz1cInBhZGRpbmdcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5OT19BQ0NPVU5UX1FVRVNUSU9OPC9zcGFuPlxuICAgIDxici8+XG4gICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwicmVnaXN0ZXIoKVwiPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkFVVEguQlROX1JFR0lTVEVSPC9zcGFuPlxuICAgIDwvYT5cbiAgPC9wPlxuPC9mb3JtPlxuIl19
@@ -56,10 +56,10 @@ export class TextForm extends AppForm {
56
56
  }
57
57
  }
58
58
  TextForm.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TextForm, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
59
- TextForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TextForm, selector: "app-text-form", inputs: { showError: "showError", placeholder: "placeholder", multiline: "multiline", autoHeight: "autoHeight", maxLength: "maxLength", autofocus: "autofocus", validator: "validator" }, outputs: { textAreaChanges: "textAreaChanges" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "autosizeDirective", first: true, predicate: CdkTextareaAutosize, descendants: true }], usesInheritance: true, ngImport: i0, template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [autofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea.fixed-height{height:11.5em}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
59
+ TextForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TextForm, selector: "app-text-form", inputs: { showError: "showError", placeholder: "placeholder", multiline: "multiline", autoHeight: "autoHeight", maxLength: "maxLength", autofocus: "autofocus", validator: "validator" }, outputs: { textAreaChanges: "textAreaChanges" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "autosizeDirective", first: true, predicate: CdkTextareaAutosize, descendants: true }], usesInheritance: true, ngImport: i0, template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [appAutofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea.fixed-height{height:11.5em}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.AutofocusDirective, selector: "[autofocus], input[appAutofocus], textarea[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
60
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TextForm, decorators: [{
61
61
  type: Component,
62
- args: [{ selector: 'app-text-form', template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [autofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea.fixed-height{height:11.5em}\n"] }]
62
+ args: [{ selector: 'app-text-form', template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [appAutofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea.fixed-height{height:11.5em}\n"] }]
63
63
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }]; }, propDecorators: { showError: [{
64
64
  type: Input
65
65
  }], placeholder: [{
@@ -86,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
86
86
  type: ViewChild,
87
87
  args: [CdkTextareaAutosize]
88
88
  }] } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxZQUFZLEVBQVksS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFzRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQXVCO0lBaUJuRCxZQUFzQixRQUFrQixFQUFZLEVBQXFCLEVBQVksV0FBK0I7UUFDbEgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFZLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQVksZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBaEIzRyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsY0FBUyxHQUFnQixJQUFJLENBQUM7UUFFN0Isb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBVXZELENBQUM7SUFFRCxRQUFRO1FBQ04scUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hILElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRCxrQkFBa0I7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN4RSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUF1QixDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2xCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7c0dBbkRVLFFBQVE7MEZBQVIsUUFBUSxtZ0JBYVIsbUJBQW1CLHVFQ3pCaEMsdXJEQTRDQTs0RkRoQ2EsUUFBUTtrQkFMcEIsU0FBUzsrQkFDRSxlQUFlO2dLQUtoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRWdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDRyxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1UsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q2RrVGV4dGFyZWFBdXRvc2l6ZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xuaW1wb3J0IHtBcHBGb3JtfSBmcm9tICcuLi9mb3JtLmNsYXNzJztcbmltcG9ydCB7aXNOb3ROaWx9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmb2N1c0lucHV0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW5wdXRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRleHQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGV4dEZvcm0gZXh0ZW5kcyBBcHBGb3JtPHt0ZXh0OiBzdHJpbmd9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNob3dFcnJvciA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG11bHRpbGluZSA9IHRydWU7XG4gIEBJbnB1dCgpIGF1dG9IZWlnaHQgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4TGVuZ3RoID0gMjAwMDtcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSBudWxsO1xuXG4gIEBPdXRwdXQoKSB0ZXh0QXJlYUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYScpIHRleHRBcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0ZXh0SW5wdXQnKSB0ZXh0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoQ2RrVGV4dGFyZWFBdXRvc2l6ZSkgYXV0b3NpemVEaXJlY3RpdmU6IENka1RleHRhcmVhQXV0b3NpemU7XG5cbiAgY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gQ29tcHV0ZSB2YWxpZGF0b3JzXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IGlzTm90TmlsKHRoaXMubWF4TGVuZ3RoKSAmJiB0aGlzLm1heExlbmd0aCA+IDAgPyBbVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgpXSA6IFtdO1xuICAgIGlmICh0aGlzLnZhbGlkYXRvcikgdmFsaWRhdG9ycy5wdXNoKHRoaXMudmFsaWRhdG9yKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZm9ybVxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHRleHQ6IFtudWxsLCB2YWxpZGF0b3JzLmxlbmd0aCA/IFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSA6IG51bGxdXG4gICAgfSk7XG4gICAgdGhpcy5jb250cm9sID0gZm9ybS5nZXQoJ3RleHQnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgdGhpcy5zZXRGb3JtKGZvcm0pO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKVxuICB9XG5cbiAgdGV4dEFyZWFDaGFuZ2VkKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy50ZXh0QXJlYUNoYW5nZXMuZW1pdCh0aGlzLmNvbnRyb2wudmFsdWUpO1xuICB9XG5cbiAgY29udGFpbmVyUmVzaXplKCkge1xuICAgIHRoaXMuYXV0b3NpemVEaXJlY3RpdmU/LnJlc2l6ZVRvRml0Q29udGVudCh0cnVlKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMudGV4dEFyZWEpIGZvY3VzSW5wdXQodGhpcy50ZXh0QXJlYSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0KSBmb2N1c0lucHV0KHRoaXMudGV4dElucHV0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdC5lbWl0KCRldmVudClcIj5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibXVsdGlsaW5lOyBlbHNlIG1vbm9saW5lXCI+XG4gICAgPHRleHRhcmVhXG4gICAgICAjdGV4dEFyZWFcbiAgICAgIG1hdElucHV0XG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlYWRvbmx5XT1cImNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLmZpeGVkLWhlaWdodF09XCIhYXV0b0hlaWdodFwiXG4gICAgICBbY2RrVGV4dGFyZWFBdXRvc2l6ZV09XCJhdXRvSGVpZ2h0XCJcbiAgICAgIChrZXl1cCk9XCJ0ZXh0QXJlYUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5jb250cm9sLmVudGVyKT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgPjwvdGV4dGFyZWE+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICB7eyAnRVJST1IuRklFTERfTUFYX0xFTkdUSCcgfCB0cmFuc2xhdGU6IGNvbnRyb2wuZXJyb3JzWydtYXhsZW5ndGgnXSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtaGludCAqbmdJZj1cIm1heExlbmd0aFwiIGFsaWduPVwiZW5kXCI+XG4gICAgICB7eyAnSU5GTy5URVhUX1BST0dSRVNTJyB8IHRyYW5zbGF0ZTogeyBjdXJyZW50OiB0ZXh0QXJlYS52YWx1ZT8ubGVuZ3RoIHx8IDAsIG1heDogbWF4TGVuZ3RoIH0gfX1cbiAgICA8L21hdC1oaW50PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bmctdGVtcGxhdGUgI21vbm9saW5lPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjdGV4dElucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAoa2V5ZG93bi5jb250cm9sLmVudGVyKT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgIHt7ICdFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyB8IHRyYW5zbGF0ZTogY29udHJvbC5lcnJvcnNbJ21heGxlbmd0aCddIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAge3sgJ0VSUk9SLkZJRUxEX0lOVkFMSUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIm1heExlbmd0aFwiIGFsaWduPVwiZW5kXCI+XG4gICAgICAgIHt7ICdJTkZPLlRFWFRfUFJPR1JFU1MnIHwgdHJhbnNsYXRlOiB7IGN1cnJlbnQ6IHRleHRJbnB1dC52YWx1ZT8ubGVuZ3RoIHx8IDAsIG1heDogbWF4TGVuZ3RoIH0gfX1cbiAgICAgIDwvbWF0LWhpbnQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZm9ybT5cbiJdfQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxZQUFZLEVBQVksS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFzRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQXVCO0lBaUJuRCxZQUFzQixRQUFrQixFQUFZLEVBQXFCLEVBQVksV0FBK0I7UUFDbEgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFZLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQVksZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBaEIzRyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsY0FBUyxHQUFnQixJQUFJLENBQUM7UUFFN0Isb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBVXZELENBQUM7SUFFRCxRQUFRO1FBQ04scUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hILElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRCxrQkFBa0I7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN4RSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUF1QixDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2xCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7c0dBbkRVLFFBQVE7MEZBQVIsUUFBUSxtZ0JBYVIsbUJBQW1CLHVFQ3pCaEMsMHJEQTRDQTs0RkRoQ2EsUUFBUTtrQkFMcEIsU0FBUzsrQkFDRSxlQUFlO2dLQUtoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRWdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDRyxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1UsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q2RrVGV4dGFyZWFBdXRvc2l6ZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xuaW1wb3J0IHtBcHBGb3JtfSBmcm9tICcuLi9mb3JtLmNsYXNzJztcbmltcG9ydCB7aXNOb3ROaWx9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmb2N1c0lucHV0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW5wdXRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRleHQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGV4dEZvcm0gZXh0ZW5kcyBBcHBGb3JtPHt0ZXh0OiBzdHJpbmd9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNob3dFcnJvciA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG11bHRpbGluZSA9IHRydWU7XG4gIEBJbnB1dCgpIGF1dG9IZWlnaHQgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4TGVuZ3RoID0gMjAwMDtcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSBudWxsO1xuXG4gIEBPdXRwdXQoKSB0ZXh0QXJlYUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYScpIHRleHRBcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0ZXh0SW5wdXQnKSB0ZXh0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoQ2RrVGV4dGFyZWFBdXRvc2l6ZSkgYXV0b3NpemVEaXJlY3RpdmU6IENka1RleHRhcmVhQXV0b3NpemU7XG5cbiAgY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gQ29tcHV0ZSB2YWxpZGF0b3JzXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IGlzTm90TmlsKHRoaXMubWF4TGVuZ3RoKSAmJiB0aGlzLm1heExlbmd0aCA+IDAgPyBbVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgpXSA6IFtdO1xuICAgIGlmICh0aGlzLnZhbGlkYXRvcikgdmFsaWRhdG9ycy5wdXNoKHRoaXMudmFsaWRhdG9yKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZm9ybVxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHRleHQ6IFtudWxsLCB2YWxpZGF0b3JzLmxlbmd0aCA/IFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSA6IG51bGxdXG4gICAgfSk7XG4gICAgdGhpcy5jb250cm9sID0gZm9ybS5nZXQoJ3RleHQnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgdGhpcy5zZXRGb3JtKGZvcm0pO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKVxuICB9XG5cbiAgdGV4dEFyZWFDaGFuZ2VkKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy50ZXh0QXJlYUNoYW5nZXMuZW1pdCh0aGlzLmNvbnRyb2wudmFsdWUpO1xuICB9XG5cbiAgY29udGFpbmVyUmVzaXplKCkge1xuICAgIHRoaXMuYXV0b3NpemVEaXJlY3RpdmU/LnJlc2l6ZVRvRml0Q29udGVudCh0cnVlKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMudGV4dEFyZWEpIGZvY3VzSW5wdXQodGhpcy50ZXh0QXJlYSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0KSBmb2N1c0lucHV0KHRoaXMudGV4dElucHV0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdC5lbWl0KCRldmVudClcIj5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibXVsdGlsaW5lOyBlbHNlIG1vbm9saW5lXCI+XG4gICAgPHRleHRhcmVhXG4gICAgICAjdGV4dEFyZWFcbiAgICAgIG1hdElucHV0XG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlYWRvbmx5XT1cImNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLmZpeGVkLWhlaWdodF09XCIhYXV0b0hlaWdodFwiXG4gICAgICBbY2RrVGV4dGFyZWFBdXRvc2l6ZV09XCJhdXRvSGVpZ2h0XCJcbiAgICAgIChrZXl1cCk9XCJ0ZXh0QXJlYUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5jb250cm9sLmVudGVyKT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgPjwvdGV4dGFyZWE+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICB7eyAnRVJST1IuRklFTERfTUFYX0xFTkdUSCcgfCB0cmFuc2xhdGU6IGNvbnRyb2wuZXJyb3JzWydtYXhsZW5ndGgnXSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtaGludCAqbmdJZj1cIm1heExlbmd0aFwiIGFsaWduPVwiZW5kXCI+XG4gICAgICB7eyAnSU5GTy5URVhUX1BST0dSRVNTJyB8IHRyYW5zbGF0ZTogeyBjdXJyZW50OiB0ZXh0QXJlYS52YWx1ZT8ubGVuZ3RoIHx8IDAsIG1heDogbWF4TGVuZ3RoIH0gfX1cbiAgICA8L21hdC1oaW50PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bmctdGVtcGxhdGUgI21vbm9saW5lPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjdGV4dElucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAoa2V5ZG93bi5jb250cm9sLmVudGVyKT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgIHt7ICdFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyB8IHRyYW5zbGF0ZTogY29udHJvbC5lcnJvcnNbJ21heGxlbmd0aCddIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAge3sgJ0VSUk9SLkZJRUxEX0lOVkFMSUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIm1heExlbmd0aFwiIGFsaWduPVwiZW5kXCI+XG4gICAgICAgIHt7ICdJTkZPLlRFWFRfUFJPR1JFU1MnIHwgdHJhbnNsYXRlOiB7IGN1cnJlbnQ6IHRleHRJbnB1dC52YWx1ZT8ubGVuZ3RoIHx8IDAsIG1heDogbWF4TGVuZ3RoIH0gfX1cbiAgICAgIDwvbWF0LWhpbnQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZm9ybT5cbiJdfQ==
@@ -80,7 +80,7 @@ export class TextPopover {
80
80
  }
81
81
  }
82
82
  TextPopover.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TextPopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
83
- TextPopover.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TextPopover, selector: "app-text-popover", inputs: { text: "text", placeholder: "placeholder", editing: "editing", multiline: "multiline", maxLength: "maxLength", autofocus: "autofocus", validator: "validator" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, static: true }], ngImport: i0, template: "\n<ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error|translate\"></ion-label>\n </ion-item>\n\n <app-text-form #form [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n\n </ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP'|translate\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i6.TextForm, selector: "app-text-form", inputs: ["showError", "placeholder", "multiline", "autoHeight", "maxLength", "autofocus", "validator"], outputs: ["textAreaChanges"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
83
+ TextPopover.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TextPopover, selector: "app-text-popover", inputs: { text: "text", placeholder: "placeholder", editing: "editing", multiline: "multiline", maxLength: "maxLength", autofocus: "autofocus", validator: "validator" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, static: true }], ngImport: i0, template: "\n<ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error|translate\"></ion-label>\n </ion-item>\n\n <app-text-form #form [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n\n </ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP'|translate\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus], textarea[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i6.TextForm, selector: "app-text-form", inputs: ["showError", "placeholder", "multiline", "autoHeight", "maxLength", "autofocus", "validator"], outputs: ["textAreaChanges"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TextPopover, decorators: [{
85
85
  type: Component,
86
86
  args: [{ selector: 'app-text-popover', template: "\n<ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error|translate\"></ion-label>\n </ion-item>\n\n <app-text-form #form [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n\n </ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP'|translate\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
@@ -163,7 +163,7 @@ export class RegisterForm {
163
163
  }
164
164
  }
165
165
  RegisterForm.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RegisterForm, deps: [{ token: i1.AccountService }, { token: i2.AccountValidatorService }, { token: i3.UntypedFormBuilder }, { token: ENVIRONMENT }, { token: i4.LocalSettingsService }], target: i0.ɵɵFactoryTarget.Component });
166
- RegisterForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RegisterForm, selector: "app-register-form", outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "stepper", first: true, predicate: ["stepper"], descendants: true, static: true }], ngImport: i0, template: "<mat-horizontal-stepper linear #stepper=\"matHorizontalStepper\">\n\n <!-- Step 1: Username -->\n <mat-step [stepControl]=\"forms[0]\" *ngIf=\"forms[0].controls; let controls\">\n\n <form [formGroup]=\"forms[0]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n <ng-template matStepLabel>{{'REGISTER.STEP_EMAIL'|translate}}</ng-template>\n\n <!-- Email -->\n <mat-form-field>\n <input matInput\n [appAutofocus]=\"true\" [autofocusDelay]=\"500\" [placeholder]=\"'USER.EMAIL'|translate\"\n formControlName=\"email\" autocomplete=\"off\" required>\n <mat-error *ngIf=\"controls.email.hasError('required') && controls.email.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.email.hasError('email') && !controls.email.hasError('required') && controls.email.touched\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n <mat-error *ngIf=\"controls.email.hasError('availability') && controls.email.touched\" translate>REGISTER.ERROR.EMAIL_ALREADY_REGISTERED</mat-error>\n\n </mat-form-field>\n\n <!-- Confirm Email -->\n <mat-form-field>\n <input matInput autocomplete=\"off\" matFormFieldControl [placeholder]=\"'REGISTER.CONFIRM_EMAIL'|translate\" formControlName=\"confirmEmail\">\n <mat-error *ngIf=\"controls.confirmEmail.hasError('required') && controls.confirmEmail.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmEmail.hasError('equals') && controls.confirmEmail.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 2: Password -->\n <mat-step [stepControl]=\"forms[1]\" *ngIf=\"forms[1].controls; let controls\">\n\n <form [formGroup]=\"forms[1]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_PASSWORD'|translate}}</ng-template>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n required>\n <button matSuffix mat-icon-button\n type=\"button\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.password.hasError('required') && controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.password.hasError('minlength') && controls.password.touched\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 8} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Confirm password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'REGISTER.CONFIRM_PASSWORD'|translate\"\n formControlName=\"confirmPassword\"\n autocomplete=\"section-red new-password\"\n [type]=\"showConfirmPwd ? 'text' : 'password'\"\n required>\n <button mat-icon-button matSuffix\n (click)=\"showConfirmPwd = !showConfirmPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showConfirmPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('required') && controls.confirmPassword.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('equals') && controls.confirmPassword.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_PASSWORD' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 3: user details -->\n <mat-step [stepControl]=\"forms[2]\" *ngIf=\"forms[2].controls; let controls\">\n\n <form [formGroup]=\"forms[2]\" (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit()\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_USER_DETAILS'|translate}}</ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error && !sending\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Last name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LAST_NAME'|translate\" formControlName=\"lastName\" autocomplete=\"section-blue family-name\"\n required>\n <mat-error *ngIf=\"controls.lastName.hasError('required') && controls.lastName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.lastName.hasError('minlength') && controls.lastName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- First name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.FIRST_NAME'|translate\" formControlName=\"firstName\" autocomplete=\"section-blue given-name\"\n required>\n <mat-error *ngIf=\"controls.firstName.hasError('required') && controls.firstName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.firstName.hasError('minlength') && controls.firstName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Additional fields -->\n <app-form-field *ngFor=\"let field of additionalFields\"\n [definition]=\"field\"\n [formControlName]=\"field.key\"\n [required]=\"true\">\n </app-form-field>\n\n </form>\n </mat-step>\n</mat-horizontal-stepper>\n", styles: ["form ion-toolbar.toolbar-buttons .toolbar-content{text-align:right}form ion-toolbar.toolbar-buttons .toolbar-background{border:0;background:inherit!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i6.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i6.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i12.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i12.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i13.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i14.AppFormField, selector: "app-form-field", inputs: ["definition", "required", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "floatLabel", "tabindex", "autofocus", "chipColor", "class"], outputs: ["keyup.enter"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
166
+ RegisterForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RegisterForm, selector: "app-register-form", outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "stepper", first: true, predicate: ["stepper"], descendants: true, static: true }], ngImport: i0, template: "<mat-horizontal-stepper linear #stepper=\"matHorizontalStepper\">\n\n <!-- Step 1: Username -->\n <mat-step [stepControl]=\"forms[0]\" *ngIf=\"forms[0].controls; let controls\">\n\n <form [formGroup]=\"forms[0]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n <ng-template matStepLabel>{{'REGISTER.STEP_EMAIL'|translate}}</ng-template>\n\n <!-- Email -->\n <mat-form-field>\n <input matInput\n [appAutofocus]=\"true\" [autofocusDelay]=\"500\" [placeholder]=\"'USER.EMAIL'|translate\"\n formControlName=\"email\" autocomplete=\"off\" required>\n <mat-error *ngIf=\"controls.email.hasError('required') && controls.email.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.email.hasError('email') && !controls.email.hasError('required') && controls.email.touched\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n <mat-error *ngIf=\"controls.email.hasError('availability') && controls.email.touched\" translate>REGISTER.ERROR.EMAIL_ALREADY_REGISTERED</mat-error>\n\n </mat-form-field>\n\n <!-- Confirm Email -->\n <mat-form-field>\n <input matInput autocomplete=\"off\" matFormFieldControl [placeholder]=\"'REGISTER.CONFIRM_EMAIL'|translate\" formControlName=\"confirmEmail\">\n <mat-error *ngIf=\"controls.confirmEmail.hasError('required') && controls.confirmEmail.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmEmail.hasError('equals') && controls.confirmEmail.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 2: Password -->\n <mat-step [stepControl]=\"forms[1]\" *ngIf=\"forms[1].controls; let controls\">\n\n <form [formGroup]=\"forms[1]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_PASSWORD'|translate}}</ng-template>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n required>\n <button matSuffix mat-icon-button\n type=\"button\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.password.hasError('required') && controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.password.hasError('minlength') && controls.password.touched\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 8} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Confirm password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'REGISTER.CONFIRM_PASSWORD'|translate\"\n formControlName=\"confirmPassword\"\n autocomplete=\"section-red new-password\"\n [type]=\"showConfirmPwd ? 'text' : 'password'\"\n required>\n <button mat-icon-button matSuffix\n (click)=\"showConfirmPwd = !showConfirmPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showConfirmPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('required') && controls.confirmPassword.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('equals') && controls.confirmPassword.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_PASSWORD' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 3: user details -->\n <mat-step [stepControl]=\"forms[2]\" *ngIf=\"forms[2].controls; let controls\">\n\n <form [formGroup]=\"forms[2]\" (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit()\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_USER_DETAILS'|translate}}</ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error && !sending\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Last name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LAST_NAME'|translate\" formControlName=\"lastName\" autocomplete=\"section-blue family-name\"\n required>\n <mat-error *ngIf=\"controls.lastName.hasError('required') && controls.lastName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.lastName.hasError('minlength') && controls.lastName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- First name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.FIRST_NAME'|translate\" formControlName=\"firstName\" autocomplete=\"section-blue given-name\"\n required>\n <mat-error *ngIf=\"controls.firstName.hasError('required') && controls.firstName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.firstName.hasError('minlength') && controls.firstName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Additional fields -->\n <app-form-field *ngFor=\"let field of additionalFields\"\n [definition]=\"field\"\n [formControlName]=\"field.key\"\n [required]=\"true\">\n </app-form-field>\n\n </form>\n </mat-step>\n</mat-horizontal-stepper>\n", styles: ["form ion-toolbar.toolbar-buttons .toolbar-content{text-align:right}form ion-toolbar.toolbar-buttons .toolbar-background{border:0;background:inherit!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i6.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i6.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i12.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i12.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i13.AutofocusDirective, selector: "[autofocus], input[appAutofocus], textarea[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i14.AppFormField, selector: "app-form-field", inputs: ["definition", "required", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "floatLabel", "tabindex", "autofocus", "chipColor", "class"], outputs: ["keyup.enter"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
167
167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RegisterForm, decorators: [{
168
168
  type: Component,
169
169
  args: [{ selector: 'app-register-form', template: "<mat-horizontal-stepper linear #stepper=\"matHorizontalStepper\">\n\n <!-- Step 1: Username -->\n <mat-step [stepControl]=\"forms[0]\" *ngIf=\"forms[0].controls; let controls\">\n\n <form [formGroup]=\"forms[0]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n <ng-template matStepLabel>{{'REGISTER.STEP_EMAIL'|translate}}</ng-template>\n\n <!-- Email -->\n <mat-form-field>\n <input matInput\n [appAutofocus]=\"true\" [autofocusDelay]=\"500\" [placeholder]=\"'USER.EMAIL'|translate\"\n formControlName=\"email\" autocomplete=\"off\" required>\n <mat-error *ngIf=\"controls.email.hasError('required') && controls.email.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.email.hasError('email') && !controls.email.hasError('required') && controls.email.touched\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n <mat-error *ngIf=\"controls.email.hasError('availability') && controls.email.touched\" translate>REGISTER.ERROR.EMAIL_ALREADY_REGISTERED</mat-error>\n\n </mat-form-field>\n\n <!-- Confirm Email -->\n <mat-form-field>\n <input matInput autocomplete=\"off\" matFormFieldControl [placeholder]=\"'REGISTER.CONFIRM_EMAIL'|translate\" formControlName=\"confirmEmail\">\n <mat-error *ngIf=\"controls.confirmEmail.hasError('required') && controls.confirmEmail.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmEmail.hasError('equals') && controls.confirmEmail.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 2: Password -->\n <mat-step [stepControl]=\"forms[1]\" *ngIf=\"forms[1].controls; let controls\">\n\n <form [formGroup]=\"forms[1]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_PASSWORD'|translate}}</ng-template>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n required>\n <button matSuffix mat-icon-button\n type=\"button\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.password.hasError('required') && controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.password.hasError('minlength') && controls.password.touched\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 8} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Confirm password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'REGISTER.CONFIRM_PASSWORD'|translate\"\n formControlName=\"confirmPassword\"\n autocomplete=\"section-red new-password\"\n [type]=\"showConfirmPwd ? 'text' : 'password'\"\n required>\n <button mat-icon-button matSuffix\n (click)=\"showConfirmPwd = !showConfirmPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showConfirmPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('required') && controls.confirmPassword.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('equals') && controls.confirmPassword.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_PASSWORD' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 3: user details -->\n <mat-step [stepControl]=\"forms[2]\" *ngIf=\"forms[2].controls; let controls\">\n\n <form [formGroup]=\"forms[2]\" (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit()\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_USER_DETAILS'|translate}}</ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error && !sending\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Last name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LAST_NAME'|translate\" formControlName=\"lastName\" autocomplete=\"section-blue family-name\"\n required>\n <mat-error *ngIf=\"controls.lastName.hasError('required') && controls.lastName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.lastName.hasError('minlength') && controls.lastName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- First name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.FIRST_NAME'|translate\" formControlName=\"firstName\" autocomplete=\"section-blue given-name\"\n required>\n <mat-error *ngIf=\"controls.firstName.hasError('required') && controls.firstName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.firstName.hasError('minlength') && controls.firstName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Additional fields -->\n <app-form-field *ngFor=\"let field of additionalFields\"\n [definition]=\"field\"\n [formControlName]=\"field.key\"\n [required]=\"true\">\n </app-form-field>\n\n </form>\n </mat-step>\n</mat-horizontal-stepper>\n", styles: ["form ion-toolbar.toolbar-buttons .toolbar-content{text-align:right}form ion-toolbar.toolbar-buttons .toolbar-background{border:0;background:inherit!important}\n"] }]